diff --git a/.gitignore b/.gitignore index d3c05c4e0d9..f536bae18d7 100644 --- a/.gitignore +++ b/.gitignore @@ -118,3 +118,5 @@ typings/ # Supabase **/supabase/.branches **/supabase/.temp + +apps/new-docs/* \ No newline at end of file diff --git a/.turbo-cookie b/.turbo-cookie deleted file mode 100755 index 9e5d1817106..00000000000 --- a/.turbo-cookie +++ /dev/null @@ -1 +0,0 @@ -cookie \ No newline at end of file diff --git a/apps/docs/codeHikeTheme.js b/apps/docs/codeHikeTheme.js new file mode 100644 index 00000000000..e34b5b89779 --- /dev/null +++ b/apps/docs/codeHikeTheme.js @@ -0,0 +1,372 @@ +module.exports = { + name: 'Stripe Docs Blue', + type: 'dark', + colors: { + 'editor.background': '#232323', + 'editor.foreground': '#fafafa', + 'activityBar.background': 'var(--colors-scale2)', + 'sideBar.background': 'yellow', + 'editorGroupHeader.tabsBackground': 'var(--colors-scale2)', + 'sideBarSectionHeader.background': 'var(--colors-scale2)', + 'tab.activeBackground': 'var(--colors-scale3)', + 'tab.inactiveBackground': 'var(--colors-scale2)', + 'tab.border': 'var(--colors-scale2)', + 'input.background': '#ffffff1a', + 'panel.background': '#1A2652', + 'panel.border': '#1A2652', + 'editorWidget.background': '#0d0f2b', + 'editorWidget.foreground': '#ffffff4d', + 'editorWidget.border': 'var(--colors-scale5)', + 'list.hoverBackground': '#ffffff1a', + 'list.activeSelectionBackground': '#ffffff1a', + 'list.inactiveSelectionBackground': '#ffffff1a', + 'editor.hoverHighlightBackground': '#ffffff1a', + 'editor.selectionHighlightBackground': '#ffffff1a', + 'activityBarBadge.background': 'yellow', + 'sideBarTitle.foreground': 'var(--colors-scale2)', + 'statusBar.background': 'var(--colors-scale2)', + }, + tokenColors: [ + { + name: 'Comment', + scope: ['comment', 'punctuation.definition.comment'], + settings: { + foreground: '#a3acb9', + fontStyle: '', + }, + }, + { + name: 'Variables', + scope: ['source', 'variable', 'variable.other.object', 'string constant.other.placeholder'], + settings: { + foreground: '#f5fbff', + }, + }, + { + name: 'Colors', + scope: ['variable.other.constant', 'constant.other.color'], + settings: { + foreground: '#ffffff', + fontStyle: 'bold', + }, + }, + { + name: 'Invalid', + scope: ['invalid', 'invalid.illegal'], + settings: { + foreground: '#FF5370', + }, + }, + { + name: 'Keyword, Storage', + scope: ['keyword', 'storage.type', 'storage.modifier'], + settings: { + foreground: '#98C1FE', + fontStyle: 'bold', + }, + }, + + { + name: 'Function', + scope: ['entity.name.function'], + settings: { + foreground: '#7fd3ed', + fontStyle: 'bold', + }, + }, + + { + name: 'Tag', + scope: ['entity.name.tag', 'meta.tag.sgml', 'markup.deleted.git_gutter'], + settings: { + foreground: '#98C1FE', + fontStyle: 'bold', + }, + }, + + { + name: 'Parameter, Property', + scope: [ + 'variable.parameter', + 'variable.other.object.property', + 'variable.other.property', + 'keyword.other.unit', + 'keyword.other', + ], + settings: { + foreground: '#F2AFE3', + }, + }, + { + name: 'Number, Constant, Function Argument, Tag Attribute, Embedded', + scope: [ + 'constant.numeric', + 'constant.language', + 'support.constant', + 'constant.character', + 'constant.escape', + ], + settings: { + foreground: '#f8b886', + }, + }, + { + name: 'String, Symbols, Inherited Class, Markup Heading', + scope: [ + 'string', + 'constant.other.symbol', + 'constant.other.key', + 'entity.other.inherited-class', + 'markup.heading', + 'markup.inserted.git_gutter', + 'meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js', + ], + settings: { + foreground: '#85d99e', + }, + }, + { + name: 'Entity Types', + scope: ['support.type'], + settings: { + foreground: '#B2CCD6', + }, + }, + { + name: 'CSS Class and Support', + scope: [ + 'source.css support.type.property-name', + 'source.sass support.type.property-name', + 'source.scss support.type.property-name', + 'source.less support.type.property-name', + 'source.stylus support.type.property-name', + 'source.postcss support.type.property-name', + ], + settings: { + foreground: '#B2CCD6', + }, + }, + { + name: 'Language methods', + scope: ['variable.language'], + settings: { + fontStyle: 'italic', + foreground: '#FF5370', + }, + }, + + { + name: 'Attributes', + scope: ['entity.other.attribute-name'], + settings: { + foreground: '#98C1FE', + fontStyle: 'italic', + }, + }, + { + name: 'Inserted', + scope: ['markup.inserted'], + settings: { + foreground: '#C3E88D', + }, + }, + { + name: 'Deleted', + scope: ['markup.deleted'], + settings: { + foreground: '#FF5370', + }, + }, + { + name: 'Changed', + scope: ['markup.changed'], + settings: { + foreground: '#C792EA', + }, + }, + { + name: 'Regular Expressions', + scope: ['string.regexp'], + settings: { + foreground: '#89DDFF', + }, + }, + { + name: 'Escape Characters', + scope: ['constant.character.escape'], + settings: { + foreground: '#89DDFF', + }, + }, + { + name: 'URL', + scope: ['*url*', '*link*', '*uri*'], + settings: { + fontStyle: 'underline', + }, + }, + { + name: 'ES7 Bind Operator', + scope: ['source.js constant.other.object.key.js string.unquoted.label.js'], + settings: { + fontStyle: 'italic', + foreground: '#FF5370', + }, + }, + + { + name: 'Markdown - Plain', + scope: ['text.html', 'punctuation.definition.list_item'], + settings: { + foreground: '#f5fbff', + }, + }, + { + name: 'Markdown - Markup Raw Inline', + scope: ['text.html.markdown markup.inline.raw.markdown'], + settings: { + foreground: '#C792EA', + }, + }, + { + name: 'Markdown - Markup Raw Inline Punctuation', + scope: ['text.html.markdown markup.inline.raw.markdown punctuation.definition.raw.markdown'], + settings: { + foreground: '#65737E', + }, + }, + { + name: 'Markdown - Heading', + scope: [ + 'markdown.heading', + 'markup.heading | markup.heading entity.name', + 'markup.heading.markdown punctuation.definition.heading.markdown', + ], + settings: { + foreground: '#C3E88D', + }, + }, + { + name: 'Markup - Italic', + scope: ['markup.italic'], + settings: { + fontStyle: 'italic', + foreground: '#f07178', + }, + }, + { + name: 'Markup - Bold', + scope: ['markup.bold', 'markup.bold string'], + settings: { + fontStyle: 'bold', + foreground: '#f07178', + }, + }, + { + name: 'Markup - Bold-Italic', + scope: [ + 'markup.bold markup.italic', + 'markup.italic markup.bold', + 'markup.quote markup.bold', + 'markup.bold markup.italic string', + 'markup.italic markup.bold string', + 'markup.quote markup.bold string', + ], + settings: { + fontStyle: 'bold', + foreground: '#f07178', + }, + }, + { + name: 'Markup - Underline', + scope: ['markup.underline'], + settings: { + fontStyle: 'underline', + foreground: '#F78C6C', + }, + }, + { + name: 'Markdown - Blockquote', + scope: ['markup.quote punctuation.definition.blockquote.markdown'], + settings: { + foreground: '#65737E', + }, + }, + { + name: 'Markup - Quote', + scope: ['markup.quote'], + settings: { + fontStyle: 'italic', + }, + }, + + { + name: 'Markdown - Link Description', + scope: ['string.other.link.description.title.markdown'], + settings: { + foreground: '#C792EA', + }, + }, + { + name: 'Markdown - Link Anchor', + scope: ['constant.other.reference.link.markdown'], + settings: { + foreground: '#FFCB6B', + }, + }, + { + name: 'Markup - Raw Block', + scope: ['markup.raw.block'], + settings: { + foreground: '#C792EA', + }, + }, + { + name: 'Markdown - Raw Block Fenced', + scope: ['markup.raw.block.fenced.markdown'], + settings: { + foreground: '#00000050', + }, + }, + { + name: 'Markdown - Fenced Bode Block', + scope: ['punctuation.definition.fenced.markdown'], + settings: { + foreground: '#00000050', + }, + }, + { + name: 'Markdown - Fenced Bode Block Variable', + scope: [ + 'markup.raw.block.fenced.markdown', + 'variable.language.fenced.markdown', + 'punctuation.section.class.end', + ], + settings: { + foreground: '#EEFFFF', + }, + }, + { + name: 'Markdown - Fenced Language', + scope: ['variable.language.fenced.markdown'], + settings: { + foreground: '#65737E', + }, + }, + { + name: 'Markdown - Separator', + scope: ['meta.separator'], + settings: { + fontStyle: 'bold', + foreground: '#65737E', + }, + }, + { + name: 'Markup - Table', + scope: ['markup.table'], + settings: { + foreground: '#EEFFFF', + }, + }, + ], +} diff --git a/apps/docs/components/ButtonCard.tsx b/apps/docs/components/ButtonCard.tsx index 7d7f7e12809..f1aa4caefbc 100644 --- a/apps/docs/components/ButtonCard.tsx +++ b/apps/docs/components/ButtonCard.tsx @@ -25,7 +25,7 @@ const ButtonCard: FC = ({ className={[ 'h-full block shadow-none bg-scale-300 rounded transition', 'border border-transparent hover:border-scale-600', - ].join('')} + ].join(' ')} > {children ? ( children @@ -43,7 +43,7 @@ const ButtonCard: FC = ({ ) : ( icon )} -

{title}

+

{title}

{description}

)} diff --git a/apps/docs/components/CodeBlock/CodeBlock.tsx b/apps/docs/components/CodeBlock/CodeBlock.tsx index 1ca6b128c12..f4e962bb2aa 100644 --- a/apps/docs/components/CodeBlock/CodeBlock.tsx +++ b/apps/docs/components/CodeBlock/CodeBlock.tsx @@ -10,13 +10,14 @@ import py from 'react-syntax-highlighter/dist/cjs/languages/hljs/python' import sql from 'react-syntax-highlighter/dist/cjs/languages/hljs/sql' import bash from 'react-syntax-highlighter/dist/cjs/languages/hljs/bash' import dart from 'react-syntax-highlighter/dist/cjs/languages/hljs/dart' +import json from 'react-syntax-highlighter/dist/cjs/languages/hljs/json' import { useState } from 'react' -import { useTheme } from '../Providers' +import { useTheme } from 'common/Providers' interface Props { title?: string - language: 'js' | 'jsx' | 'sql' | 'py' | 'bash' | 'ts' | 'dart' + language: 'js' | 'jsx' | 'sql' | 'py' | 'bash' | 'ts' | 'dart' | 'json' linesToHighlight?: number[] hideCopy?: boolean hideLineNumbers?: boolean @@ -47,6 +48,11 @@ const CodeBlock: FC = ({ }, 1000) } + // check the length of the string inside the tag + // if it's fewer than 70 characters, add a white-space: pre so it doesn't wrap + const shortCodeBlockClasses = + typeof children === 'string' && children.length < 70 ? 'short-inline-codeblock' : '' + let lang = language ? language : className ? className.replace('language-', '') : 'js' // force jsx to be js highlighted if (lang === 'jsx') lang = 'js' @@ -56,81 +62,88 @@ const CodeBlock: FC = ({ SyntaxHighlighter.registerLanguage('sql', sql) SyntaxHighlighter.registerLanguage('bash', bash) SyntaxHighlighter.registerLanguage('dart', dart) + SyntaxHighlighter.registerLanguage('json', json) const large = false // don't show line numbers if bash == lang - const showLineNumbers = hideLineNumbers || lang !== 'bash' + if (lang !== 'bash') hideLineNumbers = true + const showLineNumbers = !hideLineNumbers return ( -
+ <> {title && (
{title.replace(/%20/g, ' ')}
)} {className ? ( - { - if (linesToHighlight.includes(lineNumber)) { - return { - style: { display: 'block', backgroundColor: 'var(--colors-scale6)' }, +
+ { + if (linesToHighlight.includes(lineNumber)) { + return { + style: { display: 'block', backgroundColor: 'var(--colors-scale6)' }, + } } - } - return {} - }} - lineNumberContainerStyle={{ - paddingTop: '128px', - }} - lineNumberStyle={{ - minWidth: '44px', - paddingLeft: '4px', - paddingRight: '4px', - marginRight: '12px', - color: '#828282', - textAlign: 'center', - fontSize: large ? 14 : 12, - paddingTop: '4px', - paddingBottom: '4px', - }} - > - {(value || children)?.trimEnd()} - - ) : ( - {value || children} - )} - {!hideCopy && (value || children) && className ? ( -
- - - + {/* // + @ts-ignore */} + + + +
+ ) : null}
- ) : null} -
+ ) : ( + {value || children} + )} + ) } diff --git a/apps/docs/components/ComesFrom.tsx b/apps/docs/components/ComesFrom.tsx new file mode 100644 index 00000000000..052b50d4099 --- /dev/null +++ b/apps/docs/components/ComesFrom.tsx @@ -0,0 +1,22 @@ +import { FC } from 'react' +import { IconSearch } from '~/../../packages/ui' +// [Terry] — delete this after development +// just for making it easy to see where things are coming from +interface Props { + link: string + text: string + className?: string +} +export const ComesFrom: FC = ({ link, text, className }) => { + return ( +
+ + + Comes from: + + + {text} + +
+ ) +} diff --git a/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts b/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts index 305ac4fa170..eb214e4963b 100644 --- a/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts +++ b/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts @@ -77,3 +77,19 @@ export const unHighlightSelectedTocItems = () => { const currentActiveItem = document.querySelector('.toc-menu .toc__menu-item--active') currentActiveItem?.classList.remove('toc__menu-item--active') } + +export const highlightSelectedNavItem = (id: string) => { + const navMenuItems = document.querySelectorAll('.function-link-item a') + + // find any currently active items and remove them + const currentActiveItems = document.querySelectorAll('.function-link-list .text-brand-900') + currentActiveItems.forEach((item) => item.classList.remove('text-brand-900')) + + // Add active class to the current item + navMenuItems.forEach((item) => { + // @ts-ignore + if (item.href.split('/').at(-1) === id) { + item.classList.add('text-brand-900') + } + }) +} diff --git a/apps/docs/components/CustomHTMLElements/Heading.tsx b/apps/docs/components/CustomHTMLElements/Heading.tsx index b07ea6cab17..f1248c38d1c 100644 --- a/apps/docs/components/CustomHTMLElements/Heading.tsx +++ b/apps/docs/components/CustomHTMLElements/Heading.tsx @@ -6,16 +6,25 @@ import { } from './CustomHTMLElements.utils' import { useInView } from 'react-intersection-observer' -const Heading = ({ tag, children }) => { +/** + * [Joshen] The trick with rootMargin + * We are shrinking the top of the root element by 20 percent, which is currently our entire page, + * and the bottom by 35 percent. Therefore, when a header is at the top 20 percent and bottom 35 percent + * of our page, it will not be counted as visible. + */ + +interface Props { + tag: string +} + +const Heading: React.FC = ({ tag, children }) => { const HeadingTag = `${tag}` as any const anchor = getAnchor(children) const link = `#${anchor}` - // check if current heading is in view, update TOC active item accordingly - // [Joshen] Ideally we highlight the section in the TOC when it's at the top of the page - // much like when we click on the item in the TOC itself, the rootMargin fix is insufficient const { ref } = useInView({ threshold: 1, + rootMargin: '-20% 0% -35% 0px', onChange: (inView, entry) => { if (window.scrollY === 0) unHighlightSelectedTocItems() if (inView) highlightSelectedTocItem(entry.target.id) diff --git a/apps/docs/components/CustomHTMLElements/InlineCode.tsx b/apps/docs/components/CustomHTMLElements/InlineCode.tsx index 95dc7603bb0..5ee5811c2f4 100644 --- a/apps/docs/components/CustomHTMLElements/InlineCode.tsx +++ b/apps/docs/components/CustomHTMLElements/InlineCode.tsx @@ -1,11 +1,13 @@ -const InlineCodeTag = ({ children }) => { +import { FC } from 'react' + +const InlineCodeTag = ({ children }: any) => { // If children isn't a string, just return it as is, just in case if (typeof children !== 'string') return children // check the length of the string inside the tag // if it's fewer than 70 characters, add a white-space: pre so it doesn't wrap - const classes = children.length < 70 ? 'short-inline-codeblock' : '' + const className = children.length < 70 ? 'short-inline-codeblock' : '' - return {children} + return HELLO WORLD {children} } export default InlineCodeTag diff --git a/apps/docs/components/Footer/DarkModeToggle.tsx b/apps/docs/components/Footer/DarkModeToggle.tsx index 230e973e4ba..04f9d225854 100644 --- a/apps/docs/components/Footer/DarkModeToggle.tsx +++ b/apps/docs/components/Footer/DarkModeToggle.tsx @@ -1,4 +1,4 @@ -import { useTheme } from '~/components/Providers' +import { useTheme } from 'common/Providers' import { IconSun, IconMoon } from '@supabase/ui' function DarkModeToggle() { @@ -19,7 +19,7 @@ function DarkModeToggle() { type="button" aria-pressed="false" className={` - relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent + relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none ${ isDarkMode ? 'bg-scale-500' : 'bg-scale-900' } mx-5 diff --git a/apps/docs/components/Footer/index.tsx b/apps/docs/components/Footer/index.tsx index b690dd003aa..01424c906f5 100644 --- a/apps/docs/components/Footer/index.tsx +++ b/apps/docs/components/Footer/index.tsx @@ -3,7 +3,7 @@ import Link from 'next/link' import Image from 'next/image' import FooterLinks from 'data/footer.json' import DarkModeToggle from './DarkModeToggle' -import { useTheme } from '../Providers' +import { useTheme } from 'common/Providers' import * as supabaseLogoWordmarkDark from 'common/assets/images/supabase-logo-wordmark--dark.png' import * as supabaseLogoWordmarkLight from 'common/assets/images/supabase-logo-wordmark--light.png' diff --git a/apps/docs/components/FooterHelpCallout.tsx b/apps/docs/components/FooterHelpCallout.tsx new file mode 100644 index 00000000000..82f1a03c683 --- /dev/null +++ b/apps/docs/components/FooterHelpCallout.tsx @@ -0,0 +1,13 @@ +const FooterHelpCallout = () => { + return ( +
+
Need some help?
+

+ Not to worry, our specialist engineers are here to help. Submit a support ticket through the{' '} + Dashboard. +

+
+ ) +} + +export default FooterHelpCallout diff --git a/apps/docs/components/Frameworks.tsx b/apps/docs/components/Frameworks.tsx index 1716a2600ef..a1b6d0da29b 100644 --- a/apps/docs/components/Frameworks.tsx +++ b/apps/docs/components/Frameworks.tsx @@ -1,5 +1,5 @@ import ButtonCard from './ButtonCard' -import { useTheme } from '~/components/Providers' +import { useTheme } from 'common/Providers' const Frameworks = () => { const { isDarkMode } = useTheme() @@ -8,86 +8,86 @@ const Frameworks = () => { { name: 'Angular', logo: { - light: '/docs/img/libraries/angular-icon.svg', - dark: '/docs/img/libraries/angular-icon.svg', + light: '/docs/img/icons/angular-icon.svg', + dark: '/docs/img/icons/angular-icon.svg', }, href: '/guides/with-angular', }, { name: 'Expo', logo: { - light: '/docs/img/libraries/expo-icon.svg', - dark: '/docs/img/libraries/expo-icon-dark.svg', + light: '/docs/img/icons/expo-icon.svg', + dark: '/docs/img/icons/expo-icon-dark.svg', }, href: '/guides/with-expo', }, { name: 'Flutter', logo: { - light: '/docs/img/libraries/flutter-icon.svg', - dark: '/docs/img/libraries/flutter-icon.svg', + light: '/docs/img/icons/flutter-icon.svg', + dark: '/docs/img/icons/flutter-icon.svg', }, href: '/guides/with-flutter', }, { name: 'JavaScript', logo: { - light: '/docs/img/libraries/javascript-icon.svg', - dark: '/docs/img/libraries/javascript-icon.svg', + light: '/docs/img/icons/javascript-icon.svg', + dark: '/docs/img/icons/javascript-icon.svg', }, href: '/reference/javascript/installing#javascript', }, { name: 'Next.js', logo: { - light: '/docs/img/libraries/nextjs-light-icon.svg', - dark: '/docs/img/libraries/nextjs-dark-icon.svg', + light: '/docs/img/icons/nextjs-light-icon.svg', + dark: '/docs/img/icons/nextjs-dark-icon.svg', }, href: '/guides/with-nextjs', }, { name: 'React', logo: { - light: '/docs/img/libraries/react-icon.svg', - dark: '/docs/img/libraries/react-icon.svg', + light: '/docs/img/icons/react-icon.svg', + dark: '/docs/img/icons/react-icon.svg', }, href: '/guides/with-react', }, { name: 'RedwoodJS', logo: { - light: '/docs/img/libraries/redwoodjs-icon.svg', - dark: '/docs/img/libraries/redwoodjs-icon.svg', + light: '/docs/img/icons/redwoodjs-icon.svg', + dark: '/docs/img/icons/redwoodjs-icon.svg', }, href: '/guides/with-redwoodjs', }, { name: 'SolidJS', logo: { - light: '/docs/img/libraries/solidjs-icon.svg', - dark: '/docs/img/libraries/solidjs-icon.svg', + light: '/docs/img/icons/solidjs-icon.svg', + dark: '/docs/img/icons/solidjs-icon.svg', }, href: '/guides/with-solidjs', }, { name: 'Svelte', logo: { - light: '/docs/img/libraries/svelte-icon.svg', - dark: '/docs/img/libraries/svelte-icon.svg', + light: '/docs/img/icons/svelte-icon.svg', + dark: '/docs/img/icons/svelte-icon.svg', }, href: '/guides/with-svelte', }, { name: 'Vue', logo: { - light: '/docs/img/libraries/vuejs-icon.svg', - dark: '/docs/img/libraries/vuejs-icon.svg', + light: '/docs/img/icons/vuejs-icon.svg', + dark: '/docs/img/icons/vuejs-icon.svg', }, href: '/guides/with-vue-3', }, ] return ( -
+
{frameworks.map((x) => (
= ({ list }) => { return ( -
+ + + + {menu.items.map((x, index) => { + // console.log('1st type of link?', x.items && x.items.length > 0) + // console.log() + return ( +
+ {x.items && x.items.length > 0 ? ( +
+ {x.items.map((subItem, subItemIndex) => { + // console.log('subitem', { subItem }) + // console.log('router', router) + //console.log('subitem url', subItem.url) + let subItemMenuOpen = false + + if (router.asPath.includes(subItem.url)) { + subItemMenuOpen = true + } + + const LinkContainer = (props) => { + if (props.url) { + return ( + + {props.children} + + ) + } else { + return ( + + ) + } + } + + return ( + <> + {subItemIndex === 0 && ( + <> +
+ + {x.name} + + + )} + +
  • + + {subItem.icon && } + {subItem.name} + + {/* + + {subItem.icon && ( + + )} + {subItem.name} + + */} +
  • + + {subItem.items && subItem.items.length > 0 && ( + + {subItem.items.map((subSubItem, subSubItemIndex) => { + return ( +
  • + + + {subSubItem.name} + + +
  • + ) + })} +
    + )} +
    + + ) + })} +
    + ) : ( + <> +
  • + + + {x.icon && } + {x.name} + + +
  • + + )} +
    + ) + })} + {menu.extras && ( + <> +
    + + Resources + + + )} + {menu.extras?.map((x) => { + return ( + + ) + })} + + + ) +} + +export default NavigationMenuGuideList diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefList.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefList.tsx new file mode 100644 index 00000000000..dc2fe22f731 --- /dev/null +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefList.tsx @@ -0,0 +1,295 @@ +import * as Accordion from '@radix-ui/react-accordion' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { IconChevronLeft } from 'ui' +import * as NavItems from './NavigationMenu.constants' + +import { find } from 'lodash' +import Image from 'next/image' +import { useTheme } from 'common/Providers' + +// import apiCommonSections from '~/../../spec/common-client-libs-sections.json' + +import RevVersionDropdown from '~/components/RefVersionDropdown' +import { useMenuActiveRefId } from '~/hooks/useMenuState' +import { RefIdOptions, RefKeyOptions } from './NavigationMenu' + +const FunctionLink = ({ + title, + id, + icon, + library, + slug, +}: { + title: string + name?: string + id: string + icon?: string + product?: string + library: string + slug: string +}) => { + const router = useRouter() + const activeAccordianItem = useMenuActiveRefId() + + const active = activeAccordianItem === id + return ( +
  • + + + {icon && {icon}} + {title} + + +
  • + ) +} + +const SideMenuTitle = ({ title }: { title: string }) => { + return ( + + {title} + + ) +} + +const Divider = () => { + return
    +} + +interface INavigationMenuRefList { + currentLevel: string + + id: RefIdOptions + lib: RefKeyOptions + commonSections: any[] // to do type up + + // the keys of menu items that are allowed to be shown on the side menu + // if undefined, we show all the menu items + allowedClientKeys?: string[] +} + +const NavigationMenuRefList: React.FC = ({ + currentLevel, + id, + lib, + commonSections, + allowedClientKeys, +}) => { + const router = useRouter() + const { isDarkMode } = useTheme() + + let sections = commonSections + + const allowedKeys = allowedClientKeys + + if (!sections) console.error('no common sections imported') + + const menu = NavItems[id] + + const databaseFunctions = find(sections, { title: 'Database' }) + ? find(sections, { title: 'Database' }).items + : [] + + const authFunctions = find(sections, { title: 'Auth' }) + ? find(sections, { title: 'Auth' }).items + : [] + + const filterIds = + databaseFunctions.length > 0 + ? find(databaseFunctions, { + id: 'using-filters', + }) && + find(databaseFunctions, { + id: 'using-filters', + }) + .items.filter((x) => allowedKeys.includes(x.id)) + .map((x) => x.id) + : [] + const modifierIds = + databaseFunctions.length > 0 + ? find(databaseFunctions, { + id: 'using-modifiers', + }) && + find(databaseFunctions, { + id: 'using-modifiers', + }) + .items.filter((x) => allowedKeys.includes(x.id)) + .map((x) => x.id) + : [] + + const authServerIds = + databaseFunctions.length > 0 + ? find(authFunctions, { + id: 'admin-api', + }) && + find(authFunctions, { + id: 'admin-api', + }).items.map((x) => x.id) + : [] + + return ( +
    +
    + + +
    +
    + +
    +
    + Back to Main Menu +
    + + +
    + {id} + + {menu.title} + + +
    + {/* )} */} + +
      + {sections.map((fn: any, fnIndex) => { + // + // check if the link is allowed to be displayed + function isFuncNotInLibraryOrVersion(id, type) { + if (id && allowedKeys && !allowedKeys.includes(id) && type !== 'markdown') { + /* + * Remove this menu link from side bar, as it does not exist for either + * this language, or for this lib version + * + * */ + return true + } else { + return false + } + } + + // run allow check + if (isFuncNotInLibraryOrVersion(fn.id, fn.type)) { + return <> + } + + const RenderLink = (props) => { + const activeAccordianItem = useMenuActiveRefId() + let active = false + + const isFilter = + filterIds && filterIds.length > 0 && filterIds.includes(activeAccordianItem) + const isModifier = + modifierIds && modifierIds.length > 0 && modifierIds.includes(activeAccordianItem) + const isAuthServer = + authServerIds && + authServerIds.length > 0 && + authServerIds.includes(activeAccordianItem) + + if ( + (isFilter && !isModifier && !isAuthServer && props.id === 'using-filters') || + (activeAccordianItem === 'using-filters' && props.id === 'using-filters') + ) { + active = true + } else if ( + (isModifier && !isFilter && !isAuthServer && props.id === 'using-modifiers') || + (activeAccordianItem === 'using-modifiers' && props.id === 'using-modifiers') + ) { + active = true + } else if ( + (isAuthServer && !isFilter && !isModifier && props.id === 'admin-api') || + (activeAccordianItem === 'admin-api' && props.id === 'admin-api') + ) { + active = true + } else { + active = false + } + + return ( + + + + + {props.items && + props.items + .filter((item) => allowedKeys.includes(item.id)) + .map((item) => { + return + })} + + + + ) + } + + // handle subtitles with subitems + if (!fn.id) { + return ( + <> + + + {fn.items && + fn.items + //.filter((item) => item.libs && item.libs.includes(lib)) + .map((item) => { + // run allow check + if (isFuncNotInLibraryOrVersion(item.id, item.type)) return <> + return + })} + + ) + } else { + // handle normal links + return ( + <> + + {fn.items && + fn.items + //.filter((item) => item.libs.includes(lib)) + .map((item) => )} + + ) + } + })} +
    +
    +
    + ) +} + +export default NavigationMenuRefList diff --git a/apps/docs/components/Navigation/NavigationMenu/TopNavBar.tsx b/apps/docs/components/Navigation/NavigationMenu/TopNavBar.tsx new file mode 100644 index 00000000000..3748821840b --- /dev/null +++ b/apps/docs/components/Navigation/NavigationMenu/TopNavBar.tsx @@ -0,0 +1,172 @@ +import Image from 'next/image' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { FC, useEffect, useState } from 'react' +import { Button, IconCommand, IconMenu, IconMoon, IconSearch, IconSun, Input, Listbox } from 'ui' +import { SearchButton } from '~/components/DocSearch' +import { REFERENCES } from '~/components/Navigation/Navigation.constants' +import { useTheme } from 'common/Providers' + +import { getPageType } from '~/lib/helpers' + +const TopNavBar: FC = () => { + const { isDarkMode, toggleTheme } = useTheme() + const [mounted, setMounted] = useState(false) + const [mobileMenuOpen, setMobileMenuOpen] = useState(false) + + const { asPath, push } = useRouter() + const pathSegments = asPath.split('/') + + const library = pathSegments.length >= 3 ? pathSegments[2] : undefined + const libraryMeta = REFERENCES?.[library] ?? undefined + const versions = libraryMeta?.versions ?? [] + + const version = versions.includes(pathSegments[pathSegments.indexOf(library) + 1]) + ? pathSegments[pathSegments.indexOf(library) + 1] + : versions[0] + + const pageType = getPageType(asPath) + + useEffect(() => { + setMounted(true) + }, [isDarkMode]) + + const pageLinks = [ + { text: 'Guides', key: 'docs', link: '/' }, + { text: 'Reference', key: 'reference', link: '/reference' }, + ] + + const toggleDarkMode = () => { + localStorage.setItem('supabaseDarkMode', (!isDarkMode).toString()) + toggleTheme() + + const key = localStorage.getItem('supabaseDarkMode') + document.documentElement.className = key === 'true' ? 'dark' : '' + } + + const onSelectVersion = (version: string) => { + // [Joshen] Ideally we use but this works for now + if (!library) return + if (version === versions[0]) { + push(`/reference/${library}`) + } else { + push(`/reference/${library}/${version}`) + } + } + + // [Joshen] Kaizen: Use UI library's SidePanel for this + const toggleMobileMenu = () => { + setMobileMenuOpen(!mobileMenuOpen) + const sidebar = document.querySelector('.sidebar-menu-container') + const contentPane = document.querySelector('.main-content-pane') + + sidebar.classList.toggle('hidden') + contentPane.classList.toggle('hidden') + } + + return ( + + ) +} +export default TopNavBar diff --git a/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx b/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx new file mode 100644 index 00000000000..6fcae17712d --- /dev/null +++ b/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx @@ -0,0 +1,173 @@ +import Image from 'next/image' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { FC, useEffect, useState } from 'react' +import { + Badge, + Button, + Dropdown, + IconCommand, + IconMenu, + IconMessageSquare, + IconMoon, + IconSearch, + IconSun, + Input, + Listbox, +} from 'ui' +import { SearchButton } from '~/components/DocSearch' +import { REFERENCES } from '~/components/Navigation/Navigation.constants' +import { useTheme } from 'common/Providers' + +import { getPageType } from '~/lib/helpers' + +const TopNavBarRef: FC = () => { + const { isDarkMode, toggleTheme } = useTheme() + const [mounted, setMounted] = useState(false) + const [mobileMenuOpen, setMobileMenuOpen] = useState(false) + + const { asPath, push } = useRouter() + const pathSegments = asPath.split('/') + + const library = pathSegments.length >= 3 ? pathSegments[2] : undefined + const libraryMeta = REFERENCES?.[library] ?? undefined + const versions = libraryMeta?.versions ?? [] + + const version = versions.includes(pathSegments[pathSegments.indexOf(library) + 1]) + ? pathSegments[pathSegments.indexOf(library) + 1] + : versions[0] + + const pageType = getPageType(asPath) + + useEffect(() => { + setMounted(true) + }, [isDarkMode]) + + const pageLinks = [ + { text: 'Guides', key: 'docs', link: '/' }, + { text: 'Reference', key: 'reference', link: '/reference' }, + ] + + const toggleDarkMode = () => { + localStorage.setItem('supabaseDarkMode', (!isDarkMode).toString()) + toggleTheme() + + const key = localStorage.getItem('supabaseDarkMode') + document.documentElement.className = key === 'true' ? 'dark' : '' + } + + const onSelectVersion = (version: string) => { + // [Joshen] Ideally we use but this works for now + if (!library) return + if (version === versions[0]) { + push(`/reference/${library}`) + } else { + push(`/reference/${library}/${version}`) + } + } + + // [Joshen] Kaizen: Use UI library's SidePanel for this + const toggleMobileMenu = () => { + setMobileMenuOpen(!mobileMenuOpen) + const sidebar = document.querySelector('.sidebar-menu-container') + const contentPane = document.querySelector('.main-content-pane') + + sidebar.classList.toggle('hidden') + contentPane.classList.toggle('hidden') + } + + return ( + + ) +} +export default TopNavBarRef diff --git a/apps/docs/components/Navigation/RefSwitcher.tsx b/apps/docs/components/Navigation/RefSwitcher.tsx new file mode 100644 index 00000000000..25a2335da54 --- /dev/null +++ b/apps/docs/components/Navigation/RefSwitcher.tsx @@ -0,0 +1,174 @@ +import Link from 'next/link' +import { useRouter } from 'next/router' +import { useEffect, useState } from 'react' +import { Badge, Dropdown, GlassPanel, IconChevronDown, IconChevronRight, Popover } from 'ui' + +import { references } from './NavigationMenu/NavigationMenu.constants' + +const RefSwitcher = () => { + const router = useRouter() + const [currentRef, setCurrentRef] = useState() + const [open, setOpen] = useState(false) + + useEffect(() => { + setOpen(false) + }, [router.pathname]) + + return ( +
    + setOpen(!open)} + overlay={ + <> + {references.map((section) => { + return ( + <> +
    + + {section.label} + +
    +
    + {section.items.map((item) => { + return ( + + setOpen(!open)} + > +
    + +
    +
    + {item.label} +
    +
    + +
    +
    +
    + {item.description} +
    +
    +
    + + ) + })} +
    + + ) + })} + + } + > +
    +
    +
    + +

    + supabase-js +

    +
    +
    + +
    +
    +
    +
    + }> +
    +
    +
    +
    +

    + v2.0 +

    +
    +
    + +
    +
    +
    +
    +
    +
    + ) +} + +const VersionOverlay = () => { + return ( + <> + Stable releases + + version 2.0 + + Latest + + + Version 1.0 + + Alpha releases + +

    Currently no alpha releases

    +
    + + ) +} +export default RefSwitcher diff --git a/apps/docs/components/Options.tsx b/apps/docs/components/Options.tsx new file mode 100644 index 00000000000..c2783edeaa4 --- /dev/null +++ b/apps/docs/components/Options.tsx @@ -0,0 +1,81 @@ +import { FC, useState } from 'react' +import { IconXCircle } from '~/../../packages/ui' + +interface IOptions { + name?: string +} + +type IOption = any + +type OptionsSubComponents = { + Option: IOption +} + +const Options: FC & OptionsSubComponents = (props) => { + const [open, setOpen] = useState(false) + return ( +
    + +
    + {props.children} +
    +
    + ) +} + +const Option: FC = (props) => { + return ( +
    +
    + + {props.name ?? 'no-name'} + + + {props.isOptional ? ( +
    Optional
    + ) : ( +
    + REQUIRED +
    + )} +
    + {props.type ?? 'no type'} +
    +

    {props.description ?? 'nodescription'}

    + {props.children} +
    + ) +} + +Options.Option = Option + +export default Options diff --git a/apps/docs/components/Params.tsx b/apps/docs/components/Params.tsx new file mode 100644 index 00000000000..ede7f8bcac7 --- /dev/null +++ b/apps/docs/components/Params.tsx @@ -0,0 +1,29 @@ +import { FC } from 'react' + +type IParamProps = any + +const Param: FC = (paramItem) => { + return ( +
  • +
    + + {paramItem.name ?? 'no-name'} + + + {paramItem.isOptional ? ( +
    Optional
    + ) : ( +
    + REQUIRED +
    + )} +
    + {paramItem.type ?? 'no type'} +
    +

    {paramItem.description ?? 'nodescription'}

    + {paramItem.children} +
  • + ) +} + +export default Param diff --git a/apps/docs/components/RefVersionDropdown.tsx b/apps/docs/components/RefVersionDropdown.tsx new file mode 100644 index 00000000000..7a5b8bb88ec --- /dev/null +++ b/apps/docs/components/RefVersionDropdown.tsx @@ -0,0 +1,73 @@ +import { Badge, Dropdown, IconChevronDown } from 'ui' +import { useRouter } from 'next/router' +import { REFERENCES } from './Navigation/NavigationMenu/NavigationMenu.constants' + +const RevVersionDropdown = () => { + const { asPath, push } = useRouter() + const pathSegments = asPath.split('/') + + const library = pathSegments.length >= 3 ? pathSegments[2] : undefined + const libraryMeta = REFERENCES?.[library] ?? undefined + const versions = libraryMeta?.versions ?? [] + + const currentVersion = versions.includes(pathSegments[pathSegments.indexOf(library) + 1]) + ? pathSegments[pathSegments.indexOf(library) + 1] + : versions[0] + + const onSelectVersion = (version: string) => { + if (!library) return + if (version === versions[0]) { + push(`/reference/${library}/start`) + } else { + push(`/reference/${library}/${version}/start`) + } + } + + if (!versions || versions.length === 0) { + return <> + } + + return ( + + Stable releases + {versions.map((version, index) => ( + onSelectVersion(version)}> + + Version {version}.0 + + + {index === 0 && Latest} + + + ))} + + } + > +
    + {/* version */} + + {currentVersion}.0 + + +
    +
    + ) +} +export default RevVersionDropdown diff --git a/apps/docs/components/StepHike/StepHikeContext.tsx b/apps/docs/components/StepHike/StepHikeContext.tsx new file mode 100644 index 00000000000..977ca043cef --- /dev/null +++ b/apps/docs/components/StepHike/StepHikeContext.tsx @@ -0,0 +1,8 @@ +import { createContext } from 'react' + +// Make sure the shape of the default value passed to +// createContext matches the shape that the consumers expect! +export const StepHikeContext = createContext({ + activeStep: undefined, + steps: undefined, +}) diff --git a/apps/docs/components/StepHike/index.tsx b/apps/docs/components/StepHike/index.tsx new file mode 100644 index 00000000000..cbb2731004f --- /dev/null +++ b/apps/docs/components/StepHike/index.tsx @@ -0,0 +1,187 @@ +import { useEffect, useState } from 'react' +import { useInView } from 'react-intersection-observer' +import { StepHikeContext } from './StepHikeContext' + +const StepHike = ({ children, title }) => { + const [activeStep, setActiveStep] = useState(undefined) + + // check if there are any children + if (!children) throw 'StepHike component requires children' + + const steps = children.filter((x) => { + return x.type.name === 'Step' + }) + + useEffect(() => { + setActiveStep({ + titleId: steps[0].props.title.replaceAll(' ', '-').toLowerCase(), + step: 0, + }) + }, []) + + // check if there is at least 1 StepHike subcomponent + if (steps.length === 0 || !steps) + throw 'StepHike component needs at least 1 child' + + // console.log('length of the steps filter', steps.length) + + return ( +
    + {/*
    +

    {title}

    +
    + + +
    +
    */} + + {/*
    +
    +
    + {activeStep?.step + 1} +
    +

    + {steps[activeStep?.step] && steps[activeStep?.step].props.title} +

    + + Step {activeStep?.step + 1} of {steps?.length} + +
    +
    + + +
    +
    */} + {children} +
    + ) +} + +const Step = ({ children, title, step }) => { + const [show, setShow] = useState(false) + + useEffect(() => { + setShow(true) + }, []) + + const ChildrenRender = ({ active }) =>
    {children}
    + + // const ref = useRef(null) + + // useEffect(() => { + // const cachedRef = ref.current + // const observer = new IntersectionObserver( + // ([e]) => + // // setStuck(e.intersectionRatio < 1) + // console.log('scroll', title), + // { + // threshold: [0], + // rootMargin: '0px 0px 0px 0px', + // } + // ) + + // // const cachedRef: HTMLDivElement | null + // // Argument of type 'HTMLDivElement | null' is not assignable to parameter of type 'Element'. + // // Type 'null' is not assignable to type 'Element'.ts(2345) + // observer.observe(cachedRef) + // return () => observer.unobserve(cachedRef) + // }, [ref]) + + const { ref } = useInView({ + rootMargin: '10px 20px 30px 40px', + threshold: 1, + onChange: (inView, entry) => { + if (window.scrollY === 0) console.log('out of view', title) + if (inView) console.log('in view', title) // highlightSelectedTocItem(entry.target.id) + }, + }) + + return ( + <> + + {({ activeStep, steps }) => { + // console.log('activeStep', activeStep) + const cleanTitleId = title.replaceAll(' ', '-').toLowerCase() + const active = cleanTitleId === activeStep?.titleId + + // useEffect(() => {}, []) + + return ( +
    + {/*
    */} +
    +
    +
    + {step} +
    +

    + {title} +

    + + Step {step} of {steps?.length} + +
    +
    + +
    + ) + }} +
    + + ) +} + +StepHike.Step = Step +export default StepHike diff --git a/apps/docs/components/StepHikeCompact/StepHikeContext.tsx b/apps/docs/components/StepHikeCompact/StepHikeContext.tsx new file mode 100644 index 00000000000..977ca043cef --- /dev/null +++ b/apps/docs/components/StepHikeCompact/StepHikeContext.tsx @@ -0,0 +1,8 @@ +import { createContext } from 'react' + +// Make sure the shape of the default value passed to +// createContext matches the shape that the consumers expect! +export const StepHikeContext = createContext({ + activeStep: undefined, + steps: undefined, +}) diff --git a/apps/docs/components/StepHikeCompact/index.tsx b/apps/docs/components/StepHikeCompact/index.tsx new file mode 100644 index 00000000000..6ef75c7140c --- /dev/null +++ b/apps/docs/components/StepHikeCompact/index.tsx @@ -0,0 +1,93 @@ +//import { Step } from 'next-seo/lib/types' +import React, { FC } from 'react' + +interface IStep { + title: string + step: number | string +} + +interface IStepHikeCompactSubcomponents { + Step: FC + Details: FC + Code: FC +} +interface IDetails { + title?: string +} +interface ICode {} + +interface IStepHikeCompact { + title: string +} + +const StepHikeCompact: FC & IStepHikeCompactSubcomponents = ({ + children, + title, +}) => { + return
    {children}
    +} + +const Step: FC = ({ children, title, step }) => { + return ( +
    +
    +
    +
    +
    +
    +
    + {step} +
    +
    +
    +
    {children}
    +
    + ) +} + +const Details: FC = ({ children, title }) => { + return ( +
    +

    {title}

    + {children} +
    + ) +} + +const Code: FC = ({ children }) => { + return
    {children}
    +} + +StepHikeCompact.Step = Step +StepHikeCompact.Details = Details +StepHikeCompact.Code = Code +export default StepHikeCompact diff --git a/apps/docs/components/TableOfContents.tsx b/apps/docs/components/TableOfContents.tsx index 7bfc8c19258..8be2a831646 100644 --- a/apps/docs/components/TableOfContents.tsx +++ b/apps/docs/components/TableOfContents.tsx @@ -15,6 +15,7 @@ interface TOCHeader { interface Props { toc: any + video?: string } const formatSlug = (slug: string) => { @@ -44,26 +45,38 @@ const formatTOCHeader = (content: string) => { return res.join('') } -const TableOfContents: FC = ({ toc }) => { +const TableOfContents: FC = ({ toc, video }) => { // [Joshen] markdown-toc doesn't seem to read maxdepth from the options passed in // Our first level headers will be H2s (H1 is ignored), and we only show up to H3 return ( -
      - {(toc.json as TOCHeader[]) - .filter((item) => item.lvl !== 1 && item.lvl <= 3) - .map((item: any, i: number) => { - return ( -
    • - -
    • - ) - })} -
    + <> + {video && ( +
    + +
    + )} +
    + ) } diff --git a/apps/docs/components/index.tsx b/apps/docs/components/index.tsx index cd2a76eb223..524a64f2399 100644 --- a/apps/docs/components/index.tsx +++ b/apps/docs/components/index.tsx @@ -19,6 +19,10 @@ import QuickstartIntro from './MDX/quickstart_intro.mdx' import ProjectSetup from './MDX/project_setup.mdx' import { Mermaid } from 'mdx-mermaid/lib/Mermaid' import InlineCodeTag from './CustomHTMLElements/InlineCode' +import React from 'react' +import RefSubLayout from '~/layouts/ref/RefSubLayout' +// import { CH } from '@code-hike/mdx/components' +import RefHeaderSection from './reference/RefHeaderSection' const components = { Admonition, @@ -40,7 +44,6 @@ const components = { ), Tabs, TabPanel: (props: any) => {props.children}, - h2: (props: any) => ( {props.children} @@ -51,12 +54,16 @@ const components = { {props.children} ), - code: (props: any) => { - const linesToHighlight = parseNumericRange(props.lines ?? '') - return - }, + // pre: (props: any) => { + // const linesToHighlight = parseNumericRange(props.lines ?? '') + // return + // }, mono: (props: any) => {props.children}, - inlineCode: (props: any) => {props.children}, + // inlineCode: (props: { children: string }) => , + RefSubLayout, + // CH, + code: (props: any) => , + RefHeaderSection: (props: any) => , } export default components diff --git a/apps/docs/components/reference/ApiOperationSection.tsx b/apps/docs/components/reference/ApiOperationSection.tsx new file mode 100644 index 00000000000..6272e2c3e40 --- /dev/null +++ b/apps/docs/components/reference/ApiOperationSection.tsx @@ -0,0 +1,115 @@ +import { Tabs } from '~/../../packages/ui' +import CodeBlock from '~/components/CodeBlock/CodeBlock' +import Param from '~/components/Params' +import RefSubLayout from '~/layouts/ref/RefSubLayout' + +const ApiOperationSection = (props) => { + const operation = props.spec.operations.find((x: any) => x.operationId === props.funcData.id) + + // gracefully return nothing if function does not exist + if (!operation) return <> + + return ( + + +
    + + + {operation.operation} + + {operation.fullPath} + +
    +
    +

    {operation.description}

    +
    + {/* Path Parameters */} + {operation.parameters && + operation.parameters.filter((parameter) => parameter.in === 'path').length > 0 && ( +
    +
    Path Parameters
    +
      + {operation.parameters && + operation.parameters + .filter((parameter: any) => parameter.in === 'path') + .map((parameter: any) => ( + + ))} +
    +
    + )} + + {/* Query Parameters */} + {operation.parameters && + operation.parameters.filter((parameter) => parameter.in === 'query').length > 0 && ( +
    +
    Query Parameters
    +
      + {operation.parameters && + operation.parameters + .filter((parameter: any) => parameter.in === 'query') + .map((parameter: any) => ( + + ))} +
    +
    + )} + + {/* Header Parameters */} + {operation.parameters && + operation.parameters.filter((parameter) => parameter.in === 'header').length > 0 && ( +
    +
    Query Parameters
    +
      + {operation.parameters && + operation.parameters + .filter((parameter: any) => parameter.in === 'header') + .map((parameter: any) => ( + + ))} +
    +
    + )} +
    + {operation.responseList && operation.responseList.length > 0 && ( + +
    Responses
    + + {operation.responseList.map((response: any) => ( + +

    {response.description}

    + {response?.content && response?.content['application/json'] && ( +
    + + {JSON.stringify(response.content['application/json'], null, 2)} + +
    + )} +
    + ))} +
    +
    + )} +
    + ) +} +export default ApiOperationSection diff --git a/apps/docs/components/reference/CLICommandSection.tsx b/apps/docs/components/reference/CLICommandSection.tsx new file mode 100644 index 00000000000..d340a28ffca --- /dev/null +++ b/apps/docs/components/reference/CLICommandSection.tsx @@ -0,0 +1,130 @@ +import CodeBlock from '~/components/CodeBlock/CodeBlock' +import Options from '~/components/Options' +import Param from '~/components/Params' +import RefSubLayout from '~/layouts/ref/RefSubLayout' + +interface ICommonFunc { + id: string + title: string + slug: string + product: string + libs: string + items: ICommonFunc[] +} + +interface IRefFunctionSection { + funcData: any + commonFuncData: ICommonFunc + spec: any +} + +export type Flag = { + id: string + name: string + description: string + default_value: string + accepted_values: AcceptedValue[] +} + +export type AcceptedValue = { + id: string + name: string + type: 'string' | 'boolean' | 'object' + description?: string +} + +export type Command = { + id: string + title: string + description: string + flags?: Flag[] + summary: string + tags?: [] + links?: [] + subcommands?: [] + usage?: string +} + +const CliCommandSection = (props) => { + const command = props.spec.commands.find((x: any) => x.id === props.funcData.id) + + return ( + + +
    +
    +
    +

    + {command.summary} +

    +
    + + {/* {command.usage && ( + + {command.usage} + + )} */} + + {command.subcommands.length > 0 && ( +
    + )} + {command.flags.length > 0 && ( + <> +

    Flags

    +
      + {command.flags.map((flag: Flag) => ( + <> +
    • + + {flag?.accepted_values && ( + + {flag?.accepted_values.map((value) => { + return + })} + + )} + +
    • + + ))} +
    + + )} +
    +
    + + + {command.usage && ( + + {command.usage} + + )} + + + ) +} + +export default CliCommandSection diff --git a/apps/docs/components/reference/RefDetailCollapse.tsx b/apps/docs/components/reference/RefDetailCollapse.tsx new file mode 100644 index 00000000000..fa152727c01 --- /dev/null +++ b/apps/docs/components/reference/RefDetailCollapse.tsx @@ -0,0 +1,44 @@ +import * as Accordion from '@radix-ui/react-accordion' +import React from 'react' +import { IconChevronRight } from '~/../../packages/ui' + +const RefDetailCollapse: React.FC<{ id: string; label: string; defaultOpen?: boolean }> = ({ + defaultOpen = true, + ...props +}) => { + return ( + + + + + + + {props.children} + + + + ) +} + +export default RefDetailCollapse diff --git a/apps/docs/components/reference/RefEducationSection.tsx b/apps/docs/components/reference/RefEducationSection.tsx new file mode 100644 index 00000000000..a388c11425c --- /dev/null +++ b/apps/docs/components/reference/RefEducationSection.tsx @@ -0,0 +1,27 @@ +import RefSubLayout from '~/layouts/ref/RefSubLayout' +import { MDXRemote } from 'next-mdx-remote' +import components from '~/components' + +const RefEducationSection = (props) => { + // gracefully reject pages we can't render + if (!props.markdownContent) { + //console.log(props.item.id) + return
    + } + + return ( + + + + ) +} + +export default RefEducationSection diff --git a/apps/docs/components/reference/RefFunctionSection.tsx b/apps/docs/components/reference/RefFunctionSection.tsx new file mode 100644 index 00000000000..a31c52af992 --- /dev/null +++ b/apps/docs/components/reference/RefFunctionSection.tsx @@ -0,0 +1,234 @@ +import ReactMarkdown from 'react-markdown' + +import { IconDatabase, Tabs } from 'ui' +import CodeBlock from '~/components/CodeBlock/CodeBlock' + +import Options from '~/components/Options' +import Param from '~/components/Params' +import RefSubLayout from '~/layouts/ref/RefSubLayout' +import { extractTsDocNode, generateParameters } from '~/lib/refGenerator/helpers' + +import RefDetailCollapse from '~/components/reference/RefDetailCollapse' + +interface ICommonFunc { + id: string + title: string + slug: string + product: string + libs: string + items: ICommonFunc[] +} + +interface IRefFunctionSection { + funcData: any + commonFuncData: ICommonFunc + spec: any + typeSpec?: any +} + +const RefFunctionSection: React.FC = (props) => { + const item = props.spec.functions.find((x: any) => x.id === props.funcData.id) + + // gracefully return nothing if function does not exist + if (!item) return <> + + if (item && !item['$ref']) { + //console.warn('🚩 issue with $ref in:', item.id) + } + + // console.log(item) + const hasTsRef = item['$ref'] || null + + const tsDefinition = + hasTsRef && props.typeSpec ? extractTsDocNode(hasTsRef, props.typeSpec) : null + const parameters = hasTsRef && tsDefinition ? generateParameters(tsDefinition) : '' + const shortText = hasTsRef && tsDefinition ? tsDefinition.signatures[0].comment.shortText : '' + + return ( + <> + + + <> +
    + {shortText && {shortText}} +
    + + {item.description && ( +
    + {item.description} +
    + )} + {/* {functionMarkdownContent && ( +
    + +
    + )} */} + {item.notes && ( +
    + {item.notes} +
    + )} + {/* // parameters */} + {parameters && ( +
    +
    Parameters
    +
      + {parameters.map((param) => { + // grab override params from yaml file + const overrideParams = item.overrideParams + + // params from the yaml file can override the params from parameters if it matches the name + const overide = overrideParams?.filter((x) => { + return param.name === x.name + }) + + const paramItem = overide?.length > 0 ? overide[0] : param + + return ( + + {paramItem.subContent && ( +
      + + {param.subContent.map((param) => { + return ( + <> + + {param.subContent && ( + + {param.subContent.map((param) => { + return + })} + + )} + + + ) + })} + +
      + )} + + ) + })} +
    +
    + )} + +
    + + {item.examples && ( + <> +
    + + {item.examples && + item.examples.map((example, exampleIndex) => { + const exampleString = '' + // ` + // import { createClient } from '@supabase/supabase-js' + + // // Create a single supabase client for interacting with your database + // const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') + // ` + const currentExampleId = example.id + const staticExample = item.examples[exampleIndex] + + const response = staticExample.response + const sql = staticExample?.data?.sql + const tables = staticExample?.data?.tables + + return ( + + {((tables && tables.length > 0) || sql) && ( + + <> + {tables && + tables.length > 0 && + tables.map((table) => { + return ( +
    +
    +
    +
    + +
    +
    + {table.name} +
    +
    +
    +
    + ) + })} + {sql && ( + + {sql.replace(/sql/g, '').replace(/```/g, '')} + + )} + +
    + )} + + + {exampleString + + (example.code && + example.code + .replace(/```/g, '') + .replace('js', '') + .replace('ts', ''))} + + {response && ( + + + {response.replace(/```/g, '').replace('json', '')} + + + )} +
    + ) + })} +
    +
    + + )} +
    +
    + + ) +} + +export default RefFunctionSection diff --git a/apps/docs/components/reference/RefHeaderSection.tsx b/apps/docs/components/reference/RefHeaderSection.tsx new file mode 100644 index 00000000000..0d84d792b20 --- /dev/null +++ b/apps/docs/components/reference/RefHeaderSection.tsx @@ -0,0 +1,16 @@ +import React from 'react' +import RefSubLayout from '~/layouts/ref/RefSubLayout' + +interface Props {} + +const RefHeaderSection: React.FC = (props) => { + return ( + <> + + {props.children} + + + ) +} + +export default RefHeaderSection diff --git a/apps/docs/components/reference/RefSectionHandler.tsx b/apps/docs/components/reference/RefSectionHandler.tsx new file mode 100644 index 00000000000..ced32c6a586 --- /dev/null +++ b/apps/docs/components/reference/RefSectionHandler.tsx @@ -0,0 +1,88 @@ +import { MDXRemote } from 'next-mdx-remote' +import { useRouter } from 'next/router' +import { useEffect } from 'react' + +import components from '~/components' +import RefEducationSection from '~/components/reference/RefEducationSection' +import RefFunctionSection from '~/components/reference/RefFunctionSection' +import OldLayout from '~/layouts/Default' +import RefSubLayout from '~/layouts/ref/RefSubLayout' +import ApiOperationSection from './ApiOperationSection' +import CliCommandSection from './CLICommandSection' + +interface Props { + sections: any[] // to do + spec: any // to do + typeSpec: any // to do + pageProps: any // to do, from staticProps + + type: 'client-lib' | 'cli' | 'api' +} + +const RefSectionHandler = (props) => { + const router = useRouter() + + const slug = router.query.slug[0] + + const isNewDocs = process.env.NEXT_PUBLIC_NEW_DOCS === 'true' + + // When user lands on a url like http://supabase.com/docs/reference/javascript/sign-up + // find the #sign-up element and scroll to that + useEffect(() => { + if (isNewDocs && document && slug !== 'start') { + document.querySelector(`#${slug}`) && document.querySelector(`#${slug}`).scrollIntoView() + } + }) + + /* + * handle old ref pages + */ + if (!isNewDocs) { + return ( + // @ts-ignore + + + + ) + } + + return ( + + {props.sections.map((x) => { + switch (x.type) { + case 'markdown': + const markdownData = props.pageProps.docs.find((doc) => doc.id === x.id) + + return + break + case 'function': + return ( + + ) + case 'cli-command': + return + break + case 'operation': + return + default: + return ( + + ) + break + } + })} + + ) +} + +export default RefSectionHandler diff --git a/apps/docs/docs/ref/README.md b/apps/docs/docs/ref/README.md new file mode 100644 index 00000000000..3b50031fdf4 --- /dev/null +++ b/apps/docs/docs/ref/README.md @@ -0,0 +1,3 @@ +# testing + +@mildtomato is testing a new ref layout/mdx setup diff --git a/apps/docs/docs/ref/api/api.mdx b/apps/docs/docs/ref/api/api.mdx new file mode 100644 index 00000000000..371041af0bd --- /dev/null +++ b/apps/docs/docs/ref/api/api.mdx @@ -0,0 +1,37 @@ +--- +slug: / +sidebar_position: 1 +id: management-api +title: Management API +sidebar_label: Management API +--- + +The Management API allows you to manage your projects programmatically. + +## Status + +The Management API is in `beta`. It is usable in it's current state, but it's likely that there will be breaking changes. + +## Authentication + +All API requests require a Supabase Personal token to be included in the Authorization header: `Authorization Bearer + +
    +

    Management API

    +
    +
    + + + + + Manage your Supabase organizations and projects programmatically. + + ## Status + + The Management API is in `beta`. It is usable in it's current state, but it's likely that there will be breaking changes. + + ## Authentication + + All API requests require a Supabase Personal token to be included in the Authorization header: `Authorization Bearer + + + + Additional links + + - [OpenAPI Docs](https://api.supabase.com/api/v1) + - [OpenAPI Spec](https://api.supabase.com/api/v1-json) + - [Report bugs and issues](https://github.com/supabase/supabase) + + + + diff --git a/apps/docs/docs/ref/cli/introduction.mdx b/apps/docs/docs/ref/cli/introduction.mdx new file mode 100644 index 00000000000..e204038abae --- /dev/null +++ b/apps/docs/docs/ref/cli/introduction.mdx @@ -0,0 +1,43 @@ +--- +id: introduction +title: Introduction +hideTitle: true +--- + +
    + +
    +

    Supabase CLI

    +
    +
    + + + + + The Supabase CLI provides tools to develop your project locally and deploy to the Supabase Platform. + The CLI is still under development, but it contains all the functionality for working with your Supabase projects and the Supabase Platform. + + - Run Supabase locally: [`supabase start`](/docs/reference/cli/usage#supabase-start) + - Manage database migrations: [`supabase migration`](/docs/reference/cli/usage#supabase-migration) + - CI/CD for releasing to production: [`supabase db push`](/docs/reference/cli/usage#supabase-db-push) + - Manage your Supabase projects: [`supabase projects`](/docs/reference/cli/usage#supabase-projects) + - Generate types directly from your database schema: [`supabase gen types`](/docs/reference/cli/usage#supabase-gen) + - A [community-supported GitHub Action](https://github.com/lyqht/generate-supabase-db-types-github-action) to generate TypeScript types + - Shell autocomplete: [`supabase completion`](/docs/reference/cli/usage#supabase-completion) + - A [community-supported Fig autocomplete spec](https://fig.io/manual/supabase) for macOS terminal + + + + + + ### Additional links + + - [Install the Supabase CLI](/docs/guides/cli) + - [Source code](https://github.com/supabase/cli) + - [Known bugs and issues](https://github.com/supabase/cli/issues) + - [Supabase CLI v1 and Management API Beta](https://supabase.com/blog/supabase-cli-v1-and-admin-api-beta) + - [Video: Announcing CLI V1 and Management API Beta](https://www.youtube.com/watch?v=OpPOaJI_Z28) + + + + diff --git a/apps/docs/docs/ref/dart/initializing.mdx b/apps/docs/docs/ref/dart/initializing.mdx new file mode 100644 index 00000000000..501efaef48f --- /dev/null +++ b/apps/docs/docs/ref/dart/initializing.mdx @@ -0,0 +1,50 @@ +--- +id: initializing +title: 'Initializing' +slug: initializing +--- + + + + + Initialize Supabase with the static `initialize()` method on `Supabase` class. + + + + + + + + + ```dart main.dart + Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + + await Supabase.initialize( + url: 'https://xyzcompany.supabase.co', + anonKey: 'public-anon-key', + ); + + runApp(MyApp()); + } + ``` + + + + + ```dart + final supabase = SupabaseClient( + 'https://xyzcompany.supabase.co', + 'public-anon-key', + ); + ``` + + + + + + diff --git a/apps/docs/docs/ref/dart/installing.mdx b/apps/docs/docs/ref/dart/installing.mdx new file mode 100644 index 00000000000..d53e3c99218 --- /dev/null +++ b/apps/docs/docs/ref/dart/installing.mdx @@ -0,0 +1,41 @@ +--- +id: installing +title: 'Installing' +slug: installing +custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml +--- + +### Install from pub.dev + + + + + You can install Supabase package from [pub.dev](https://pub.dev/packages/supabase_flutter) + + + + + + + + + ```sh Terminal + flutter pub add supabase_flutter + ``` + + + + + ```sh Terminal + dart pub add supabase + ``` + + + + + + diff --git a/apps/docs/docs/ref/dart/introduction.mdx b/apps/docs/docs/ref/dart/introduction.mdx new file mode 100644 index 00000000000..8dabccf22b2 --- /dev/null +++ b/apps/docs/docs/ref/dart/introduction.mdx @@ -0,0 +1,23 @@ +--- +id: introduction +title: Introduction +hideTitle: true +--- + +
    + +
    +

    Flutter Client Library

    +

    supabase-flutter

    +
    +
    + +
    + This reference documents every object and method available in Supabase's Flutter + library, [supabase-flutter](https://pub.dev/packages/supabase_flutter). You can + use supabase-flutter to interact with your Postgres database, listen to database changes, invoke + Deno Edge Functions, build login and user management functionality, and manage large files. +
    +
    + We also provide [supabase](https://pub.dev/packages/supabase) package for non-Flutter projects. +
    diff --git a/apps/docs/docs/ref/dart/release-notes.mdx b/apps/docs/docs/ref/dart/release-notes.mdx new file mode 100644 index 00000000000..b5e0e218918 --- /dev/null +++ b/apps/docs/docs/ref/dart/release-notes.mdx @@ -0,0 +1,6 @@ +--- +id: release-notes +title: Release Notes +--- + +## dart this is the release notes file. diff --git a/apps/docs/docs/ref/dart/v0/release-notes.mdx b/apps/docs/docs/ref/dart/v0/release-notes.mdx new file mode 100644 index 00000000000..2ecb0ef3990 --- /dev/null +++ b/apps/docs/docs/ref/dart/v0/release-notes.mdx @@ -0,0 +1,6 @@ +--- +id: release-notes +title: Release Notes +--- + +## dart v0 this is the release notes file. diff --git a/apps/docs/docs/ref/javascript/auth.mdx b/apps/docs/docs/ref/javascript/auth.mdx new file mode 100644 index 00000000000..387db9bdfa8 --- /dev/null +++ b/apps/docs/docs/ref/javascript/auth.mdx @@ -0,0 +1,12 @@ +--- +id: auth +title: 'Auth' +slug: auth +icon: /docs/img/icons/menu/auth +--- + + + + Every Supabase project comes with a full Postgres database, a free and open source database which is considered one of the world's most stable and advanced databases. + + diff --git a/apps/docs/docs/ref/javascript/database.mdx b/apps/docs/docs/ref/javascript/database.mdx new file mode 100644 index 00000000000..900107af0b4 --- /dev/null +++ b/apps/docs/docs/ref/javascript/database.mdx @@ -0,0 +1,12 @@ +--- +id: database +title: 'Database' +slug: database +icon: /docs/img/icons/menu/database +--- + + + + Every Supabase project comes with a full Postgres database, a free and open source database which is considered one of the world's most stable and advanced databases. + + diff --git a/apps/docs/docs/ref/javascript/installing.mdx b/apps/docs/docs/ref/javascript/installing.mdx new file mode 100644 index 00000000000..fb4e334389e --- /dev/null +++ b/apps/docs/docs/ref/javascript/installing.mdx @@ -0,0 +1,79 @@ +--- +id: installing +title: 'Installing' +slug: installing +custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml +--- + +### Install as package + + + + + You can install @supabase/supabase-js via the terminal. + + + + + + + + + ```sh Terminal + npm install @supabase/supabase-js + ``` + + + + + ```sh Terminal + yarn add @supabase/supabase-js + ``` + + + + + + + +### Install via CDN + + + + + You can install @supabase/supabase-js via CDN links. + + + + + + ```js + + //or + + ``` + + + + +### Use at runtime in Deno + + + + + You can use supabase-js in the Deno runtime via esm.sh: + + + + + + ```ts + import { createClient } from 'https://esm.sh/@supabase/supabase-js@2' + ``` + + + diff --git a/apps/docs/docs/ref/javascript/introduction.mdx b/apps/docs/docs/ref/javascript/introduction.mdx new file mode 100644 index 00000000000..d3c14042cb6 --- /dev/null +++ b/apps/docs/docs/ref/javascript/introduction.mdx @@ -0,0 +1,20 @@ +--- +id: introduction +title: Introduction +hideTitle: true +--- + +
    + +
    +

    Javascript Client Library

    +

    @supabase/supabase-js

    +
    +
    + +
    + This reference documents every object and method available in Supabase's isomorphic JavaScript + library, supabase-js. You can use supabase-js to interact with your Postgres database, listen to + database changes, invoke Deno Edge Functions, build login and user management functionality, and + manage large files. +
    diff --git a/apps/docs/docs/ref/javascript/release-notes.mdx b/apps/docs/docs/ref/javascript/release-notes.mdx new file mode 100644 index 00000000000..f997c312e77 --- /dev/null +++ b/apps/docs/docs/ref/javascript/release-notes.mdx @@ -0,0 +1,309 @@ +--- +id: release-notes +title: Release Notes 2.0.0 +--- + +Supabase.js v2 release notes. + + + + + Install the latest version of @supabase/supabase-js + + + + + ```bash Terminal + npm install @supabase/supabase-js + ``` + + + + +### Explicit constructor options + + + + + All client specific options within the constructor are keyed to the library. + + See [PR](https://github.com/supabase/supabase-js/pull/458): + + + + + ```jsx + const supabase = createClient(apiURL, apiKey, { + db: { + schema: 'public', + }, + auth: { + storage: AsyncStorage, + autoRefreshToken: true, + persistSession: true, + detectSessionInUrl: true, + }, + realtime: { + channels, + endpoint, + }, + global: { + fetch: customFetch, + headers: DEFAULT_HEADERS, + }, + }) + ``` + + + + +### Typescript support + + + + + The libraries now support typescript. + + + + + ```ts v1.0 + // previously definitions were injected in the `from()` method + supabase.from('messages').select('\*') + ``` + + --- + + ```ts v2.0 + import type { Database } from './DatabaseDefinitions' + + // definitions are injected in `createClient()` + const supabase = createClient(SUPABASE_URL, ANON_KEY) + + const { data } = await supabase.from('messages').select().match({ id: 1 }) + ``` + + + + + Types can be generated via the CLI: + + + + + ```bash Terminal + supabase start + supabase gen types typescript --local > DatabaseDefinitions.ts + ``` + + + + +### Data operations return minimal + + + + + `.insert()` / `.upsert()` / `.update()` / `.delete()` don't return rows by default: [PR](https://github.com/supabase/postgrest-js/pull/276). + + Previously, these methods return inserted/updated/deleted rows by default (which caused [some confusion](https://github.com/supabase/supabase/discussions/1548)), and you can opt to not return it by specifying `returning: 'minimal'`. Now the default behavior is to not return rows. To return inserted/updated/deleted rows, add a `.select()` call at the end, e.g.: + + + + + ```sql + const { data, error } = await supabase + .from('my_table') + .delete() + .eq('id', 1) + .select() + ``` + + + + +### New ordering defaults + + + + + `.order()` now defaults to Postgres’s default: [PR](https://github.com/supabase/postgrest-js/pull/283). + + Previously `nullsFirst` defaults to `false` , meaning `null`s are ordered last. This is bad for performance if e.g. the column uses an index with `NULLS FIRST` (which is the default direction for indexes). + + + + + + + +### Cookies and localstorage namespace + + + + + Storage key name in the Auth library has changed to include project reference which means that existing websites that had their JWT expiry set to a longer time could find their users logged out with this upgrade. + + + + + ```jsx + const defaultStorageKey = `sb-${new URL(this.authUrl).hostname.split('.')[0]}-auth-token` + ``` + + + + +### New Auth Types + + + + + Typescript typings have been reworked. `Session` interface now guarantees that it will always have an `access_token`, `refresh_token` and `user` + + + + + ```jsx ./types.ts + interface Session { + provider_token?: string | null + access_token: string + expires_in?: number + expires_at?: number + refresh_token: string + token_type: string + user: User + } + ``` + + + + +### New Auth methods + + + + + We're removing the `signIn()` method in favor of more explicit function signatures: + `signInWithPassword()`, `signInWithOtp()`, and `signInWithOtp()`. + + + + + ```ts v1.0 + const { data } = await supabase.auth.signIn({ + email: 'hello@example', + password: 'pass', + }) + ``` + --- + + ```ts v2.0 + const { data } = await supabase.auth.signInWithPassword({ + email: 'hello@example', + password: 'pass', + }) + ``` + + + + +### New Realtime methods + + + + + There is a new `channel()` method in the Realtime library, which will be used for our Multiplayer updates. + + We will deprecate the `.from().on().subscribe()` method previosuly used for listening to postgres changes. + + + + + ```ts + supabase + .channel('any_string_you_want') + .on('presence', { event: 'track' }, (payload) => { + console.log(payload) + }) + .subscribe() + + supabase + .channel('any_string_you_want') + .on( + 'postgres_changes', + { + event: 'INSERT', + schema: 'public', + table: 'movies', + }, + (payload) => { + console.log(payload) + } + ) + .subscribe() + ``` + + + + +### Deprecated setAuth() + +Deprecated and removed `setAuth()` . To set a custom `access_token` jwt instead, pass the custom header into the `createClient()` method provided: ([PR](https://github.com/supabase/gotrue-js/pull/340)) + +### All changes + +- `supabase-js` + - `shouldThrowOnError` has been removed until all the client libraries support this option ([PR](https://github.com/supabase/supabase-js/pull/490)). +- `postgrest-js` + - TypeScript typings have been reworked [PR](https://github.com/supabase/postgrest-js/pull/279) + - Use `undefined` instead of `null` for function params, types, etc. (https://github.com/supabase/postgrest-js/pull/278) + - Some features are now obsolete: (https://github.com/supabase/postgrest-js/pull/275) + - filter shorthands (e.g. `cs` vs. `contains`) + - `body` in response (vs. `data`) + - `upsert`ing through the `.insert()` method + - `auth` method on `PostgrestClient` + - client-level `throwOnError` +- `gotrue-js` + - `supabase-js` client allows passing a `storageKey` param which will allow the user to set the key used in local storage for storing the session. By default, this will be namespace-d with the supabase project ref. ([PR](https://github.com/supabase/supabase-js/pull/460)) + - `signIn` method is now split into `signInWithPassword` , `signInWithOtp` , `signInWithOAuth` ([PR](https://github.com/supabase/gotrue-js/pull/304)) + - Deprecated and removed `session()` , `user()` in favour of using `getSession()` instead. `getSession()` will always return a valid session if a user is already logged in, meaning no more random logouts. ([PR](https://github.com/supabase/gotrue-js/pull/299)) + - Deprecated and removed setting for `multitab` support because `getSession()` and gotrue’s reuse interval setting takes care of session management across multiple tabs ([PR](https://github.com/supabase/gotrue-js/pull/366)) + - No more throwing of random errors, gotrue-js v2 always returns a custom error type: ([PR](https://github.com/supabase/gotrue-js/pull/341)) + - `AuthSessionMissingError` + - Indicates that a session is expected but missing + - `AuthNoCookieError` + - Indicates that a cookie is expected but missing + - `AuthInvalidCredentialsError` + - Indicates that the incorrect credentials were passed + - Renamed the `api` namespace to `admin` , the `admin` namespace will only contain methods that should only be used in a trusted server-side environment with the service role key + - Moved `resetPasswordForEmail` , `getUser` and `updateUser` to the `GoTrueClient` which means they will be accessible from the `supabase.auth` namespace in `supabase-js` instead of having to do `supabase.auth.api` to access them + - Removed `sendMobileOTP` , `sendMagicLinkEmail` in favor of `signInWithOtp` + - Removed `signInWithEmail`, `signInWithPhone` in favor of `signInWithPassword` + - Removed `signUpWithEmail` , `signUpWithPhone` in favor of `signUp` + - Replaced `update` with `updateUser` +- `storage-js` + - Return types are more strict. Functions types used to indicate that the data returned could be null even if there was no error. We now make use of union types which only mark the data as null if there is an error and vice versa. ([PR](https://github.com/supabase/storage-js/pull/60)) + - The `upload` and `update` function returns the path of the object uploaded as the `path` parameter. Previously the returned value had the bucket name prepended to the path which made it harder to pass the value on to other storage-js methods since all methods take the bucket name and path separately. We also chose to call the returned value `path` instead of `Key` ([PR](https://github.com/supabase/storage-js/pull/75)) + - `getPublicURL` only returns the public URL inside the data object. This keeps it consistent with our other methods of returning only within the data object. No error is returned since this method cannot does not throw an error ([PR](https://github.com/supabase/storage-js/pull/93)) + - signed urls are returned as `signedUrl` instead of `signedURL` in both `createSignedUrl` and `createSignedUrls` ([PR](https://github.com/supabase/storage-js/pull/94)) + - Encodes URLs returned by `createSignedUrl`, `createSignedUrls` and `getPublicUrl` ([PR](https://github.com/supabase/storage-js/pull/86)) + - `createsignedUrl` used to return a url directly and and within the data object. This was inconsistent. Now we always return values only inside the data object across all methods. ([PR](https://github.com/supabase/storage-js/pull/88)) + - `createBucket` returns a data object instead of the name of the bucket directly. ([PR](https://github.com/supabase/storage-js/pull/89)) + - Fixed types for metadata ([PR](https://github.com/supabase/storage-js/pull/90)) + - Better error types make it easier to track down what went wrong quicker. + - `SupabaseStorageClient` is no longer exported. Use `StorageClient` instead. ([PR](https://github.com/supabase/storage-js/pull/92)). +- `realtime-js` + - `RealtimeSubscription` class no longer exists and replaced by `RealtimeChannel`. + - `RealtimeClient`'s `disconnect` method now returns type of `void` . It used to return type of `Promise<{ error: Error | null; data: boolean }`. + - Removed `removeAllSubscriptions` and `removeSubscription` methods from `SupabaseClient` class. + - Removed `SupabaseRealtimeClient` class. + - Removed `SupabaseQueryBuilder` class. + - Removed `SupabaseEventTypes` type. + - Thinking about renaming this to something like `RealtimePostgresChangeEvents` and moving it to `realtime-js` v2. + - Removed `.from(’table’).on(’INSERT’, () ⇒ {}).subscribe()` in favor of new Realtime client API. +- `functions-js` + - supabase-js v1 only threw an error if the fetch call itself threw an error (network errors, etc) and not if the function returned HTTP errors like 400s or 500s. We have changed this behaviour to return an error if your function throws an error. + - We have introduced new error types to distinguish between different kinds of errors. A `FunctionsHttpError` error is returned if your function throws an error, `FunctionsRelayError` if the Supabase Relay has an error processing your function and `FunctionsFetchError` if there is a network error in calling your function. + - The correct content-type headers are automatically attached when sending the request if you don’t pass in a `Content-Type` header and pass in an argument to your function. We automatically attach the content type for `Blob`, `ArrayBuffer`, `File`, `FormData` ,`String` . If it doesn’t match any of these we assume the payload is `json` , we serialise the payload as JSON and attach the content type as `application/json`. + - `responseType` does not need to be explicitly passed in. We parse the response based on the `Content-Type` response header sent by the function. We support parsing the responses as `text`, `json`, `blob`, `form-data` and are parsed as `text` by default. diff --git a/apps/docs/docs/ref/javascript/typescript-support.mdx b/apps/docs/docs/ref/javascript/typescript-support.mdx new file mode 100644 index 00000000000..51162da7b93 --- /dev/null +++ b/apps/docs/docs/ref/javascript/typescript-support.mdx @@ -0,0 +1,128 @@ +--- +id: typescript-support +title: Typescript Support +--- + +`supabase-js` supports Typescript. + +## Generating types + + + + + You can use our CLI to generate types: + + + + + ```bash Terminal + supabase start + supabase gen types typescript --local > lib/database.types.ts + ``` + + + + + + + + These types are generated directly from your database. + + There is a difference between `selects`, `inserts`, and `updates`, because often you will set default values in your database for specific columns. + With default values you do not need to send any data over the network, even if that column is a "required" field. Our type system is granular + enough to handle these situations. + + + + + Given a table `public.movies`, the definition will provide the following data: + + ```ts /types.ts + interface Database { + public: { + Tables: { + movies: { + Row: {} // The data expected to be returned from a "select" statement. + Insert: {} // The data expected passed to an "insert" statement. + Update: {} // The data expected passed to an "update" statement. + } + } + } + } + ``` + + + + +## Injecting type definitions + + + + + You can enrich the supabase client with the types you generated with Supabase. + + + + ```ts ./index.tsx + import { createClient } from '@supabase/supabase-js' + import { Database } from 'lib/database.types' + + const supabase = createClient( + process.env.SUPABASE_URL, + process.env.SUPABASE_ANON_KEY + ) + ``` + + + + +## Type hints + + + + + `supabase-js` always returns a `data` object (for success), and an `error` response (for unsuccessful requests). + + This provides a simple interface to get the relevant types returned from any function: + + + + ```ts + export async function getMovies() { + return await supabase.from('movies').select(`id, title`) + } + + type MoviesResponse = Awaited> + export type MoviesResponseSuccess = MoviesResponse['data'] + export type MoviesResponseError = MoviesResponse['error'] + + ```` + + + + +## Nested tables + + + + For advanced queries such as nested tables, you may want to construct your own types. + + + ```ts ./index.ts + import supabase from '~/lib/supabase' + import type { Database } from '~/lib/database.types' + + async function getMovies() { + return await supabase.from('movies').select('id, title, actors(\*)') + } + + type Actors = Database['public']['tables']['actors']['row'] + type MoviesResponse = Awaited> + type MoviesResponseSuccess = MoviesResponse['data'] & { + actors: Actors[] + } + + ``` + + + diff --git a/apps/docs/docs/ref/javascript/v1/introduction.mdx b/apps/docs/docs/ref/javascript/v1/introduction.mdx new file mode 100644 index 00000000000..3e1af1ff9dd --- /dev/null +++ b/apps/docs/docs/ref/javascript/v1/introduction.mdx @@ -0,0 +1,20 @@ +--- +id: introduction +title: Introduction +hideTitle: true +--- + +
    + +
    +

    Javascript Client Library

    +

    @supabase/supabase-js

    +
    +
    + +
    + This reference documents every object and method available in Supabase's isomorphic JavaScript + library, supabase-js. You can use supabase-js to interact with your Postgres database, listen to + database changes, invoke Deno Edge Functions, build login and user management functionality, and + manage large files. +
    diff --git a/apps/docs/docs/ref/javascript/v1/release-notes.mdx b/apps/docs/docs/ref/javascript/v1/release-notes.mdx new file mode 100644 index 00000000000..725cbb5201e --- /dev/null +++ b/apps/docs/docs/ref/javascript/v1/release-notes.mdx @@ -0,0 +1,6 @@ +--- +id: release-notes +title: Release Notes +--- + +## js v1 this is the release notes file. diff --git a/apps/docs/docs/ref/realtime/realtime.mdx b/apps/docs/docs/ref/realtime/realtime.mdx new file mode 100644 index 00000000000..890440d0ee9 --- /dev/null +++ b/apps/docs/docs/ref/realtime/realtime.mdx @@ -0,0 +1,57 @@ +--- +slug: / +sidebar_position: 1 +id: realtime +title: Supabase Realtime Server +sidebar_label: Supabase Realtime Server +--- + +Supabase Realtime is a server built with Elixir using the [Phoenix Framework](https://www.phoenixframework.org) that allows you to listen to changes in your PostgreSQL database via logical replication and then broadcast those changes via WebSockets. + +There are two versions of this server: `Realtime` and `Realtime RLS`. + +`Realtime` server works by: + +1. listening to PostgreSQL's replication functionality (using PostgreSQL's logical decoding) +2. converting the byte stream into JSON +3. broadcasting to all connected clients over WebSockets + +`Realtime RLS` server works by: + +1. polling PostgreSQL's replication functionality (using PostgreSQL's logical decoding and [wal2json](https://github.com/eulerto/wal2json) output plugin) +2. passing database changes to a [Write Ahead Log Realtime Unified Security (WALRUS)](https://github.com/supabase/walrus) PostgresSQL function and receiving a list of authorized subscribers depending on Row Level Security (RLS) policies +3. converting the changes into JSON +4. broadcasting to authorized subscribers over WebSockets + +## Why not just use PostgreSQL's `NOTIFY`? + +A few reasons: + +1. You don't have to set up triggers on every table. +2. `NOTIFY` has a payload limit of 8000 bytes and will fail for anything larger. The usual solution is to send an ID and then fetch the record, but that's heavy on the database. +3. `Realtime` server consumes two connections to the database, then you can connect many clients to this server. Easier on your database, and to scale up you just add additional `Realtime` servers. + +## Benefits + +1. The beauty of listening to the replication functionality is that you can make changes to your database from anywhere - your API, directly in the DB, via a console, etc. - and you will still receive the changes via WebSockets. +2. Decoupling. For example, if you want to send a new slack message every time someone makes a new purchase you might build that functionality directly into your API. This allows you to decouple your async functionality from your API. +3. This is built with Phoenix, an [extremely scalable Elixir framework](https://www.phoenixframework.org/blog/the-road-to-2-million-websocket-connections). + +## Does this server guarantee delivery of every data change? + +Not yet! Due to the following limitations: + +1. Postgres database runs out of disk space due to Write-Ahead Logging (WAL) buildup, which can crash the database and prevent Realtime server from receiving and broadcasting changes. This can be mitigated in the Realtime RLS version of this server by setting the Postgres config `max_slot_wal_keep_size` to a reasonable size. +2. Realtime server can crash due to a larger replication lag than available memory, forcing the creation of a new replication slot and resetting replication to read from the latest WAL data. +3. When Realtime server falls too far behind for any reason, for example disconnecting from database as WAL continues to build up, then database can delete WAL segments the server still needs to read from, for example after reconnecting. + +## Client libraries + +- [JavaScript](https://github.com/supabase/realtime-js) +- [Dart](https://github.com/supabase/realtime-dart) + +## Additional Links + +- [Source Code](https://github.com/supabase/realtime) +- [Known bugs and issues](https://github.com/supabase/realtime/issues) +- [Realtime Guides](https://supabase.com/docs/guides/realtime) diff --git a/apps/docs/docs/ref/self-hosting-auth/introduction.mdx b/apps/docs/docs/ref/self-hosting-auth/introduction.mdx new file mode 100644 index 00000000000..d33aee3de4f --- /dev/null +++ b/apps/docs/docs/ref/self-hosting-auth/introduction.mdx @@ -0,0 +1,38 @@ +--- +id: introduction +title: Introduction +hideTitle: true +--- + +
    + +
    +

    Self-Hosting Auth

    +
    +
    + + + + + The Supabase Auth Server (GoTrue) is a JSON Web Token (JWT)-based API for managing users and issuing access tokens. + + GoTrue is an open-source API written in Golang, that acts as a self-standing API service for handling user registration and authentication for JAM projects. It's based on OAuth2 and JWT and handles user signup, authentication, and custom user data. + + + + + + ### Client libraries + + - [JavaScript](https://github.com/supabase/gotrue-js) + - [Dart](https://github.com/supabase/gotrue-dart) + + ### Additional links + + - [Source code](https://github.com/supabase/gotrue) + - [Known bugs and issues](https://github.com/supabase/gotrue/issues) + - [Auth guides](/docs/guides/auth) + + + + diff --git a/apps/docs/docs/ref/self-hosting-realtime/introduction.mdx b/apps/docs/docs/ref/self-hosting-realtime/introduction.mdx new file mode 100644 index 00000000000..310e0c96192 --- /dev/null +++ b/apps/docs/docs/ref/self-hosting-realtime/introduction.mdx @@ -0,0 +1,73 @@ +--- +id: introduction +title: Introduction +hideTitle: true +--- + +
    + +
    +

    Self-Hosting Realtime

    +
    +
    + + + + + Supabase Realtime is a server built with Elixir using the [Phoenix Framework](https://www.phoenixframework.org) that allows you to listen to changes in your PostgreSQL database via logical replication and then broadcast those changes via WebSockets. + + There are two versions of this server: `Realtime` and `Realtime RLS`. + + `Realtime` server works by: + + 1. Listening to PostgreSQL's replication functionality (using PostgreSQL's logical decoding) + 2. Converting the byte stream into JSON + 3. Broadcasting to all connected clients over WebSockets + + `Realtime RLS` server works by: + + 1. Polling PostgreSQL's replication functionality (using PostgreSQL's logical decoding and [wal2json](https://github.com/eulerto/wal2json) output plugin) + 2. Passing database changes to a [Write Ahead Log Realtime Unified Security (WALRUS)](https://github.com/supabase/walrus) PostgresSQL function and receiving a list of authorized subscribers depending on Row Level Security (RLS) policies + 3. Converting the changes into JSON + 4. Broadcasting to authorized subscribers over WebSockets + + ## Why not just use PostgreSQL's `NOTIFY`? + + A few reasons: + + 1. You don't have to set up triggers on every table. + 2. `NOTIFY` has a payload limit of 8000 bytes and will fail for anything larger. The usual solution is to send an ID and then fetch the record, but that's heavy on the database. + 3. `Realtime` server consumes two connections to the database, then you can connect many clients to this server. Easier on your database, and to scale up you just add additional `Realtime` servers. + + ## Benefits + + 1. The beauty of listening to the replication functionality is that you can make changes to your database from anywhere - your API, directly in the DB, via a console, etc. - and you will still receive the changes via WebSockets. + 2. Decoupling. For example, if you want to send a new slack message every time someone makes a new purchase you might build that functionality directly into your API. This allows you to decouple your async functionality from your API. + 3. This is built with Phoenix, an [extremely scalable Elixir framework](https://www.phoenixframework.org/blog/the-road-to-2-million-websocket-connections). + + ## Does this server guarantee delivery of every data change? + + Not yet! Due to the following limitations: + + 1. Postgres database runs out of disk space due to Write-Ahead Logging (WAL) buildup, which can crash the database and prevent Realtime server from receiving and broadcasting changes. This can be mitigated in the Realtime RLS version of this server by setting the Postgres config `max_slot_wal_keep_size` to a reasonable size. + 2. Realtime server can crash due to a larger replication lag than available memory, forcing the creation of a new replication slot and resetting replication to read from the latest WAL data. + 3. When Realtime server falls too far behind for any reason, for example disconnecting from database as WAL continues to build up, then database can delete WAL segments the server still needs to read from, for example after reconnecting. + + + + + + ### Client libraries + + - [JavaScript](https://github.com/supabase/realtime-js) + - [Dart](https://github.com/supabase/realtime-dart) + + ### Additional links + + - [Source code](https://github.com/supabase/realtime) + - [Known bugs and issues](https://github.com/supabase/realtime/issues) + - [Realtime guides](/docs/guides/realtime) + + + + diff --git a/apps/docs/docs/ref/self-hosting-storage/introduction.mdx b/apps/docs/docs/ref/self-hosting-storage/introduction.mdx new file mode 100644 index 00000000000..40fd27d4ce8 --- /dev/null +++ b/apps/docs/docs/ref/self-hosting-storage/introduction.mdx @@ -0,0 +1,43 @@ +--- +id: introduction +title: Introduction +hideTitle: true +--- + +
    + +
    +

    Self-Hosting Storage

    +
    +
    + + + + + An S3 compatible object storage service that integrates with Postgres. + + - Uses Postgres as it's datastore for storing metadata + - Authorization rules are written as Postgres Row Level Security policies + - Integrates with S3 as the storage backend (with more in the pipeline!) + - Extremely lightweight and performant + + + + + + ### Client libraries + + - [JavaScript](https://github.com/supabase/storage-js) + - [Dart](https://github.com/supabase/storage-dart) + + ### Additional links + + - [Source code](https://github.com/supabase/storage-api) + - [Known bugs and issues](https://github.com/supabase/storage-js/issues) + - [Storage guides](/docs/guides/storage) + - [OpenAPI docs](https://supabase.github.io/storage-api/) + - [Why we built a new object storage service](https://supabase.com/blog/supabase-storage) + + + + diff --git a/apps/docs/docs/reference/javascript/installing.mdx b/apps/docs/docs/reference/javascript/installing.mdx index b5be32e09a4..b948b44d38e 100644 --- a/apps/docs/docs/reference/javascript/installing.mdx +++ b/apps/docs/docs/reference/javascript/installing.mdx @@ -5,9 +5,6 @@ slug: installing custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - ## JavaScript lib/database.types.ts These types are generated directly from your database. Given a table `public.movies`, the definition will provide the following data: -```ts +```tsx hello.ts interface Database { public: { Tables: { diff --git a/apps/docs/docs/reference/javascript/v1/initializing.mdx b/apps/docs/docs/reference/javascript/v1/initializing.mdx index 3ad13aa9f13..7ea5f5cf164 100644 --- a/apps/docs/docs/reference/javascript/v1/initializing.mdx +++ b/apps/docs/docs/reference/javascript/v1/initializing.mdx @@ -16,7 +16,7 @@ and is the easiest way to interact with everything we offer within the Supabase ## Parameters
      - +
    • @@ -34,7 +34,7 @@ and is the easiest way to interact with everything we offer within the Supabase The unique Supabase URL which is supplied when you create a new project in your project dashboard.

    - +
  • @@ -54,7 +54,7 @@ The unique Supabase URL which is supplied when you create a new project in your The unique Supabase Key which is supplied when you create a new project in your project dashboard. - +
  • @@ -74,7 +74,7 @@ The unique Supabase Key which is supplied when you create a new project in your No description provided. - +
  • diff --git a/apps/docs/generator/api.ts b/apps/docs/generator/api.ts index 9358306f733..6682e3a65ff 100644 --- a/apps/docs/generator/api.ts +++ b/apps/docs/generator/api.ts @@ -33,7 +33,7 @@ export default async function gen(inputFileName: string, outputDir: string, apiU type v3OperationWithPath = OpenAPIV3.OperationObject & { path: string } -type enrichedOperation = OpenAPIV3.OperationObject & { +export type enrichedOperation = OpenAPIV3.OperationObject & { path: string fullPath: string operationId: string diff --git a/apps/docs/generator/legacy.ts b/apps/docs/generator/legacy.ts index 451177f92ad..29ff1c5617e 100644 --- a/apps/docs/generator/legacy.ts +++ b/apps/docs/generator/legacy.ts @@ -16,6 +16,13 @@ import { TsDoc, OpenRef } from './legacy/definitions' import { uniqBy } from 'lodash' import * as fs from 'fs' import * as yaml from 'js-yaml' +import { flattenSections } from '../lib/helpers' + +const commonDocSpecJson = JSON.parse( + fs.readFileSync('../../spec/common-client-libs-sections.json', 'utf8') +) + +const flattenedCommonDocSpecJson = flattenSections(commonDocSpecJson) export default async function gen(inputFileName: string, outputDir: string) { const docSpec = yaml.load(fs.readFileSync(inputFileName, 'utf8')) @@ -24,7 +31,7 @@ export default async function gen(inputFileName: string, outputDir: string) { const definition = JSON.parse(defRef) const id = docSpec.info.id const allLanguages = docSpec.info.libraries - const pages = Object.entries(docSpec.pages).map(([name, x]: [string, OpenRef.Page]) => ({ + const pages = Object.entries(docSpec.functions).map(([name, x]: [string, OpenRef.Page]) => ({ ...x, pageName: name, })) @@ -38,7 +45,9 @@ export default async function gen(inputFileName: string, outputDir: string) { // Generate Pages pages.forEach(async (pageSpec: OpenRef.Page) => { try { - const slug = slugify(pageSpec.pageName) + // get the slug from common-client-libs.yml + const slug = flattenedCommonDocSpecJson.find((item) => item.id === pageSpec.id).slug + const hasTsRef = pageSpec['$ref'] || null const tsDefinition = hasTsRef && extractTsDocNode(hasTsRef, definition) if (hasTsRef && !tsDefinition) throw new Error('Definition not found: ' + hasTsRef) @@ -48,8 +57,8 @@ export default async function gen(inputFileName: string, outputDir: string) { // Create page const content = Page({ - slug: (docSpec.info.slugPrefix || '') + slug, - id: slug, + slug: slug, + id: pageSpec.id, specFileName: docSpec.info.specUrl || inputFileName, title: pageSpec.title || pageSpec.pageName, description, @@ -58,7 +67,7 @@ export default async function gen(inputFileName: string, outputDir: string) { examples: generateExamples(id, pageSpec['examples'] || [], allLanguages), notes: pageSpec.notes, }) - + //console.log({ slug }) // Write to disk const dest = outputDir + `/${slug}.mdx` await writeToDisk(dest, content) @@ -146,7 +155,7 @@ const mergeUnion = (paramDefinition: TsDoc.TypeDefinition) => { } const methodListGroup = (items) => ` -
      +
        ${items}
      ` @@ -265,7 +274,7 @@ function extractParamTypeAsString(paramDefinition) { * Iterates through the definition to find the correct definition. * You can pass it a deeply nested node using dot notation. eg: 'LoggedInUser.data.email' */ -function extractTsDocNode(nodeToFind: string, definition: any) { +export function extractTsDocNode(nodeToFind: string, definition: any) { const nodePath = nodeToFind.split('.') let i = 0 let previousNode = definition diff --git a/apps/docs/generator/legacy/definitions.ts b/apps/docs/generator/legacy/definitions.ts index 96f1f44dfe3..72d50ce8f29 100644 --- a/apps/docs/generator/legacy/definitions.ts +++ b/apps/docs/generator/legacy/definitions.ts @@ -28,6 +28,7 @@ export namespace OpenRef { title?: string description?: string notes?: string + id: string // $ref?: string // reference to a TSDoc node } } diff --git a/apps/docs/generator/templates/ApiTemplate.ts b/apps/docs/generator/templates/ApiTemplate.ts index bf95eef4f0c..d27a424d9b1 100644 --- a/apps/docs/generator/templates/ApiTemplate.ts +++ b/apps/docs/generator/templates/ApiTemplate.ts @@ -35,7 +35,7 @@ toc_max_heading_level: 3 <% if(operation.parameters && operation.parameters.filter((parameter) => parameter.in === 'path').length > 0){ %> #### Path Parameters -
        +
          <% operation.parameters .filter((parameter) => parameter.in === 'path').forEach(function(parameter){ %>
        • @@ -68,7 +68,7 @@ toc_max_heading_level: 3 <% if(operation.parameters && operation.parameters.filter((parameter) => parameter.in === 'header').length > 0){ %> #### Header Parameters -
            +
              <% operation.parameters .filter((parameter) => parameter.in === 'header').forEach(function(parameter){ %>
            • diff --git a/apps/docs/generator/templates/CliTemplate.ts b/apps/docs/generator/templates/CliTemplate.ts index 0904e47fe37..92bc55d3831 100644 --- a/apps/docs/generator/templates/CliTemplate.ts +++ b/apps/docs/generator/templates/CliTemplate.ts @@ -6,19 +6,19 @@ title: Usage toc_max_heading_level: 3 --- - +{/* */} <%- info.description %> <% commands.forEach(function(command){ %> - +{/* */}

              <%- command.heading %> - +{/* */} <%- command.description %> @@ -27,7 +27,7 @@ toc_max_heading_level: 3 <%- command.usage %> <% }; %> - +{/* */} <% if(command.subcommands.length > 0){ %> **Available Commands** @@ -38,7 +38,7 @@ toc_max_heading_level: 3 <% } %> - +{/* */} **Options** @@ -46,7 +46,7 @@ toc_max_heading_level: 3 <% }); %> - +{/* */} `.trim() export default template diff --git a/apps/docs/generator/templates/ConfigTemplate.ts b/apps/docs/generator/templates/ConfigTemplate.ts index 3300e030de8..45185b23a7e 100644 --- a/apps/docs/generator/templates/ConfigTemplate.ts +++ b/apps/docs/generator/templates/ConfigTemplate.ts @@ -22,7 +22,7 @@ toc_max_heading_level: 3 <%- parameter.description %> -
                +
                • Required: <%= parameter.required %>
                • Default: <%- parameter?.default ? parameter?.default : 'None' %>
                • <% if(parameter?.links?.length){ %>
                • diff --git a/apps/docs/hooks/useHash.ts b/apps/docs/hooks/useHash.ts new file mode 100644 index 00000000000..92c0cec4fb8 --- /dev/null +++ b/apps/docs/hooks/useHash.ts @@ -0,0 +1,29 @@ +import { useState, useCallback, useEffect } from 'react' + +const useHash = () => { + const [hash, setHash] = useState(() => + typeof window !== 'undefined' ? window.location.hash.split('#')[1] : undefined + ) + + const hashChangeHandler = useCallback(() => { + setHash(window.location.hash.split('#')[1]) + }, []) + + useEffect(() => { + window.addEventListener('hashchange', hashChangeHandler) + return () => { + window.removeEventListener('hashchange', hashChangeHandler) + } + }, []) + + const updateHash = useCallback( + (newHash) => { + if (newHash !== hash) window.location.hash = newHash + }, + [hash] + ) + + return [hash, updateHash] +} + +export default useHash diff --git a/apps/docs/hooks/useIsMounted.ts b/apps/docs/hooks/useIsMounted.ts new file mode 100644 index 00000000000..d1ff05f505f --- /dev/null +++ b/apps/docs/hooks/useIsMounted.ts @@ -0,0 +1,12 @@ +import { useState, useEffect } from 'react' + +const useIsMounted = (): boolean => { + const [isMounted, setIsMounted] = useState(false) + useEffect(() => { + setIsMounted(() => true) + }, []) + + return isMounted +} + +export default useIsMounted diff --git a/apps/docs/hooks/useMenuState.ts b/apps/docs/hooks/useMenuState.ts new file mode 100644 index 00000000000..ed1818bd4d8 --- /dev/null +++ b/apps/docs/hooks/useMenuState.ts @@ -0,0 +1,29 @@ +import { proxy, useSnapshot } from 'valtio' + +export const menuState = proxy({ + // values + menuActiveRefId: 'home', + // set states + setMenuActiveRefId: (value) => { + menuState.menuActiveRefId = value + }, + menuLevelId: '', + setMenuLevelId: (value) => { + menuState.menuLevelId = value + }, + menuMobileOpen: false, + setMenuMobileOpen: (value) => { + menuState.menuMobileOpen = value + }, +}) + +export const useMenuActiveRefId = () => { + return useSnapshot(menuState).menuActiveRefId +} +export const useMenuLevelId = () => { + return useSnapshot(menuState).menuLevelId +} + +export const useMenuMobileOpen = () => { + return useSnapshot(menuState).menuMobileOpen +} diff --git a/apps/docs/hooks/useWindowLocation.ts b/apps/docs/hooks/useWindowLocation.ts new file mode 100644 index 00000000000..5545b45f211 --- /dev/null +++ b/apps/docs/hooks/useWindowLocation.ts @@ -0,0 +1,37 @@ +import useIsMounted from './useIsMounted' +import { useEffect, useState } from 'react' + +const useWindowLocation = (): Location | void => { + const isMounted = useIsMounted() + const [location, setLocation] = useState(isMounted ? window.location : undefined) + + const setWindowLocation = (location) => { + setLocation(location) + } + + useEffect(() => { + if (!isMounted) return + + if (!location) { + setWindowLocation(window.location) + } + + const handler = () => { + setWindowLocation(window.location) + } + + window.addEventListener('popstate', handler) + + return () => { + window.removeEventListener('popstate', handler) + } + }, [isMounted]) + + useEffect(() => { + // console.log('location, in hook useffect', location) + }, [location]) + + return location +} + +export default useWindowLocation diff --git a/apps/docs/layouts/Default.tsx b/apps/docs/layouts/Default.tsx index 473fdff4bf3..515f73b89ac 100644 --- a/apps/docs/layouts/Default.tsx +++ b/apps/docs/layouts/Default.tsx @@ -4,16 +4,21 @@ import NavBar from '../components/Navigation/NavBar' import SideBar from '../components/Navigation/SideBar' import Footer from '../components/Footer' import TableOfContents from '~/components/TableOfContents' +import { menuItems } from '~/components/Navigation/Navigation.constants' +import { useRouter } from 'next/router' +import { getPageType } from '~/lib/helpers' interface Props { meta: { title: string; description?: string; hide_table_of_contents?: boolean } children: any toc?: any - menuItems: any - currentPage: string + menuItems?: any + currentPage?: string } -const Layout: FC = ({ meta, children, toc, menuItems, currentPage }) => { +const Layout: FC = ({ meta, children, toc }) => { + const { asPath } = useRouter() + useEffect(() => { const key = localStorage.getItem('supabaseDarkMode') if (!key) { @@ -27,6 +32,10 @@ const Layout: FC = ({ meta, children, toc, menuItems, currentPage }) => { const hasTableOfContents = toc !== undefined && toc.json.filter((item) => item.lvl !== 1 && item.lvl <= 3).length > 0 + const pageType = getPageType(asPath) + + console.log('Default, pageType', pageType) + return ( <> = ({ meta, children, toc, menuItems, currentPage }) => { openGraph={{ title: meta?.title, description: meta?.description, - url: `https://supabase.com/docs/${currentPage}`, + url: `https://supabase.com/docs/${asPath}`, images: [ { url: `https://supabase.com/docs/img/supabase-og-image.png`, @@ -45,9 +54,9 @@ const Layout: FC = ({ meta, children, toc, menuItems, currentPage }) => { />
                  - +
                  - +
                  = ({ meta, children }) => { - const { asPath } = useRouter() - const page = getPageType(asPath) - - useEffect(() => { - const key = localStorage.getItem('supabaseDarkMode') - if (!key) { - // Default to dark mode if no preference config - document.documentElement.className = 'dark' - } else { - document.documentElement.className = key === 'true' ? 'dark' : '' - } - }, []) - - const articleRef = useRef() - const [tocList, setTocList] = useState([]) - - useEffect(() => { - const articleEl = articleRef.current as HTMLElement - - if (!articleRef.current) return - const headings = Array.from(articleEl.querySelectorAll('h2, h3')) - const newHeadings = headings - .filter((heading) => heading.id) - .map((heading) => { - const text = heading.textContent.replace('#', '') - const link = heading.querySelector('a').getAttribute('href') - const level = heading.tagName === 'H2' ? 2 : 3 - return { text, link, level } - }) - setTocList(newHeadings) - }, []) - - const hasTableOfContents = tocList.length > 0 - - return ( - <> - - -
                  - -
                  - -
                  -
                  -
                  - {meta?.title &&

                  {meta.title}

                  } - {children} -
                  -
                  - {hasTableOfContents && !meta?.hide_table_of_contents && ( - - )} -
                  -
                  -
                  -
                  - - ) +const Layout: FC = (props) => { + return GuideLayout(props) } export default Layout diff --git a/apps/docs/layouts/DefaultLayout.tsx b/apps/docs/layouts/DefaultLayout.tsx new file mode 100644 index 00000000000..a6bfe7a1732 --- /dev/null +++ b/apps/docs/layouts/DefaultLayout.tsx @@ -0,0 +1,91 @@ +import { MDXProvider } from '@mdx-js/react' +import Head from 'next/head' +import { FC, useEffect, useState } from 'react' +import components from '~/components' +import Footer from '~/components/Footer' +import SideBar from '~/components/Navigation/SideBar' +import TableOfContents from '~/components/TableOfContents' +import NavBar from '~/components/Navigation/NavBar' + +interface Props { + meta: { title: string; description?: string; hide_table_of_contents?: boolean; video?: string } + children: any + toc?: any + menuItems: any +} + +const Layout: FC = (props: Props) => { + // const contentString = renderToString(props.children) + + const [active, setActive] = useState(false) + + useEffect(() => { + const key = localStorage.getItem('supabaseDarkMode') + if (!key) { + // Default to dark mode if no preference config + document.documentElement.className = 'dark' + } else { + document.documentElement.className = key === 'true' ? 'dark' : '' + } + }, []) + + useEffect(() => { + setTimeout(function () { + setActive(true) + }, 150) + }, []) + + // const contentString = renderToString(props.children) + + // const content = serialize(contentString || '') + + // console.log('contentString', contentString) + + // const _toc = toc('#hello world', { maxdepth: 1, firsth1: false }) + + const hasTableOfContents = + props.toc !== undefined && + props.toc.json.filter((item) => item.lvl !== 1 && item.lvl <= 3).length > 0 + + return ( + <> + + {props.meta?.title} | Supabase + + + + + + + + + +
                  + {/*

                  Tutorials

                  */} +
                  +

                  {props.meta.title}

                  + {/*
                  */} + +
                  +
                  + {hasTableOfContents && !props.meta?.hide_table_of_contents && ( + + )} + + ) +} + +export default Layout diff --git a/apps/docs/layouts/SiteLayout.tsx b/apps/docs/layouts/SiteLayout.tsx new file mode 100644 index 00000000000..f06c9dac529 --- /dev/null +++ b/apps/docs/layouts/SiteLayout.tsx @@ -0,0 +1,69 @@ +import { useEffect } from 'react' +import Link from 'next/link' +import { useRouter } from 'next/router' +import Footer from '~/components/Footer' +import NavigationMenu from '~/components/Navigation/NavigationMenu/NavigationMenu' +import TopNavBar from '~/components/Navigation/NavigationMenu/TopNavBar' +import SiteRefLayout from './SiteRefLayout' +import Image from 'next/image' + +const Layout = (props) => { + const router = useRouter() + + useEffect(() => { + const key = localStorage.getItem('supabaseDarkMode') + if (!key) { + // Default to dark mode if no preference config + document.documentElement.className = 'dark' + } else { + document.documentElement.className = key === 'true' ? 'dark' : '' + } + }, []) + + if (process.env.NEXT_PUBLIC_NEW_DOCS !== 'true') { + return <>{props.children} + } + + return SiteRefLayout(props) + + if (process.env.NEXT_PUBLIC_EXPERIMENTAL_REF && router.asPath.includes('/reference/')) { + return SiteRefLayout(props) + } + + return ( + <> +
                  + background +
                  + +
                  +
                  +
                  + +
                  +
                  + {props.children} +
                  +
                  + Supabase 2022 + — + Contributing + Author Styleguide + Changelog + Opensource + Supasquad +
                  +
                  +
                  +
                  + + ) +} + +export default Layout diff --git a/apps/docs/layouts/SiteRefLayout.tsx b/apps/docs/layouts/SiteRefLayout.tsx new file mode 100644 index 00000000000..bcdd7b8754e --- /dev/null +++ b/apps/docs/layouts/SiteRefLayout.tsx @@ -0,0 +1,321 @@ +import Image from 'next/image' +import Link from 'next/link' +import { useRouter } from 'next/router' +import NavigationMenu from '~/components/Navigation/NavigationMenu/NavigationMenu' +import TopNavBarRef from '~/components/Navigation/NavigationMenu/TopNavBarRef' +import { useTheme } from 'common/Providers' + +import RefSwitcher from '~/components/Navigation/RefSwitcher' +import { useEffect, useState, memo } from 'react' + +import FooterHelpCallout from '~/components/FooterHelpCallout' +import { NavigationMenuContextProvider } from '~/components/Navigation/NavigationMenu/NavigationMenu.Context' +import { useMenuLevelId, useMenuMobileOpen } from '~/hooks/useMenuState' + +import { menuState } from '~/hooks/useMenuState' + +const SiteRefLayout = ({ children }) => { + const router = useRouter() + const { isDarkMode } = useTheme() + + const menuLevel = useMenuLevelId() + const mobileMenuOpen = useMenuMobileOpen() + + //console.log('menuLevel', menuLevel) + + const levelsData = { + home: { + icon: '/docs/img/icons/menu/home', + name: 'Home', + }, + gettingstarted: { + icon: '/docs/img/icons/menu/getting-started', + name: 'Getting Started', + }, + database: { + icon: '/docs/img/icons/menu/database', + name: 'Database', + }, + auth: { + icon: '/docs/img/icons/menu/auth', + name: 'Auth', + }, + functions: { + icon: '/docs/img/icons/menu/functions', + name: 'Functions', + }, + realtime: { + icon: '/docs/img/icons/menu/realtime', + name: 'Realtime', + }, + storage: { + icon: '/docs/img/icons/menu/storage', + name: 'Storage', + }, + platform: { + icon: '/docs/img/icons/menu/platform', + name: 'Platform', + }, + resources: { + icon: '/docs/img/icons/menu/resources', + name: 'Resources', + }, + integrations: { + icon: '/docs/img/icons/menu/integrations', + name: 'Integrations', + }, + reference_javascript_v1: { + icon: '/docs/img/icons/menu/reference-javascript', + name: 'Javascript Reference v1.0', + }, + reference_javascript_v2: { + icon: '/docs/img/icons/menu/reference-javascript', + name: 'Javascript Reference v2.0', + }, + reference_dart_v0: { + icon: '/docs/img/icons/menu/reference-dart', + name: 'Dart Reference v0.0', + }, + reference_dart_v1: { + icon: '/docs/img/icons/menu/reference-dart', + name: 'Dart Reference v0.0', + }, + reference_cli: { + icon: '/docs/img/icons/menu/reference-cli', + name: 'CLI Reference', + }, + reference_api: { + icon: '/docs/img/icons/menu/reference-api', + name: 'Management API Reference', + }, + reference_self_hosting_auth: { + icon: '/docs/img/icons/menu/reference-auth', + name: 'Auth Server Reference', + }, + reference_self_hosting_storage: { + icon: '/docs/img/icons/menu/reference-storage', + name: 'Storage Server Reference', + }, + reference_self_hosting_realtime: { + icon: '/docs/img/icons/menu/reference-realtime', + name: 'Realtime Server Reference', + }, + } + + return ( + {}}> +
                  + {/* */} + +
                  + +
                  +
                  + {/* */} +
                  + +
                  +
                  +
                  +
                  + +
                  + +
                  + + {mobileMenuOpen + ? 'Close' + : menuLevel + ? levelsData[menuLevel].name + : levelsData['home'].name} + +
                  +
                  + +
                  +
                  +
                  +
                  + {children} + +
                  + +
                  +
                  +
                  + Supabase 2022 + — + + Contributing + + + Changelog + + + + Author Styleguide + + + Open Source + + + Supasquad + +
                  +
                  + + +
                  +
                  +
                  +
                  +
                  + ) +} + +export default SiteRefLayout diff --git a/apps/docs/layouts/guides/archived.tsx b/apps/docs/layouts/guides/archived.tsx new file mode 100644 index 00000000000..7ec09aaebfc --- /dev/null +++ b/apps/docs/layouts/guides/archived.tsx @@ -0,0 +1,114 @@ +import { MDXProvider } from '@mdx-js/react' +import { NextSeo } from 'next-seo' +import { useRouter } from 'next/router' +import { FC, useEffect, useRef, useState } from 'react' +import components from '~/components' +import Footer from '~/components/Footer' +import GuidesTableOfContents from '~/components/GuidesTableOfContents' +import NavBar from '~/components/Navigation/NavBar' +import { menuItems } from '~/components/Navigation/Navigation.constants' +import SideBar from '~/components/Navigation/SideBar' +import { getPageType } from '~/lib/helpers' + +interface Props { + meta: { title: string; description?: string; hide_table_of_contents?: boolean } + children: any + toc?: any + currentPage?: string +} + +const Layout: FC = ({ meta, children }) => { + const { asPath } = useRouter() + const page = getPageType(asPath) + + useEffect(() => { + const key = localStorage.getItem('supabaseDarkMode') + if (!key) { + // Default to dark mode if no preference config + document.documentElement.className = 'dark' + } else { + document.documentElement.className = key === 'true' ? 'dark' : '' + } + }, []) + + const articleRef = useRef() + const [tocList, setTocList] = useState([]) + + useEffect(() => { + const articleEl = articleRef.current as HTMLElement + + if (!articleRef.current) return + const headings = Array.from(articleEl.querySelectorAll('h2, h3')) + const newHeadings = headings + .filter((heading) => heading.id) + .map((heading) => { + const text = heading.textContent.replace('#', '') + const link = heading.querySelector('a').getAttribute('href') + const level = heading.tagName === 'H2' ? 2 : 3 + return { text, link, level } + }) + setTocList(newHeadings) + }, []) + + const hasTableOfContents = tocList.length > 0 + + return ( + <> + + +
                  + +
                  + +
                  +
                  +
                  + {meta?.title &&

                  {meta.title}

                  } + {children} +
                  +
                  + {hasTableOfContents && !meta?.hide_table_of_contents && ( + + )} +
                  +
                  +
                  +
                  + + ) +} + +export default Layout diff --git a/apps/docs/layouts/guides/current.tsx b/apps/docs/layouts/guides/current.tsx new file mode 100644 index 00000000000..3d583c453f9 --- /dev/null +++ b/apps/docs/layouts/guides/current.tsx @@ -0,0 +1,143 @@ +import { MDXProvider } from '@mdx-js/react' +import { NextSeo } from 'next-seo' +import { useRouter } from 'next/router' +import { FC, useEffect, useRef, useState } from 'react' +import components from '~/components' +import { highlightSelectedTocItem } from '~/components/CustomHTMLElements/CustomHTMLElements.utils' +import GuidesTableOfContents from '~/components/GuidesTableOfContents' +import useHash from '~/hooks/useHash' +import { getPageType } from '~/lib/helpers' + +interface Props { + meta: { + title: string + description?: string + hide_table_of_contents?: boolean + breadcrumb?: string + subtitle?: string + } + children: any + toc?: any + currentPage?: string + hideToc?: boolean +} + +const Layout: FC = (props) => { + const [hash] = useHash() + const [active, setActive] = useState(false) + + const articleRef = useRef() + const [tocList, setTocList] = useState([]) + + const { asPath } = useRouter() + const page = getPageType(asPath) + + useEffect(() => { + const key = localStorage.getItem('supabaseDarkMode') + if (!key) { + // Default to dark mode if no preference config + document.documentElement.className = 'dark' + } else { + document.documentElement.className = key === 'true' ? 'dark' : '' + } + }, []) + + useEffect(() => { + if (hash && tocList.length > 0) { + highlightSelectedTocItem(hash as string) + } + }, [hash, JSON.stringify(tocList)]) + + useEffect(() => { + const articleEl = articleRef.current as HTMLElement + + if (!articleRef.current) return + const headings = Array.from(articleEl.querySelectorAll('h2, h3')) + const newHeadings = headings + .filter((heading) => heading.id) + .map((heading) => { + const text = heading.textContent.replace('#', '') + const link = heading.querySelector('a').getAttribute('href') + const level = heading.tagName === 'H2' ? 2 : 3 + return { text, link, level } + }) + setTocList(newHeadings) + }, []) + + useEffect(() => { + setTimeout(function () { + setActive(true) + }, 150) + }, []) + + const hasTableOfContents = tocList.length > 0 + + return ( + <> + + +
                  +
                  + {props.meta.breadcrumb && ( +

                  {props.meta.breadcrumb}

                  + )} +
                  +

                  {props.meta.title}

                  + {props.meta.subtitle && ( +

                  {props.meta.subtitle}

                  + )} +
                  + {props.children} +
                  +
                  + {!props.hideToc && hasTableOfContents && !props.meta?.hide_table_of_contents && ( + + )} +
                  + + ) +} + +export default Layout diff --git a/apps/docs/layouts/guides/index.tsx b/apps/docs/layouts/guides/index.tsx new file mode 100644 index 00000000000..59a33376068 --- /dev/null +++ b/apps/docs/layouts/guides/index.tsx @@ -0,0 +1,23 @@ +import NewLayout from './current' +import OldLayout from './archived' +import { FC } from 'react' + +interface Props { + meta: { title: string; description?: string; hide_table_of_contents?: boolean; video?: string } + children: any + toc?: any + currentPage?: string +} + +const Layout: FC = (props) => { + switch (process.env.NEXT_PUBLIC_NEW_DOCS) { + case 'true': + return NewLayout(props) + break + default: + return OldLayout(props) + break + } +} + +export default Layout diff --git a/apps/docs/layouts/ref/RefSubLayout.tsx b/apps/docs/layouts/ref/RefSubLayout.tsx new file mode 100644 index 00000000000..3aa2b0930f0 --- /dev/null +++ b/apps/docs/layouts/ref/RefSubLayout.tsx @@ -0,0 +1,156 @@ +import { useInView } from 'react-intersection-observer' +import { FC } from 'react' +import { highlightSelectedNavItem } from '~/components/CustomHTMLElements/CustomHTMLElements.utils' +import { useRouter } from 'next/router' +import { useNavigationMenuContext } from '~/components/Navigation/NavigationMenu/NavigationMenu.Context' +import { menuState } from '~/hooks/useMenuState' + +interface ISectionContainer { + id: string + title?: string + monoFont?: boolean + slug: string + scrollSpyHeader?: boolean + singleColumn?: boolean + icon?: string +} + +type RefSubLayoutSubComponents = { + Section: FC + EducationSection: FC + EducationRow: FC + Details: FC + Examples: FC +} + +type StickyHeader = { + id: string + slug?: string + title?: string + monoFont?: boolean + scrollSpyHeader?: boolean // whether or not the header updates the url on scroll + icon?: string +} + +type RefSubLayoutType = {} + +interface IEducationRow {} +interface IEducationSection { + id: string + title?: string + monoFont?: boolean + slug: string + scrollSpyHeader?: boolean + hideTitle?: boolean + icon?: string +} +interface ISectionDetails {} +interface ISectionExamples {} + +const RefSubLayout: FC & RefSubLayoutSubComponents = (props) => { + return
                  {props.children}
                  +} + +const Section: FC = (props) => { + // console.log({ props }) + return ( +
                  + +
                  + {props.children} +
                  +
                  + ) +} + +const StickyHeader: FC = ({ icon, ...props }) => { + const router = useRouter() + const { setActiveRefItem } = useNavigationMenuContext() + + const { ref } = useInView({ + threshold: 1, + rootMargin: '30% 0% -35% 0px', + onChange: (inView, entry) => { + if (inView && window) highlightSelectedNavItem(entry.target.attributes['data-ref-id'].value) + if (inView && props.scrollSpyHeader) { + window.history.replaceState(null, '', entry.target.id) + // if (setActiveRefItem) setActiveRefItem(entry.target.attributes['data-ref-id'].value) + menuState.setMenuActiveRefId(entry.target.attributes['data-ref-id'].value) + // router.push(`/reference/javascript/${entry.target.attributes['data-ref-id'].value}`, null, { + // shallow: true, + // }) + } + }, + }) + + return ( +
                  + {icon && ( +
                  + +
                  + )} +

                  + {props.title && {props.title}} +

                  +
                  + ) +} + +const Details: FC = (props) => { + return
                  {props.children}
                  +} + +const Examples: FC = (props) => { + return ( +
                  +
                  {props.children}
                  +
                  + ) +} + +const EducationRow: FC = (props) => { + return
                  {props.children}
                  +} + +const EducationSection: FC = ({ icon, hideTitle = false, ...props }) => { + // console.log({ props }) + return ( +
                  + {!hideTitle && } + {props.children} +
                  + ) +} + +// function based layout +RefSubLayout.Section = Section +// education based layout +RefSubLayout.EducationSection = EducationSection +RefSubLayout.EducationRow = EducationRow +// common columns +RefSubLayout.Details = Details +RefSubLayout.Examples = Examples +export default RefSubLayout diff --git a/apps/docs/layouts/ref/RefSubLayoutNonFunc.tsx b/apps/docs/layouts/ref/RefSubLayoutNonFunc.tsx new file mode 100644 index 00000000000..d21aa1d79a4 --- /dev/null +++ b/apps/docs/layouts/ref/RefSubLayoutNonFunc.tsx @@ -0,0 +1,114 @@ +import { useInView } from 'react-intersection-observer' +import { FC } from 'react' +import { highlightSelectedNavItem } from '~/components/CustomHTMLElements/CustomHTMLElements.utils' +import { useRouter } from 'next/router' +import { useNavigationMenuContext } from '~/components/Navigation/NavigationMenu/NavigationMenu.Context' +import { menuState } from '~/hooks/useMenuState' + +interface ISectionContainer { + id: string + title?: string + monoFont?: boolean + slug: string + scrollSpyHeader?: boolean + singleColumn?: boolean +} + +type RefSubLayoutNonFuncSubComponents = { + Section: FC + Details: FC + Examples: FC +} + +type StickyHeader = { + id: string + slug?: string + title?: string + monoFont?: boolean + scrollSpyHeader?: boolean // whether or not the header updates the url on scroll +} + +type RefSubLayoutNonFuncType = {} + +const RefSubLayoutNonFunc: FC & RefSubLayoutNonFuncSubComponents = ( + props +) => { + return
                  {props.children}
                  +} + +const Section: FC = (props) => { + // console.log({ props }) + return ( +
                  + +
                  + {props.children} +
                  +
                  + ) +} + +const StickyHeader: FC = (props) => { + const router = useRouter() + const { setActiveRefItem } = useNavigationMenuContext() + + const { ref } = useInView({ + threshold: 1, + rootMargin: '30% 0% -35% 0px', + onChange: (inView, entry) => { + if (inView && window) highlightSelectedNavItem(entry.target.attributes['data-ref-id'].value) + if (inView && props.scrollSpyHeader) { + window.history.replaceState(null, '', entry.target.id) + // if (setActiveRefItem) setActiveRefItem(entry.target.attributes['data-ref-id'].value) + menuState.setMenuActiveRefId(entry.target.attributes['data-ref-id'].value) + // router.push(`/reference/javascript/${entry.target.attributes['data-ref-id'].value}`, null, { + // shallow: true, + // }) + } + }, + }) + + return ( +

                  + {props.title && {props.title}} +

                  + ) +} + +interface ISectionDetails {} + +const Details: FC = (props) => { + return
                  {props.children}
                  +} + +interface ISectionExamples {} + +const Examples: FC = (props) => { + return ( +
                  +
                  {props.children}
                  +
                  + ) +} + +RefSubLayoutNonFunc.Section = Section +RefSubLayoutNonFunc.Details = Details +RefSubLayoutNonFunc.Examples = Examples +export default RefSubLayoutNonFunc diff --git a/apps/docs/layouts/tutorials/TutorialLayout.tsx b/apps/docs/layouts/tutorials/TutorialLayout.tsx new file mode 100644 index 00000000000..b49391425b2 --- /dev/null +++ b/apps/docs/layouts/tutorials/TutorialLayout.tsx @@ -0,0 +1,93 @@ +import { MDXProvider } from '@mdx-js/react' +import Head from 'next/head' +import { FC, useEffect, useState } from 'react' +import components from '~/components' +import Footer from '~/components/Footer' +import SideBar from '~/components/Navigation/SideBar' +import TableOfContents from '~/components/TableOfContents' + +interface Props { + meta: { title: string; description?: string; hide_table_of_contents?: boolean; video?: string } + children: any + toc?: any + menuItems: any + currentPage: string +} + +const Layout: FC = (props: Props) => { + // const contentString = renderToString(props.children) + const [active, setActive] = useState(false) + + useEffect(() => { + const key = localStorage.getItem('supabaseDarkMode') + if (!key) { + // Default to dark mode if no preference config + document.documentElement.className = 'dark' + } else { + document.documentElement.className = key === 'true' ? 'dark' : '' + } + }, []) + + useEffect(() => { + setTimeout(function () { + setActive(true) + }, 150) + }, []) + + // const contentString = renderToString(props.children) + + // const content = serialize(contentString || '') + + // console.log('contentString', contentString) + + // const _toc = toc('#hello world', { maxdepth: 1, firsth1: false }) + + const hasTableOfContents = + props.toc !== undefined && + props.toc.json.filter((item) => item.lvl !== 1 && item.lvl <= 3).length > 0 + + return ( + <> + + {props.meta?.title} | Supabase + + + + + + + + + +
                  +
                  +

                  Tutorials

                  +
                  +

                  {props.meta.title}

                  +
                  + + +
                  +
                  + {hasTableOfContents && !props.meta?.hide_table_of_contents && ( + + )} +
                  + + ) +} + +export default Layout diff --git a/apps/docs/lib/helpers.ts b/apps/docs/lib/helpers.ts index b5df2c0d5c0..899aea15618 100644 --- a/apps/docs/lib/helpers.ts +++ b/apps/docs/lib/helpers.ts @@ -32,3 +32,19 @@ export function getPageType(asPath: string) { return page } + +export function flattenSections(sections) { + var a = [] + for (var i = 0; i < sections.length; i++) { + if (sections[i].id) { + // only push a section that has an id + // these are reserved for sidebar subtitles + a.push(sections[i]) + } + if (sections[i].items) { + // if there are subitems, loop through + a = a.concat(flattenSections(sections[i].items)) + } + } + return a +} diff --git a/apps/docs/lib/mdx/generateOldRefMarkdown.tsx b/apps/docs/lib/mdx/generateOldRefMarkdown.tsx new file mode 100644 index 00000000000..2358fd5c698 --- /dev/null +++ b/apps/docs/lib/mdx/generateOldRefMarkdown.tsx @@ -0,0 +1,26 @@ +import { serialize } from 'next-mdx-remote/serialize' + +import toc from 'markdown-toc' + +import { getDocsBySlug } from '~/lib/docs' + +async function generateOldRefMarkdown(slug) { + let doc = getDocsBySlug(slug) + const content = await serialize(doc.content ?? '', { + // MDX's available options, see the MDX docs for more info. + // https://mdxjs.com/packages/mdx/#compilefile-options + // Indicates whether or not to parse the frontmatter from the mdx source + }) + return { + props: { + /* + * old reference docs are below + */ + ...doc, + content, + toc: toc(doc.content, { maxdepth: 1, firsth1: false }), + }, + } +} + +export default generateOldRefMarkdown diff --git a/apps/docs/lib/mdx/generateRefMarkdown.tsx b/apps/docs/lib/mdx/generateRefMarkdown.tsx new file mode 100644 index 00000000000..935db038833 --- /dev/null +++ b/apps/docs/lib/mdx/generateRefMarkdown.tsx @@ -0,0 +1,62 @@ +import fs from 'fs' + +import matter from 'gray-matter' +import { serialize } from 'next-mdx-remote/serialize' + +import { remarkCodeHike } from '@code-hike/mdx' +// import codeHikeTheme from '~/codeHikeTheme.js' +import theme from 'shiki/themes/solarized-dark.json' + +async function generateRefMarkdown(sections, slug) { + let markdownContent = [] + /** + * Read all the markdown files that might have + * - custom text + * - call outs + * - important notes regarding implementation + */ + await Promise.all( + sections.map(async (x, i) => { + if (!x.id) return null + + const pathName = `docs/ref${slug}/${x.id}.mdx` + + function checkFileExists(x) { + if (fs.existsSync(x)) { + return true + } else { + return false + } + } + + const markdownExists = checkFileExists(pathName) + + if (!markdownExists) return null + + const fileContents = markdownExists ? fs.readFileSync(pathName, 'utf8') : '' + const { data, content } = matter(fileContents) + + markdownContent.push({ + id: x.id, + title: x.title, + meta: data, + // introPage: introPages.includes(x), + content: content + ? await serialize(content ?? '', { + // MDX's available options, see the MDX docs for more info. + // https://mdxjs.com/packages/mdx/#compilefile-options + mdxOptions: { + // remarkPlugins: [[remarkCodeHike, { autoImport: false, theme }]], + useDynamicImport: true, + }, + // Indicates whether or not to parse the frontmatter from the mdx source + }) + : null, + }) + }) + ) + + return markdownContent +} + +export default generateRefMarkdown diff --git a/apps/docs/lib/mdx/handleRefStaticPaths.tsx b/apps/docs/lib/mdx/handleRefStaticPaths.tsx new file mode 100644 index 00000000000..c1f13e4a8c4 --- /dev/null +++ b/apps/docs/lib/mdx/handleRefStaticPaths.tsx @@ -0,0 +1,18 @@ +import { getAllDocs } from '../docs' + +async function handleRefGetStaticPaths() { + let docs = getAllDocs() + + return { + paths: docs.map(() => { + return { + params: { + slug: docs.map((d) => d.slug), + }, + } + }), + fallback: 'blocking', + } +} + +export default handleRefGetStaticPaths diff --git a/apps/docs/lib/mdx/handleRefStaticProps.tsx b/apps/docs/lib/mdx/handleRefStaticProps.tsx new file mode 100644 index 00000000000..c9c47b4496d --- /dev/null +++ b/apps/docs/lib/mdx/handleRefStaticProps.tsx @@ -0,0 +1,34 @@ +import generateOldRefMarkdown from '~/lib/mdx/generateOldRefMarkdown' +import generateRefMarkdown from '~/lib/mdx/generateRefMarkdown' + +async function handleRefStaticProps(sections, params, librarypath, urlPath) { + let markdownContent = await generateRefMarkdown(sections, librarypath) + + /* + * old content generation + * this is for grabbing to old markdown files + */ + + let slug + if (params.slug.length > 1) { + slug = `docs/reference${urlPath}/${params.slug.join('/')}` + } else { + slug = `docs/reference${urlPath}/${params.slug[0]}` + } + + /* + * handle old ref pages + */ + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'false') { + const oldMarkdown = await generateOldRefMarkdown(slug) + return oldMarkdown + } else { + return { + props: { + docs: markdownContent, + }, + } + } +} + +export default handleRefStaticProps diff --git a/apps/docs/lib/refGenerator/helpers.ts b/apps/docs/lib/refGenerator/helpers.ts new file mode 100644 index 00000000000..ed8f18f5e4e --- /dev/null +++ b/apps/docs/lib/refGenerator/helpers.ts @@ -0,0 +1,285 @@ +import { TsDoc } from '~/generator/legacy/definitions' + +import { values, mapValues } from 'lodash' +import { OpenAPIV3 } from 'openapi-types' + +export function extractTsDocNode(nodeToFind: string, definition: any) { + const nodePath = nodeToFind.split('.') + let i = 0 + let previousNode = definition + let currentNode = definition + while (i < nodePath.length) { + previousNode = currentNode + currentNode = previousNode.children.find((x) => x.name == nodePath[i]) || null + if (currentNode == null) { + console.log(`Cant find ${nodePath[i]} in ${previousNode.children.map((x) => '\n' + x.name)}`) + break + } + i++ + } + + return currentNode +} + +export function generateParameters(tsDefinition: any) { + let functionDeclaration = null + if (tsDefinition.kindString == 'Method') { + functionDeclaration = tsDefinition + } else if (tsDefinition.kindString == 'Constructor') { + functionDeclaration = tsDefinition + } else functionDeclaration = tsDefinition?.type?.declaration + if (!functionDeclaration) return '' + + // Functions can have multiple signatures - select the last one since that + // tends to be closer to primitive types (citation needed). + const paramDefinitions: TsDoc.TypeDefinition[] = functionDeclaration.signatures.at(-1).parameters + if (!paramDefinitions) return '' + + // const paramsComments: TsDoc.CommentTag = tsDefinition.comment?.tags?.filter(x => x.tag == 'param') + let parameters = paramDefinitions.map((x) => recurseThroughParams(x)) // old join // .join(`\n`) + return parameters +} + +function recurseThroughParams(paramDefinition: any) { + const param = { ...paramDefinition } + const labelParams = generateLabelParam(param) + + let children: any[] + if (param.type?.type === 'literal') { + // skip: literal types have no children + } else if (param.type?.type === 'intrinsic') { + // primitive types + if (!['string', 'number', 'boolean', 'object', 'unknown'].includes(param.type?.name)) { + // skip for now + //throw new Error('unexpected intrinsic type') + } + } else if (param.type?.dereferenced) { + const dereferenced = param.type.dereferenced + + if (dereferenced.children) { + children = dereferenced.children + } else if (dereferenced.type?.declaration?.children) { + children = dereferenced.type.declaration.children + } else if (dereferenced.type?.type === 'union') { + // skip: we don't want to show unions as nested parameters + } else if (Object.keys(dereferenced).length === 0) { + // skip: {} have no children + } else { + throw new Error('unexpected case for dereferenced param type') + } + } else if (param.type?.type === 'reflection') { + const declaration = param.type.declaration + + if (!declaration) { + throw new Error('reflection must have a declaration') + } + + if (declaration.children) { + children = declaration.children + } else if (declaration.signatures) { + // skip: functions have no children + } else if (declaration.name === '__type') { + // skip: mostly inlined object type + } else { + throw new Error('unexpected case for reflection param type') + } + } else if (param.type?.type === 'indexedAccess') { + // skip: too complex, e.g. PromisifyMethods> + } else if (param.type?.type === 'reference') { + // skip: mostly unexported types + } else if (param.type?.type === 'union') { + // skip: we don't want to show unions as nested parameters + } else if (param.type?.type === 'array') { + // skip: no use for it for now + } else { + // skip: no use for now + //throw new Error(`unexpected param type`) + } + + if (children) { + const properties = children + .sort((a, b) => a.name?.localeCompare(b.name)) // first alphabetical + .sort((a, b) => (a.flags?.isOptional ? 1 : -1)) // required params first + .map((x) => recurseThroughParams(x)) + labelParams.subContent = properties + } + return labelParams +} + +// const isDereferenced = (paramDefinition: TsDoc.TypeDefinition) => { +// // @ts-ignore +// return paramDefinition.type?.type == 'reference' && paramDefinition.type?.dereferenced?.id +// } + +function generateLabelParam(param: any) { + let labelParams: any = {} + if (param.type?.type === 'intrinsic' && param.type?.name === 'unknown') { + labelParams = { + name: param.name ?? param.value, + isOptional: Boolean(param.flags?.isOptional) || 'defaultValue' in param, + type: 'any', + description: param.comment ? tsDocCommentToMdComment(param.comment) : null, + } + } else if (param.type?.declaration?.signatures) { + labelParams = { + name: param.name ?? param.value, + isOptional: Boolean(param.flags?.isOptional) || 'defaultValue' in param, + type: 'function', + description: param.comment ? tsDocCommentToMdComment(param.comment) : null, + } + } else if (param.type?.type === 'literal') { + labelParams = { + name: param.name ?? param.value, + isOptional: Boolean(param.flags?.isOptional) || 'defaultValue' in param, + type: typeof param.type.value === 'string' ? `"${param.type.value}"` : `${param.type.value}`, + description: param.comment ? tsDocCommentToMdComment(param.comment) : null, + } + } else { + labelParams = { + name: param.name ?? extractParamTypeAsString(param), + isOptional: Boolean(param.flags?.isOptional) || 'defaultValue' in param, + type: extractParamTypeAsString(param), + description: param.comment ? tsDocCommentToMdComment(param.comment) : null, + } + } + return labelParams +} + +function extractParamTypeAsString(paramDefinition) { + if (paramDefinition.type?.name) { + // return `${paramDefinition.type.name}` // old + return paramDefinition.type.name + } else if (paramDefinition.type?.type === 'union') { + // only do this for literal/primitive types - for complex objects we just return 'object' + if (paramDefinition.type.types.every(({ type }) => ['literal', 'intrinsic'].includes(type))) { + return paramDefinition.type.types + .map((x) => { + if (x.type === 'literal') { + if (typeof x.value === 'string') { + return `"${x.value}"` + } + return `${x.value}` + } else if (x.type === 'intrinsic') { + if (x.name === 'unknown') { + return 'any' + } + return x.name + } + }) + .join(' | ') + } + } else if (paramDefinition.type?.type === 'array') { + const elementType = paramDefinition.type.elementType + + if (elementType.type === 'intrinsic') { + if (elementType.name === 'unknown') { + return 'any[]' + } + return `${elementType.name}[]` + } + + return 'object[]' + } + + return 'object' // old 'object' +} + +const tsDocCommentToMdComment = (commentObject: TsDoc.DocComment) => + ` +${commentObject?.shortText || ''} + +${commentObject?.text || ''} + +`.trim() + +// function generateExamples(id: string, specExamples: any, allLanguages: any) { +// return specExamples.map((example) => { +// let allTabs = example.hideCodeBlock ? '' : generateCodeBlocks(allLanguages, example) +// return Example({ +// name: example.name, +// description: example.description, +// tabs: allTabs, +// note: example.note, +// }) +// }) +// } + +// OPENAPI-SPEC-VERSION: 3.0.0 +type v3OperationWithPath = OpenAPIV3.OperationObject & { + path: string +} + +export type enrichedOperation = OpenAPIV3.OperationObject & { + path: string + fullPath: string + operationId: string + operation: string + responseList: [] +} + +export function gen_v3(spec: OpenAPIV3.Document, dest: string, { apiUrl }: { apiUrl: string }) { + const specLayout = spec.tags || [] + const operations: enrichedOperation[] = [] + + Object.entries(spec.paths).forEach(([key, val]) => { + const fullPath = `${apiUrl}${key}` + + toArrayWithKey(val!, 'operation').forEach((o) => { + const operation = o as v3OperationWithPath + const enriched = { + ...operation, + path: key, + fullPath, + operationId: slugify(operation.summary!), + + responseList: toArrayWithKey(operation.responses!, 'responseCode') || [], + } + // @ts-expect-error // missing 'responses', see OpenAPIV3.OperationObject.responses + operations.push(enriched) + }) + }) + + const sections = specLayout.map((section) => { + return { + ...section, + title: toTitle(section.name), + id: slugify(section.name), + operations: operations.filter((operation) => operation.tags?.includes(section.name)), + } + }) + + const content = { + info: spec.info, + sections, + operations, + } + + return content +} + +const slugify = (text: string) => { + return text + .toString() + .toLowerCase() + .replace(/[. )(]/g, '-') // Replace spaces and brackets - + .replace(/[^\w\-]+/g, '') // Remove all non-word chars + .replace(/\-\-+/g, '-') // Replace multiple - with single - + .replace(/^-+/, '') // Trim - from start of text + .replace(/-+$/, '') // Trim - from end of text +} + +// Uppercase the first letter of a string +const toTitle = (text: string) => { + return text.charAt(0).toUpperCase() + text.slice(1) +} + +/** + * Convert Object to Array of values + */ +export const toArrayWithKey = (obj: object, keyAs: string) => + values( + mapValues(obj, (value: any, key: string) => { + value[keyAs] = key + return value + }) + ) diff --git a/apps/docs/lib/refGenerator/refTypes.ts b/apps/docs/lib/refGenerator/refTypes.ts new file mode 100644 index 00000000000..c3563de9f01 --- /dev/null +++ b/apps/docs/lib/refGenerator/refTypes.ts @@ -0,0 +1,17 @@ +export type Link = { + name: string + link: string +} + +export type Parameter = { + id: string + title: string + description: string + summary: string + tags?: string[] + links?: Link[] + subcommands?: [] + usage?: string + required?: boolean + default?: boolean +} diff --git a/apps/docs/middleware.ts b/apps/docs/middleware.ts new file mode 100644 index 00000000000..d13ce4a442f --- /dev/null +++ b/apps/docs/middleware.ts @@ -0,0 +1,36 @@ +import { NextResponse } from 'next/server' +import type { NextRequest } from 'next/server' +import isbot from 'isbot' + +export function middleware(request: NextRequest) { + const specs = ['javascript', 'dart'] + + let version = '' + if (request.url.includes('/v1/')) { + version = 'v1' + } + if (request.url.includes('/v0/')) { + version = 'v0' + } + + if (isbot(request.headers.get('user-agent'))) { + for (const lib of specs) { + if (request.url.includes(`reference/${lib}`)) { + const requestSlug = request.url.split('/').pop() + + return NextResponse.rewrite( + new URL( + `/docs/reference/${lib}/${version ? version + '/' : ''}crawlers/${requestSlug}`, + request.url + ).toString() + ) + } + } + } else { + return NextResponse.next() + } +} + +export const config = { + matcher: '/((?!api|_next|static|public|favicon.ico).*)', +} diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs index 6e476e18228..58bb4bde63b 100644 --- a/apps/docs/next.config.mjs +++ b/apps/docs/next.config.mjs @@ -2,12 +2,37 @@ import nextMdx from '@next/mdx' import remarkGfm from 'remark-gfm' import rehypeSlug from 'rehype-slug' +//import theme from 'shiki/themes/nord.json' assert { type: 'json' } + import withTM from 'next-transpile-modules' +import withYaml from 'next-plugin-yaml' +// import admonitions from 'remark-admonitions' + +// import { remarkCodeHike } from '@code-hike/mdx' +// import codeHikeTheme from './codeHikeTheme.js' + +/** + * Rewrites and redirects are handled by + * apps/www nextjs config + * + * Do not add them in this config + */ const withMDX = nextMdx({ extension: /\.mdx?$/, options: { - remarkPlugins: [remarkGfm], + remarkPlugins: [ + // [ + // remarkCodeHike, + // { + // theme: codeHikeTheme, + // autoImport: false, + // lineNumbers: true, + // showCopyButton: true, + // }, + // ], + remarkGfm, + ], rehypePlugins: [rehypeSlug], // This is required for `MDXProvider` component // providerImportSource: '@mdx-js/react', @@ -18,8 +43,8 @@ const withMDX = nextMdx({ const nextConfig = { // Append the default value with md extensions pageExtensions: ['ts', 'tsx', 'js', 'jsx', 'md', 'mdx'], - reactStrictMode: true, - swcMinify: true, + // reactStrictMode: true, + // swcMinify: true, basePath: '/docs', images: { dangerouslyAllowSVG: true, @@ -50,6 +75,7 @@ const nextConfig = { // next.config.js export default () => { - const plugins = [withMDX, withTM(['ui', 'common'])] + // const plugins = [withMDX]/ + const plugins = [withTM(['ui', 'common']), withMDX, withYaml] return plugins.reduce((acc, next) => next(acc), nextConfig) } diff --git a/apps/docs/package.json b/apps/docs/package.json index 7a6df1f501a..4b1199eb0b5 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -13,7 +13,7 @@ "gen:api": "npm-run-all gen:api:usage", "gen:api:usage": "ts-node ./generator/index.ts gen --type api --url https://api.supabase.com --input ../../spec/transforms/api_v0_openapi_deparsed.json --output ./docs/reference/api/generated/usage.mdx", "gen:cli": "npm-run-all gen:cli:commands gen:cli:config", - "gen:cli:commands": "ts-node ./generator/index.ts gen --type cli --input ../../spec/cli_v1_commands.yaml --output ./docs/reference/cli/generated/usage.mdx ", + "gen:cli:commands": "ts-node ./generator/index.ts gen --type cli --input ../../spec/cli_v1_commands--old.yaml --output ./docs/reference/cli/generated/usage.mdx ", "gen:cli:config": "ts-node ./generator/index.ts gen --type config --input ../../spec/cli_v1_config.yaml --output ./docs/reference/cli/generated/config.mdx", "gen:gotrue": "npm-run-all gen:gotrue:config gen:gotrue:usage", "gen:gotrue:config": "ts-node ./generator/index.ts gen --type config --input ../../spec/gotrue_v1_config.yaml --output ./docs/reference/auth/generated/config.mdx", @@ -36,11 +36,13 @@ "@algolia/autocomplete-js": "^1.7.2", "@algolia/autocomplete-plugin-recent-searches": "^1.7.2", "@apollo/client": "^3.6.6", + "@code-hike/mdx": "^0.7.4", "@docsearch/react": "^3.3.0", "@mdx-js/loader": "^1.6.22", "@mdx-js/react": "^1.6.22", "@next/mdx": "^12.0.4", "@radix-ui/react-accordion": "^1.0.1", + "@radix-ui/react-collapsible": "^1.0.1", "@tailwindcss/typography": "^0.4.1", "algoliasearch": "^4.14.2", "babel": "^6.23.0", @@ -49,13 +51,16 @@ "dotenv": "^16.0.3", "graphql": "^16.5.0", "gray-matter": "^4.0.3", + "isbot": "^3.6.5", "jsrsasign": "^10.5.26", "lodash": "^4.17.21", "markdown-toc": "^1.2.0", "mdx-mermaid": "2.0.0-rc3", - "next": "12.1.0", + "next": "12.3.2", "next-compose-plugins": "^2.2.1", - "next-mdx-remote": "^3.0.8", + "next-mdx-remote": "^4.1.0", + "next-mdx-toc": "^0.1.3", + "next-plugin-yaml": "^1.0.1", "next-seo": "^5.14.1", "next-themes": "0.0.15", "next-transpile-modules": "^9.0.0", @@ -68,10 +73,15 @@ "react-syntax-highlighter": "^15.3.1", "remark": "^14.0.2", "remark-admonitions": "^1.2.1", + "remark-autolink-headings": "^7.0.1", + "remark-gfm": "^3.0.1", "remark-html": "^15.0.0", "remark-mdx": "^2.0.0-rc.2", "remark-prism": "^1.3.6", - "ui": "*" + "remark-slug": "^7.0.1", + "shiki": "^0.11.1", + "ui": "*", + "valtio": "^1.7.6" }, "devDependencies": { "@types/node": "^17.0.12", diff --git a/apps/docs/pages/404.mdx b/apps/docs/pages/404.mdx index 92807aeb5af..b75a4a59620 100644 --- a/apps/docs/pages/404.mdx +++ b/apps/docs/pages/404.mdx @@ -1,6 +1,13 @@ +import Layout from '~/layouts/DefaultGuideLayout' + export const meta = { - title: '404', - description: 'Page not found', + id: '404', + title: '404 not found', + description: '404 not found', } -# Page not found +404 not found + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/404.tsx b/apps/docs/pages/404.tsx new file mode 100644 index 00000000000..71b9bb5f6f5 --- /dev/null +++ b/apps/docs/pages/404.tsx @@ -0,0 +1,52 @@ +import { useEffect, useState } from 'react' +import Link from 'next/link' +import { Button } from 'ui' +import Head from 'next/head' + +export default function Custom404() { + const [show404, setShow404] = useState(false) + + useEffect(() => { + setTimeout(() => { + setShow404(true) + }, 500) + }, []) + + return ( + <> + + 404 | Supabase + +
                  +
                  +

                  + 404 +

                  +
                  +
                  +
                  +

                  Looking for something?

                  +

                  + We could not find the page that you are looking for! +

                  +
                  +
                  + + + +
                  +
                  +
                  + + ) +} diff --git a/apps/docs/pages/[...slug].tsx b/apps/docs/pages/[...slug].tsx index bb0e2a0d943..6b34513a155 100644 --- a/apps/docs/pages/[...slug].tsx +++ b/apps/docs/pages/[...slug].tsx @@ -1,13 +1,11 @@ import toc from 'markdown-toc' -import { MDXProvider } from '@mdx-js/react' -import { useRouter } from 'next/router' import { MDXRemote } from 'next-mdx-remote' import { serialize } from 'next-mdx-remote/serialize' import components from '../components/index' -import { menuItems } from '../components/Navigation/Navigation.constants' -import { getPageType } from '../lib/helpers' -import { getAllDocs, getDocsBySlug } from '../lib/docs' +import NewLayout from '~/layouts/DefaultGuideLayout' + import Layout from '~/layouts/Default' +import { getAllDocs, getDocsBySlug } from '../lib/docs' interface Meta { id: string @@ -21,18 +19,22 @@ interface Props { content: any toc: any } +const isNewDocs = process.env.NEXT_PUBLIC_NEW_DOCS === 'true' export default function Doc({ meta, content, toc }: Props) { - const { asPath } = useRouter() - const page = getPageType(asPath) - return ( // @ts-ignore - - - - - + <> + {Object.entries(meta).length > 0 || !isNewDocs ? ( + + + + ) : ( + + + + )} + ) } diff --git a/apps/docs/pages/_app.tsx b/apps/docs/pages/_app.tsx index 050f6074fea..53cd9ec927b 100644 --- a/apps/docs/pages/_app.tsx +++ b/apps/docs/pages/_app.tsx @@ -1,17 +1,21 @@ -import { useEffect } from 'react' -import { useRouter } from 'next/router' -import type { AppProps } from 'next/app' -import { post } from 'lib/fetchWrappers' -import { ThemeProvider } from '../components/Providers' -import { SearchProvider } from '~/components/DocSearch' import { DefaultSeo } from 'next-seo' +import { useRouter } from 'next/router' +import { useEffect } from 'react' +import { AppPropsWithLayout } from 'types' +import { SearchProvider } from '~/components/DocSearch' import Favicons from '~/components/Favicons' -import '../styles/main.scss?v=1.0.0' -import '../styles/docsearch.scss' +import { ThemeProvider } from 'common/Providers' +import SiteLayout from '~/layouts/SiteLayout' import '../styles/algolia-search.scss' +import '../styles/ch.scss' +import '../styles/docsearch.scss' +import '../styles/main.scss?v=1.0.0' +import '../styles/new-docs.scss' import '../styles/prism-okaidia.scss' +import { post } from '~/lib/fetchWrappers' +import { menuState } from '~/hooks/useMenuState' -function MyApp({ Component, pageProps }: AppProps) { +function MyApp({ Component, pageProps }: AppPropsWithLayout) { const router = useRouter() function telemetry(route: string) { @@ -24,9 +28,27 @@ function MyApp({ Component, pageProps }: AppProps) { useEffect(() => { function handleRouteChange(url: string) { + /* + * handle telemetry + */ telemetry(url) + /* + * handle "scroll to top" behaviour on route change + */ + if (document) { + console.log('url', url) + // do not scroll to top for reference docs + if (!url.includes('reference/')) { + // scroll container div to top + const container = document.getElementById('docs-content-container') + // check container exists (only avail on new docs) + if (container) container.scrollTop = 0 + } + } + menuState.setMenuMobileOpen(false) } + function handlePagrScroll() {} // Listen for page changes after a navigation or when the query changes router.events.on('routeChangeComplete', handleRouteChange) return () => { @@ -65,7 +87,9 @@ function MyApp({ Component, pageProps }: AppProps) { /> - + + + diff --git a/apps/docs/pages/_document.tsx b/apps/docs/pages/_document.tsx index f550928130a..98acbb79912 100644 --- a/apps/docs/pages/_document.tsx +++ b/apps/docs/pages/_document.tsx @@ -4,7 +4,7 @@ export default function Document() { return ( - +
                  diff --git a/apps/docs/pages/getting-started.mdx b/apps/docs/pages/getting-started.mdx new file mode 100644 index 00000000000..6313b6cb018 --- /dev/null +++ b/apps/docs/pages/getting-started.mdx @@ -0,0 +1,161 @@ +import Layout from '~/layouts/DefaultGuideLayout' + +export const meta = { + title: 'Overview', + description: 'An overview of Supabase\'s architecture and product principles.', +} + +Supabase is open source. We choose open source tools which are scalable and make them simple to use. + +Supabase is not a 1-to-1 mapping of Firebase. While we are building many of the features that Firebase offers, we are not going about it the same way: +our technological choices are quite different; everything we use is open source; and wherever possible, we use and support existing tools rather than developing from scratch. + +Most notably, we use Postgres rather than a NoSQL store. This choice was deliberate. We believe that no other database offers the functionality required to compete with Firebase, +while maintaining the scalability required to go beyond it. + +## Architecture + +Each Supabase project consists of several tools: + +![Supabase Architecture](/docs/img/supabase-architecture.png) + +### PostgreSQL (Database) + +PostgreSQL is the core of Supabase. We do not abstract the PostgreSQL database — you can access it and use it with full privileges. We simply provide tools which makes PostgreSQL as easy to use as Firebase. + +- Official Docs: [postgresql.org/docs](https://www.postgresql.org/docs/current/index.html) +- Source code: [github.com/postgres/postgres](https://github.com/postgres/postgres) (mirror) +- License: [PostgreSQL Licence](https://www.postgresql.org/about/licence/) +- Language: C + +### Studio (Dashboard) + +An open source Dashboard for managing your database and services. + +- Official Docs: [Supabase docs](/docs) +- Source code: [github.com/supabase/supabase](https://github.com/supabase/supabase/tree/master/studio) +- License: [Apache 2](https://github.com/supabase/supabase/blob/master/LICENSE) +- Language: TypeScript + +### GoTrue (Auth) + +A JWT-based API for managing users and issuing access tokens. This integrates with PostgreSQL's Row Level Security and the API servers. + +- Official Docs: [Supabase Auth reference docs](/docs/reference/auth) +- Source code: [github.com/supabase/gotrue](https://github.com/supabase/gotrue) +- License: [MIT](https://github.com/supabase/gotrue/blob/master/LICENSE) +- Language: Go + +### PostgREST (API) + +A standalone web server that turns your PostgreSQL database directly into a RESTful API. +We use this with our [pg_graphql](https://github.com/supabase/pg_graphql) extension to provide a GraphQL API. + +- Official Docs: [postgrest.org](https://postgrest.org/) +- Source code: [github.com/PostgREST/postgrest](https://github.com/PostgREST/postgrest) +- License: [MIT](https://github.com/PostgREST/postgrest/blob/main/LICENSE) +- Language: Haskel + +### Realtime (API & multiplayer) + +A scalable websocket engine for managing user Presence, broadcasting messages, and streaming database changes. + +- Official Docs: [Supabase Realtime docs](/docs/guides/realtime) +- Source code: [github.com/supabase/realtime](https://github.com/supabase/realtime) +- License: [Apache 2](https://github.com/supabase/realtime/blob/master/LICENSE) +- Language: Elixir + +### Storage API (large file storage) + +An S3-compatible object storage service that stores metadata in Postgres. + +- Official Docs: [Supabase Storage reference docs](/docs/reference/storage) +- Source code: [github.com/supabase/storage-api](https://github.com/supabase/storage-api) +- License: [Apache 2.0](https://github.com/supabase/storage-api/blob/master/LICENSE) +- Language: NodeJS / TypeScript + +### Deno (Edge Functions) + +A modern runtime for JavaScript and TypeScript. + +- Official Docs: [deno.land](https://deno.land/) +- Source code: [github.com/denoland/deno](https://github.com/denoland/deno) +- License: [MIT](https://github.com/denoland/deno/blob/main/LICENSE.md) +- Language: TypeScript / Rust + +### postgres-meta (Database management) + +A RESTful API for managing your Postgres. Fetch tables, add roles, and run queries. + +- Official Docs: [supabase.github.io/postgres-meta](https://supabase.github.io/postgres-meta/) +- Source code: [github.com/supabase/postgres-meta](https://github.com/supabase/postgres-meta) +- License: [Apache 2.0](https://github.com/supabase/postgres-meta/blob/master/LICENSE) +- Language: NodeJS / TypeScript + +### PgBouncer + +A lightweight connection pooler for PostgreSQL. This is useful for connecting to Postgres when using Serverless functions. + +- Official Docs: [pgbouncer.org](http://www.pgbouncer.org/) +- Source code: [pgbouncer/pgbouncer](https://github.com/pgbouncer/pgbouncer) +- License: [ISC](https://github.com/pgbouncer/pgbouncer/blob/master/COPYRIGHT) +- Language: C + +### Kong (API Gateway) + +A cloud-native API gateway, built on top of Nginx. + +- Official Docs: [docs.konghq.com](https://docs.konghq.com/) +- Source code: [github.com/kong/kong](https://github.com/kong/kong) +- License: [Apache 2.0](https://github.com/Kong/kong/blob/master/LICENSE) +- Language: Lua + +## Product Principles + +It is our goal to provide an architecture that any large-scale company would design for themselves, +and then provide tooling around that architecture that is easy-to-use for indie-developers and small teams. + +We use a series of principles to ensure that scalability and usability are never mutually exclusive: + +### Everything works in isolation + +Each system must work as a standalone tool with as few moving parts as possible. +The litmus test for this is: "Can a user run this product with nothing but a Postgres database?" + +### Everything is integrated + +Supabase is composable. Even though every product works in isolation, each product on the platform needs to 10x the other products. +For integration, each tool should expose an API and Webhooks. + +### Everything is extensible + +We're deliberate about adding a new tool, and prefer instead to extend an existing one. +This is the opposite of many cloud providers whose product offering expands into niche use-cases. We provide _primitives_ for developers, which allow them to achieve any goal. +Less, but better. + +### Everything is portable + +To avoid lock-in, we make it easy to migrate in and out. Our cloud offering is compatible with our self-hosted product. +We use existing standards to increase portability (like pg_dump an CSV files). If a new standard emerges which competes with a "Supabase" approach, we will deprecate the approach in favor of the standard. +This forces us compete on experience. We aim to be the best Postgres hosting service. + +### Play the long game + +We sacrifice short-term wins for long-term gains. For example, it is tempting to run a fork of Postgres with additional functionality which only our customers need. +Instead, we prefer to support efforts to upstream missing functionality so that the entire community benefits. This has the additional benefit of ensuring portability and longevity. + +### Build for developers + +"Developers" are a specific profile of user: they are _builders_. +When assessing impact as a function of effort, developers have a large efficiency due to the type of products and systems they can build. +As the profile of a developer changes over time, Supabase will continue to evolve the product to fit this evolving profile. + +### Support existing tools + +Supabase supports existing tools and communities wherever possible. Supabase is more like a "community of communities" - each tool typically has its own community +which we work with. +Open source is something we approach [collaboratively](https://supabase.com/blog/supabase-series-b#giving-back): we employ maintainers, sponsor projects, invest in businesses, and develop our own open source tools. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth.mdx b/apps/docs/pages/guides/auth.mdx index 2d9ae24727d..85b1fdc96da 100644 --- a/apps/docs/pages/guides/auth.mdx +++ b/apps/docs/pages/guides/auth.mdx @@ -1,4 +1,6 @@ import Layout from '~/layouts/DefaultGuideLayout' +import NewContent from '~/pages/new/auth.mdx' +import { useRouter } from 'next/router' export const meta = { id: 'auth', @@ -172,6 +174,12 @@ When users sign up, Supabase assigns them a unique ID. You can reference this ID -export const Page = ({ children }) => +export const Page = ({ children }) => { + const router = useRouter() + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true' && !router.asPath.includes('overview')) { + return NewContent() + } + return +} export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx b/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx index e9862fe85f6..346c8d7f3bc 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx @@ -210,7 +210,7 @@ Create a `/components/supabase-listener.jsx` file and add the following: import { useRouter } from 'next/navigation' import { useEffect } from 'react' -import supabase from '../utils/supabase' +import supabase from '../utils/supabase-browser' export default function SupabaseListener({ accessToken }) { const router = useRouter() diff --git a/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx b/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx index 08dbb12a001..c38f8f3b284 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx @@ -365,7 +365,7 @@ export const getServerSideProps = async (ctx: GetServerSidePropsContext) => { -## Server-side data fetching to OAuth APIs using `provider token` {#oauth-provider-token} +## Server-side data fetching to OAuth APIs using `provider token` {`#oauth-provider-token`} When using third-party auth providers, sessions are initiated with an additional `provider_token` field which is persisted in the auth cookie and can be accessed within the session object. The `provider_token` can be used to make API requests to the OAuth provider's API endpoints on behalf of the logged-in user. diff --git a/apps/docs/pages/guides/auth/auth-messagebird.mdx b/apps/docs/pages/guides/auth/auth-messagebird.mdx index acfc4d0cbe2..38651a9876d 100644 --- a/apps/docs/pages/guides/auth/auth-messagebird.mdx +++ b/apps/docs/pages/guides/auth/auth-messagebird.mdx @@ -60,8 +60,6 @@ Toggle it on, and copy the 2 values over from the messagebird dashboard. Click s Note: If you use the Test API Key, the OTP will not be delivered to the mobile number specified but messagebird will log the response in the dashboard. If the Live API Key is used instead, the OTP will be delivered and there will be a deduction in your free credits. - - Plugin MessageBird credentials Now the backend should be setup, we can proceed to add our client-side code! diff --git a/apps/docs/pages/guides/auth/auth-mfa.mdx b/apps/docs/pages/guides/auth/auth-mfa.mdx index 286916d29de..0591e3af52b 100644 --- a/apps/docs/pages/guides/auth/auth-mfa.mdx +++ b/apps/docs/pages/guides/auth/auth-mfa.mdx @@ -7,13 +7,6 @@ export const meta = { 'Add an additional layer of security to your apps with Supabase Auth multi-factor authentication.', } - - -Multi-Factor Authentication is in early access preview only. Although we -believe it is production ready, APIs and some behavior may change based on -feedback we receive in the preview period. - - Multi-factor authentication (MFA), sometimes called two-factor authentication (2FA), adds an additional layer of security to your @@ -94,17 +87,20 @@ for your application. JWTs without an `aal` claim are at the `aal1` level. ## Adding to your app -Adding MFA to your app involves these three steps: +Adding MFA to your app involves these four steps: 1. **Add enrollment flow.** You need to provide a UI within your app that your users will be able to set-up MFA in. You can add this right after sign-up, or as part of a separate flow in the settings portion of your app. -2. **Add challenge step to login.** +2. **Add unenrollment flow.** + You need to support a UI through which users can see existing devices and unenroll + devices which are no longer relevant. +3. **Add challenge step to login.** If a user has set-up MFA, your app's login flow needs to present a challenge screen to the user asking them to prove they have access to the additional factor. -3. **Enforce rules for MFA logins.** +4. **Enforce rules for MFA logins.** Once your users have a way to enroll and log in with MFA, you need to enforce authorization rules across your app: on the frontend, backend, API servers or Row-Level Security policies. @@ -141,6 +137,7 @@ Enrolling a factor for use with MFA takes three steps: immediately becomes active for the user account. If not, you should repeat steps 2 and 3. + #### Example: React Below is an example that creates a new `EnrollMFA` component that illustrates @@ -241,6 +238,83 @@ export function EnrollMFA({ } ``` +### Add unenrollment flow + +An unenrollment flow provides a UI for users to manage and unenroll factors linked to their accounts. +Most applications do so via a factor management page where users can view and unlink selected factors. + +When a user unenrolls a factor, call `supabase.auth.mfa.unenroll()` with the ID of the factor. +For example, call `supabase.auth.mfa.unenroll({factorId: "d30fd651-184e-4748-a928-0a4b9be1d429"})` to unenroll a factor with ID `d30fd651-184e-4748-a928-0a4b9be1d429`. + + +#### Example: React + +Below is an example that creates a new `UnenrollMFA` component that illustrates +the important pieces of the MFA enrollment flow. Note that users can only unenroll a factor after completing the enrollment flow and obtaining +an `aal2` JWT claim.Here are some points of note: + +- When the component appears on screen, the `supabase.auth.mfa.listFactors()` endpoint + fetches all existing factors together with their details. +- The existing factors for a user are displayed in a table. +- Once the user has selected a factor to unenroll, they can type in the factorId and click **Unenroll** + which creates a confirmation modal. + + +Unenrolling a factor will downgrade the assurance level from `aal2` to `aal1` only after the refresh interval has lapsed. +For an immediate downgrade from `aal2` to `aal1` after enrolling one will need to manually call `refreshSession()` + + +```tsx +/** + * UnenrollMFA shows a simple table with the list of factors together with a button to unenroll. + * When a user types in the factorId of the factor that they wish to unenroll and clicks unenroll + * the corresponding factor will be unenrolled. + */ +export function UnenrollMFA() { + const [factorId, setFactorId] = useState('') + const [factors, setFactors] = useState([]) + const [error, setError] = useState('') // holds an error message + + useEffect(() => { + ;(async () => { + const { data, error } = await supabase.auth.mfa.listFactors() + if (error) { + throw error + } + + setFactors(data.totp) + })() + }, []) + + return ( + <> + {error &&
                  {error}
                  } + + + Factor ID + Friendly Name + Factor Status + + {factors.map(factor => ( + + {factor.id} + {factor.friendly_name} + {factor.factor_type} + {factor.status} + + ))} + + setFactorId(e.target.value.trim())} + /> + + + ) +} +``` + ### Add challenge step to login Once a user has logged in via their first factor (email+password, magic link, @@ -460,7 +534,7 @@ create policy "Policy name." select case when created_at >= '2022-12-12T00:00:00Z' then array['aal2'] - else array['aal1', 'aal2', NULL] + else array['aal1', 'aal2'] end as aal from auth.users where auth.uid() = id)); @@ -471,8 +545,6 @@ create policy "Policy name." `aal2` for all other timestamps. - The `<@` operator is PostgreSQL's ["contained in" operator.](https://www.postgresql.org/docs/current/functions-array.html) -- `NULL` appears because some JWTs originating from prior to the introduction - of MFA in Supabase Auth will not contain an `aal` claim. - **Using `as restrictive` ensures this policy will restrict all commands on the table regardless of other policies!** @@ -491,7 +563,7 @@ create policy "Policy name." select case when count(id) > 0 then array['aal2'] - else array['aal1', 'aal2', NULL] + else array['aal1', 'aal2'] end as aal from auth.mfa_factors where auth.uid() = user_id and status = 'verified' @@ -503,8 +575,6 @@ create policy "Policy name." - Otherwise, it will accept both `aal1` and `aal2`. - The `<@` operator is PostgreSQL's ["contained in" operator.](https://www.postgresql.org/docs/current/functions-array.html) -- `NULL` appears because some JWTs originating from prior to the introduction - of MFA in Supabase Auth will not contain an `aal` claim. - **Using `as restrictive` ensures this policy will restrict all commands on the table regardless of other policies!** @@ -589,7 +659,7 @@ seconds later. The entries are ordered most recent method first! { "amr": [ { - "method": "mfa/totp", + "method": "totp", "timestamp": 1666086056 }, { @@ -625,7 +695,7 @@ Currently recognized methods are: - `otp` - any one-time password based sign in (email code, SMS code, magic link). - `oauth` - any OAuth based sign in (social login). -- `mfa/totp` - a TOTP additional factor. +- `totp` - a TOTP additional factor. This list will expand in the future. diff --git a/apps/docs/pages/guides/auth/overview.mdx b/apps/docs/pages/guides/auth/overview.mdx new file mode 100644 index 00000000000..210374ebf3c --- /dev/null +++ b/apps/docs/pages/guides/auth/overview.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import OldContent from '~/pages/guides/auth.mdx' + +export const meta = { + id: 'auth', + title: 'Auth', + description: 'Use Supabase to Authenticate and Authorize your users.', + sidebar_label: 'Overview', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return OldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/passwordless-login.mdx b/apps/docs/pages/guides/auth/passwordless-login.mdx new file mode 100644 index 00000000000..3dfa29c985c --- /dev/null +++ b/apps/docs/pages/guides/auth/passwordless-login.mdx @@ -0,0 +1,73 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import { IconPanel, GlassPanel, IconMail } from 'ui' +import Link from 'next/link' +import { PhoneLoginsItems } from '~/components/Navigation/NavigationMenu/NavigationMenu.constants' + +export const meta = { + title: 'Passwordless Login', + description: 'Learn about logging in with email one-time passwords (magic links) and SMS one-time passwords.', +} + +Passwordless login is a method of authentication that allows users to log in to a website or application without using a password. Instead of entering a password, the user may be asked to provide some other form of authentication, such as a one-time code sent via email or SMS, or by using a biometric factor like their fingerprint or facial recognition. + +## Benefits + +There are several benefits of implementing passwordless login in your applications: + +1. **Improved user experience**: By eliminating the need for users to remember and enter complex passwords, passwordless login can make it easier and more convenient for users to log in to your application. This can improve the overall user experience and make it more enjoyable for users to interact with your application. + +2. **Increased security**: Passwordless login can improve the security of your application by reducing the risk of password-related security breaches, such as password reuse and weak passwords. By using alternative forms of authentication, such as one-time codes or biometric factors, you can make it more difficult for unauthorized users to access your application. + +3. **Reduced support burden**: Passwordless login can also help reduce the support burden for your team by eliminating the need to reset forgotten passwords or deal with other password-related issues. This can free up your team to focus on other important tasks and improve the efficiency of your operation. + +## Set up Passwordless Login with Supabase Auth + +Supabase supports passwordless logins through "magic links" (instead of entering a password, the user is sent +a link which they can click to log in to their account) and one-time passwords via SMS through several communications platforms. Follow the guides below to set up a passwordless login flow with Supabase Auth. + +### Email One-Time Password (OTP) + +
                  + +
                  + + + +### Phone SMS One-Time Password (OTP) + +
                  + {PhoneLoginsItems.map((item) => ( + + + + {item.linkDescription} + + + +))} + +
                  + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/passwordless-login/email-otp-magic-link.mdx b/apps/docs/pages/guides/auth/passwordless-login/email-otp-magic-link.mdx new file mode 100644 index 00000000000..8e6bb09d58e --- /dev/null +++ b/apps/docs/pages/guides/auth/passwordless-login/email-otp-magic-link.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-magic-link.mdx' + +export const meta = { + id: 'auth-magic-link', + title: 'Login With Magic Link', + description: 'Use Supabase to authenticate and authorize your users using magic links.', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/passwordless-login/phone-sms-otp-messagebird.mdx b/apps/docs/pages/guides/auth/passwordless-login/phone-sms-otp-messagebird.mdx new file mode 100644 index 00000000000..93e300fd59b --- /dev/null +++ b/apps/docs/pages/guides/auth/passwordless-login/phone-sms-otp-messagebird.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-messagebird.mdx' + +export const meta = { + id: 'auth-messagebird', + title: 'Phone Auth with MessageBird', + description: 'How to set up and use Mobile OTP with MessageBird and Supabase.', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/passwordless-login/phone-sms-otp-twilio.mdx b/apps/docs/pages/guides/auth/passwordless-login/phone-sms-otp-twilio.mdx new file mode 100644 index 00000000000..922d4a33db1 --- /dev/null +++ b/apps/docs/pages/guides/auth/passwordless-login/phone-sms-otp-twilio.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-twilio.mdx' + +export const meta = { + id: 'auth-twilio', + title: 'Phone Auth with Twilio', + description: 'How to set up and use Mobile OTP with Twilio and Supabase.', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/passwordless-login/phone-sms-otp-vonage.mdx b/apps/docs/pages/guides/auth/passwordless-login/phone-sms-otp-vonage.mdx new file mode 100644 index 00000000000..deec90db1d5 --- /dev/null +++ b/apps/docs/pages/guides/auth/passwordless-login/phone-sms-otp-vonage.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-vonage.mdx' + +export const meta = { + id: 'auth-vonage', + title: 'Phone Auth with Vonage', + description: 'How to set up and use Mobile OTP with Vonage and Supabase.', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login.mdx b/apps/docs/pages/guides/auth/social-login.mdx new file mode 100644 index 00000000000..65b36e2a0a5 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login.mdx @@ -0,0 +1,49 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import { IconPanel } from 'ui' +import Link from 'next/link' +import { SocialLoginItems } from '~/components/Navigation/NavigationMenu/NavigationMenu.constants' + +export const meta = { + title: 'Social Login', + description: 'Logging in with social accounts', +} + +Social Login (OAuth) is an open standard for authentication that allows users to log in to one website or application using their credentials from another website or application. +It is a way for users to grant third-party applications access to their online accounts without sharing their passwords. +OAuth is commonly used for things like logging in to a social media account from a third-party app. It is a secure and convenient way to authenticate users and share information between applications. + +## Benefits + +There are several reasons why you might want to add social login to your applications: + +1. **Improved user experience**: Users can register and log in to your application using their existing social media accounts, which can be faster and more convenient than creating a new account from scratch. This makes it easier for users to access your application, improving their overall experience. + +2. **Better user engagement**: You can access additional data and insights about your users, such as their interests, demographics, and social connections. This can help you tailor your content and marketing efforts to better engage with your users and provide a more personalized experience. + +3. **Increased security**: Social login can improve the security of your application by leveraging the security measures and authentication protocols of the social media platforms that your users are logging in with. This can help protect against unauthorized access and account takeovers. + +## Set up a social provider with Supabase Auth + +Supabase supports a suite of social providers. Follow these guides to configure a social provider for your platform. + +
                  + {SocialLoginItems.map((item) => ( + + + + {item.description} + + + +))} + +
                  + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-apple.mdx b/apps/docs/pages/guides/auth/social-login/auth-apple.mdx new file mode 100644 index 00000000000..43257cc81c4 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-apple.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-apple.mdx' + +export const meta = { + id: 'auth-apple', + title: 'Login with Apple', + description: 'Add Apple OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-azure.mdx b/apps/docs/pages/guides/auth/social-login/auth-azure.mdx new file mode 100644 index 00000000000..09100d4fb3d --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-azure.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-azure.mdx' + +export const meta = { + id: 'auth-azure', + title: 'Login with Azure', + description: 'Add Azure OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-bitbucket.mdx b/apps/docs/pages/guides/auth/social-login/auth-bitbucket.mdx new file mode 100644 index 00000000000..0d3b621ea44 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-bitbucket.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-bitbucket.mdx' + +export const meta = { + id: 'auth-bitbucket', + title: 'Login with Bitbucket', + description: 'Add Bitbucket OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-discord.mdx b/apps/docs/pages/guides/auth/social-login/auth-discord.mdx new file mode 100644 index 00000000000..67701ea1187 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-discord.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-discord.mdx' + +export const meta = { + id: 'auth-discord', + title: 'Login with Discord', + description: 'Add Discord OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-facebook.mdx b/apps/docs/pages/guides/auth/social-login/auth-facebook.mdx new file mode 100644 index 00000000000..ed30fbca144 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-facebook.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-facebook.mdx' + +export const meta = { + id: 'auth-facebook', + title: 'Login with Facebook', + description: 'Add Facebook OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-github.mdx b/apps/docs/pages/guides/auth/social-login/auth-github.mdx new file mode 100644 index 00000000000..3d9de6485f7 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-github.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-github.mdx' + +export const meta = { + id: 'auth-github', + title: 'Login with GitHub', + description: 'Add GitHub OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-gitlab.mdx b/apps/docs/pages/guides/auth/social-login/auth-gitlab.mdx new file mode 100644 index 00000000000..5447cc696b6 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-gitlab.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-gitlab.mdx' + +export const meta = { + id: 'auth-gitlab', + title: 'Login with GitLab', + description: 'Add GitLab OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-google.mdx b/apps/docs/pages/guides/auth/social-login/auth-google.mdx new file mode 100644 index 00000000000..e19c0d8a935 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-google.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-google.mdx' + +export const meta = { + id: 'auth-google', + title: 'Login with Google', + description: 'Add Google OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-keycloak.mdx b/apps/docs/pages/guides/auth/social-login/auth-keycloak.mdx new file mode 100644 index 00000000000..e71dc8a393f --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-keycloak.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-keycloak.mdx' + +export const meta = { + id: 'auth-keycloak', + title: 'Login with Keycloak', + description: 'Add Keycloak OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-linkedin.mdx b/apps/docs/pages/guides/auth/social-login/auth-linkedin.mdx new file mode 100644 index 00000000000..a027c482afc --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-linkedin.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-linkedin.mdx' + +export const meta = { + id: 'auth-linkedin', + title: 'Login with LinkedIn', + description: 'Add LinkedIn OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-notion.mdx b/apps/docs/pages/guides/auth/social-login/auth-notion.mdx new file mode 100644 index 00000000000..50dc672d080 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-notion.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-notion.mdx' + +export const meta = { + id: 'auth-notion', + title: 'Login with Notion', + description: 'Add Notion OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-slack.mdx b/apps/docs/pages/guides/auth/social-login/auth-slack.mdx new file mode 100644 index 00000000000..b724a321068 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-slack.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-slack.mdx' + +export const meta = { + id: 'auth-slack', + title: 'Login with Slack', + description: 'Add Slack OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-spotify.mdx b/apps/docs/pages/guides/auth/social-login/auth-spotify.mdx new file mode 100644 index 00000000000..69c931f6f7d --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-spotify.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-spotify.mdx' + +export const meta = { + id: 'auth-spotify', + title: 'Login with Spotify', + description: 'Add Spotify OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-twilio.mdx b/apps/docs/pages/guides/auth/social-login/auth-twilio.mdx new file mode 100644 index 00000000000..922d4a33db1 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-twilio.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-twilio.mdx' + +export const meta = { + id: 'auth-twilio', + title: 'Phone Auth with Twilio', + description: 'How to set up and use Mobile OTP with Twilio and Supabase.', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-twitch.mdx b/apps/docs/pages/guides/auth/social-login/auth-twitch.mdx new file mode 100644 index 00000000000..ae5a108d34f --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-twitch.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-twitch.mdx' + +export const meta = { + id: 'auth-twitch', + title: 'Login with Twitch', + description: 'Add Twitch OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-twitter.mdx b/apps/docs/pages/guides/auth/social-login/auth-twitter.mdx new file mode 100644 index 00000000000..c29dbe75b23 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-twitter.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-twitter.mdx' + +export const meta = { + id: 'auth-twitter', + title: 'Login with Twitter', + description: 'Add Twitter OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-workos.mdx b/apps/docs/pages/guides/auth/social-login/auth-workos.mdx new file mode 100644 index 00000000000..54ab92808ce --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-workos.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-workos.mdx' + +export const meta = { + id: 'auth-workos', + title: 'Login with WorkOS', + description: 'Add WorkOS OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-zoom.mdx b/apps/docs/pages/guides/auth/social-login/auth-zoom.mdx new file mode 100644 index 00000000000..148b9772219 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-zoom.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/auth/auth-zoom.mdx' + +export const meta = { + id: 'auth-zoom', + title: 'Login with Zoom', + description: 'Add Zoom OAuth to your Supabase project', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/cli/managing-environments.mdx b/apps/docs/pages/guides/cli/managing-environments.mdx index 2ce7e6fbcda..5523819a3a9 100644 --- a/apps/docs/pages/guides/cli/managing-environments.mdx +++ b/apps/docs/pages/guides/cli/managing-environments.mdx @@ -76,8 +76,6 @@ There are two ways to make schema changes: ### Manual migration - - Create a new migration script by running: ```bash @@ -114,8 +112,6 @@ This allows you to pipe in an existing script from another file or stdout: Unlike manual migrations, auto schema diff creates a new migration script from changes **already** applied to your local database. - - Create an `employees` table under the `public` schema using Studio UI, accessible at [localhost:54323](http://localhost:54323/) by default. Next, generate a schema diff by running the following command: @@ -339,8 +335,6 @@ Once the test error is resolved, merge this PR and watch the deployment in actio After verifying your staging project has successfully migrated, create another PR from `develop` to `main` and merge it to deploy the migration to the production project. - - The `release` job applies all new migration scripts merged in `supabase/migrations` directory to a linked Supabase project. You can control which project the job links to via `PROJECT_ID` environment variable. ## Troubleshooting @@ -408,8 +402,6 @@ Apart from tables, you also need to reassign owner of other entities using their Sometimes your teammate may merge a new migration file to git main branch, and now you need to rebase your local schema changes on top. - - We can handle this scenario gracefully by renaming your old migration file with a new timestamp. ```bash diff --git a/apps/docs/pages/guides/database/json.mdx b/apps/docs/pages/guides/database/json.mdx index c78fbb8475b..969fdb74a77 100644 --- a/apps/docs/pages/guides/database/json.mdx +++ b/apps/docs/pages/guides/database/json.mdx @@ -69,13 +69,13 @@ create table books ( 2. Select the `books` table in the sidebar. 3. Click **+ Insert row** and add 5 rows with the following properties: -| id | title | author | metadata | -| --- | ----------------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------- | -| 1 | The Poky Little Puppy | Janette Sebring Lowrey | {"ages":[3,6],"price":5.95,"description":"Puppy is slower than other, bigger animals."} | -| 2 | The Tale of Peter Rabbit | Beatrix Potter | {"ages":[2,5],"price":4.49,"description":"Rabbit eats some vegetables."} | -| 3 | Tootle | Gertrude Crampton | {"ages":[2,5],"price":3.99,"description":"Little toy train has big dreams."} | -| 4 | Green Eggs and Ham | Dr. Seuss | {"ages":[4,8],"price":7.49,"description":"Sam has changing food preferences and eats unusually colored food."} | -| 5 | Harry Potter and the Goblet of Fire | J.K. Rowling | {"ages":[10,99],"price":24.95,"description":"Fourth year of school starts, big drama ensues."} | +| id | title | author | metadata | +| --- | ----------------------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------- | +| 1 | The Poky Little Puppy | Janette Sebring Lowrey | `json {"ages":[3,6],"price":5.95,"description":"Puppy is slower than other, bigger animals."}` | +| 2 | The Tale of Peter Rabbit | Beatrix Potter | `json {"ages":[2,5],"price":4.49,"description":"Rabbit eats some vegetables."}` | +| 3 | Tootle | Gertrude Crampton | `json {"ages":[2,5],"price":3.99,"description":"Little toy train has big dreams."}` | +| 4 | Green Eggs and Ham | Dr. Seuss | `json {"ages":[4,8],"price":7.49,"description":"Sam has changing food preferences and eats unusually colored food."}` | +| 5 | Harry Potter and the Goblet of Fire | J.K. Rowling | `json {"ages":[10,99],"price":24.95,"description":"Fourth year of school starts, big drama ensues."}` | @@ -193,13 +193,13 @@ console.log(JSON.stringify(data, null, 2)) -| id | title | author | metadata | -| --- | ----------------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------- | -| 1 | The Poky Little Puppy | Janette Sebring Lowrey | {"ages":[3,6],"price":5.95,"description":"Puppy is slower than other, bigger animals."} | -| 2 | The Tale of Peter Rabbit | Beatrix Potter | {"ages":[2,5],"price":4.49,"description":"Rabbit eats some vegetables."} | -| 3 | Tootle | Gertrude Crampton | {"ages":[2,5],"price":3.99,"description":"Little toy train has big dreams."} | -| 4 | Green Eggs and Ham | Dr. Seuss | {"ages":[4,8],"price":7.49,"description":"Sam has changing food preferences and eats unusually colored food."} | -| 5 | Harry Potter and the Goblet of Fire | J.K. Rowling | {"ages":[10,99],"price":24.95,"description":"Fourth year of school starts, big drama ensues."} | +| id | title | author | metadata | +| --- | ----------------------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------- | +| 1 | The Poky Little Puppy | Janette Sebring Lowrey | `json{"ages":[3,6],"price":5.95,"description":"Puppy is slower than other, bigger animals."}` | +| 2 | The Tale of Peter Rabbit | Beatrix Potter | `json{"ages":[2,5],"price":4.49,"description":"Rabbit eats some vegetables."} ` | +| 3 | Tootle | Gertrude Crampton | `json{"ages":[2,5],"price":3.99,"description":"Little toy train has big dreams."} ` | +| 4 | Green Eggs and Ham | Dr. Seuss | `json{"ages":[4,8],"price":7.49,"description":"Sam has changing food preferences and eats unusually colored food."} ` | +| 5 | Harry Potter and the Goblet of Fire | J.K. Rowling | `json{"ages":[10,99],"price":24.95,"description":"Fourth year of school starts, big drama ensues."} ` | The data as it appears here has the `JSONB` fields in a different order than when inserted. As mentioned earlier, data is parsed as its inserted when using the JSONB format. diff --git a/apps/docs/pages/guides/database/overview.mdx b/apps/docs/pages/guides/database/overview.mdx new file mode 100644 index 00000000000..1cfbc2357db --- /dev/null +++ b/apps/docs/pages/guides/database/overview.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/database.mdx' + +export const meta = { + id: 'database', + title: 'Database', + description: 'Use Supabase to manage your data.', + sidebar_label: 'Overview', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/database/sql-to-api.mdx b/apps/docs/pages/guides/database/sql-to-api.mdx index e26756c7b44..636addcf3b9 100644 --- a/apps/docs/pages/guides/database/sql-to-api.mdx +++ b/apps/docs/pages/guides/database/sql-to-api.mdx @@ -6,7 +6,7 @@ export const meta = { description: 'Implementing common SQL patterns in the JavaScript API', } - +{/* @TODO: this one is a very daunting read on first attempt. Need to check what is the purpose of it */} Select a set of columns from a single table with where, order by, and limit clauses. diff --git a/apps/docs/pages/guides/examples.mdx b/apps/docs/pages/guides/examples.mdx index 0d923495ff6..8c0697297f3 100644 --- a/apps/docs/pages/guides/examples.mdx +++ b/apps/docs/pages/guides/examples.mdx @@ -6,7 +6,7 @@ export const meta = { description: 'Examples you can use to get started with Supabase', } - +{/* */} We have a [set of examples](https://github.com/supabase/supabase/tree/master/examples) in our [main repository](https://github.com/supabase/supabase) to help you get started. diff --git a/apps/docs/pages/guides/functions.mdx b/apps/docs/pages/guides/functions.mdx index 9822760ab50..fdceb0ceea9 100644 --- a/apps/docs/pages/guides/functions.mdx +++ b/apps/docs/pages/guides/functions.mdx @@ -1,5 +1,6 @@ import Layout from '~/layouts/DefaultGuideLayout' -import {Button} from 'ui' +import { Button, GlassPanel } from 'ui' +import Link from 'next/link' export const meta = { id: 'functions', @@ -16,16 +17,79 @@ Edge Functions are server-side TypeScript functions, distributed globally at the - It is TypeScript first and supports WASM. - Edge Functions are globally distributed for low-latency. - +
                  + +
                  ## Examples Check out the [Edge Function Examples](https://github.com/supabase/supabase/tree/master/examples/edge-functions) in our GitHub repository. -
                  - +
                  + {examples.map((x) => ( + + ))}
                  -export const Page = ({ children }) => +export const examples = [ + { + name: 'With supabase-js', + description: 'Use the Supabase client inside your Edge Function.', + href: 'https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts', + }, + { + name: 'With CORS headers', + description: 'Send CORS headers for invoking from the browser.', + href: 'https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/browser-with-cors/index.ts', + }, + { + name: 'React Native with Stripe', + description: 'Full example for using Supabase and Stripe, with Expo.', + href: 'https://github.com/supabase-community/expo-stripe-payments-with-supabase-functions', + }, + { + name: 'Flutter with Stripe', + description: 'Full example for using Supabase and Stripe, with Flutter.', + href: 'https://github.com/supabase-community/flutter-stripe-payments-with-supabase-functions', + }, + { + name: 'Building a RESTful Service API', + description: + 'Learn how to use HTTP methods and paths to build a RESTful service for managing tasks.', + href: 'https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/restful-tasks/index.ts', + }, + { + name: 'Working with Supabase Storage', + description: 'An example on reading a file from Supabase Storage.', + href: 'https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/read-storage/index.ts', + }, + { + name: 'Open Graph Image Generation', + description: 'Generate Open Graph images with Deno and Supabase Edge Functions.', + href: '/guides/functions/examples/og-image', + }, + { + name: 'OG Image Generation & Storage CDN Caching', + description: 'Cache generated images with Supabase Storage CDN.', + href: 'https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/og-image-with-storage-cdn', + }, + { + name: 'Get User Location', + description: `Get user location data from user's IP address.`, + href: 'https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/location', + }, +] + +export const Page = ({ children }) => export default Page diff --git a/apps/docs/pages/guides/functions/examples.mdx b/apps/docs/pages/guides/functions/examples.mdx deleted file mode 100644 index 66e499356a3..00000000000 --- a/apps/docs/pages/guides/functions/examples.mdx +++ /dev/null @@ -1,17 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'examples', - title: 'Examples', - description: 'Useful Supabase Edge Functions Examples', -} - -You can find a list of useful [Edge Function Examples](https://github.com/supabase/supabase/tree/master/examples/edge-functions) in our GitHub repository. - -
                  - -
                  - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/functions/examples/og-image.mdx b/apps/docs/pages/guides/functions/examples/og-image.mdx new file mode 100644 index 00000000000..2974d5ef853 --- /dev/null +++ b/apps/docs/pages/guides/functions/examples/og-image.mdx @@ -0,0 +1,56 @@ +import Layout from '~/layouts/DefaultGuideLayout' + +export const meta = { + id: 'examples-og-image', + title: 'Generating OG Images', + description: 'Generate Open Graph images with Deno and Supabase Edge Functions.', +} + +
                  + +
                  + +Generate Open Graph images with Deno and Supabase Edge Functions. [View on GitHub](https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/opengraph). + +```tsx handler.tsx +import React from 'https://esm.sh/react@18.2.0' +import { ImageResponse } from 'https://deno.land/x/og_edge@0.0.4/mod.ts' + +export default function handler(req: Request) { + return new ImageResponse( + ( +
                  + Hello OG Image! +
                  + ) + ) +} +``` + +```ts index.ts +import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' +import handler from './handler.tsx' + +console.log('Hello from og-image Function!') + +serve(handler) +``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/getting-started.mdx b/apps/docs/pages/guides/getting-started.mdx new file mode 100644 index 00000000000..f751794966c --- /dev/null +++ b/apps/docs/pages/guides/getting-started.mdx @@ -0,0 +1,167 @@ +import Layout from '~/layouts/DefaultLayout' +import Link from 'next/link' +import { GlassPanel, IconPanel, Button, IconChevronRight } from 'ui' + +export const meta = { + id: 'getting-started', + title: 'Getting Started', + description: 'Resources for getting started with Supabase.', +} + +
                  + +
                  + +
                  + {resources.map((resource) => { + return ( + + + + {resource.description} + + + + ) + +})} + +
                  + +
                  + +
                  + +### Tutorials + +
                  + {webapps.map((item) => { + return ( + + + + {item.description} + + + + ) + })} +
                  + +export const webapps = [ + { + title: 'NextJS', + href: '/guides/getting-started/tutorials/with-nextjs', + description: + 'Learn how to build a user management app with NextJS and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/nextjs-icon', + }, + { + title: 'React', + href: '/guides/getting-started/tutorials/with-react', + description: + 'Learn how to build a user management app with React and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/react-icon', + }, + { + title: 'Vue 3', + href: '/guides/getting-started/tutorials/with-vue-3', + description: + 'Learn how to build a user management app with Vue 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/vuejs-icon', + }, + { + title: 'Nuxt 3', + href: '/guides/getting-started/tutorials/with-nuxt-3', + description: + 'Learn how to build a user management app with Nuxt 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/nuxt-icon', + }, + { + title: 'Angular', + href: '/guides/getting-started/tutorials/with-angular', + description: + 'Learn how to build a user management app with Nuxt 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/angular-icon', + }, + { + title: 'RedwoodJS', + href: '/guides/getting-started/tutorials/with-redwoodjs', + description: + 'Learn how to build a user management app with Nuxt 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/redwood-icon', + }, + { + title: 'Svelte', + href: '/guides/getting-started/tutorials/with-svelte', + description: + 'Learn how to build a user management app with Nuxt 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/svelte-icon', + }, + { + title: 'SvelteKit', + href: '/guides/getting-started/tutorials/with-sveltekit', + description: + 'Learn how to build a user management app with Nuxt 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/svelte-icon', + }, + { + title: 'Flutter', + href: '/guides/getting-started/tutorials/with-flutter', + description: + 'Learn how to build a user management app with Flutter and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/flutter-icon', + }, + { + title: 'Expo', + href: '/guides/getting-started/tutorials/with-expo', + description: + 'Learn how to build a user management app with React and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/expo-icon', + }, + { + title: 'Ionic React', + href: '/guides/getting-started/tutorials/with-ionic-react', + description: + 'Learn how to build a user management app with React and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/ionic-icon', + }, + { + title: 'Ionic Vue', + href: '/guides/getting-started/tutorials/with-ionic-vue', + description: + 'Learn how to build a user management app with Flutter and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/ionic-icon', + }, + { + title: 'Ionic Angular', + href: '/guides/getting-started/tutorials/with-ionic-angular', + description: + 'Learn how to build a user management app with NextJS and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/ionic-icon', + }, +] + +export const resources = [ + { + title: 'Features', + hasLightIcon: true, + href: '/features', + description: 'A non-exhaustive list of features that Supabase provides for every project.', + }, + { + title: 'Architecture', + hasLightIcon: true, + href: '/architecture', + description: + 'An overview of Supabase\'s architecture and product principles.', + }, +] + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/getting-started/architecture.mdx b/apps/docs/pages/guides/getting-started/architecture.mdx new file mode 100644 index 00000000000..2552c09bcf1 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/architecture.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/architecture.mdx' + +export const meta = { + id: 'architecture', + title: 'Architecture', + description: 'Supabase design and architecture', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/features.mdx b/apps/docs/pages/guides/getting-started/features.mdx new file mode 100644 index 00000000000..b81ad1d6a29 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/features.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/features.mdx' + +export const meta = { + id: 'features', + title: 'Features', + description: 'Supabase features', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/quickstarts/nextjs.mdx b/apps/docs/pages/guides/getting-started/quickstarts/nextjs.mdx new file mode 100644 index 00000000000..25e4b066c09 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/quickstarts/nextjs.mdx @@ -0,0 +1,154 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import StepHikeCompact from '~/components/StepHikeCompact' + +export const meta = { + title: 'Use Supabase with NextJS', + subtitle: 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a NextJS app.', + breadcrumb: 'Framework Quickstarts', +} + + + + + + + [Create a new project](https://app.supabase.com) in the Supabase Dashboard. + + After your project is ready, create a table in your Supabase database using the [SQL Editor](https://app.supabase.com/project/_/sql) in the Dashboard. Use the following SQL statement to create a `countries` table with some sample data. + + + + + + ```sql SQL_EDITOR + -- Create the table + CREATE TABLE countries ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) NOT NULL + ); + -- Insert some sample data into the table + INSERT INTO countries (name) VALUES ('United States'); + INSERT INTO countries (name) VALUES ('Canada'); + INSERT INTO countries (name) VALUES ('Mexico'); + ```` + + + + + + + + + + Create a Next.js app using the `create-next-app` command. + + + + + + ```bash Terminal + npx create-next-app my-app + ``` + + + + + + + + + The fastest way to get started is to use the `supabase-js` client library which provides a convenient interface for working with Supabase from a NextJS app. + + Navigate to the NextJS app and install `supabase-js`. + + + + + + ```bash Terminal + cd my-app && npm install @supabase/supabase-js + ``` + + + + + + + + + In the `/lib` directory of your Next.js app, create a file called `supabaseClient.js` and add the following code to initialize the Supabase client with your [project URL and public API (anon) key](https://app.supabase.com/project/_/settings/api). + + + + + + ```js lib/supabaseClient.js + import { createClient } from '@supabase/supabase-js' + + const supabase = createClient('https://.supabase.co', '') + ``` + + + + + + + + + Use a `getInitialProps` method to fetch the data when the page loads and display the query result as a simple list. + + Replace the existing function in your index file in the `pages` directory with the following code. + + + + + + ```js app/index.js + import { supabase } from './../lib/supabaseClient'; + + function Page({ countries }) { + return ( +
                    + {countries.map((country) => ( +
                  • {country.name}
                  • + ))} +
                  + ); + } + + Page.getInitialProps = async () => { + const { data, error } = await supabase.from('countries').select() + + return { + countries: data + } + } + + export default Page; + ``` + +
                  + +
                  + + + + + Start the app and go to http://localhost:3000 in a browser and you should see the list of countries. + + + + + + ```bash Terminal + npm run dev + ``` + + + + + +
                  + +export const Page = ({ children }) => +export default Page diff --git a/apps/docs/pages/guides/getting-started/quickstarts/nuxtjs.mdx b/apps/docs/pages/guides/getting-started/quickstarts/nuxtjs.mdx new file mode 100644 index 00000000000..366120f35e9 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/quickstarts/nuxtjs.mdx @@ -0,0 +1,148 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import StepHikeCompact from '~/components/StepHikeCompact' + +export const meta = { + title: 'Install Supabase with Nuxt.js', + subtitle: 'Setting up supabase-js client library in a Nuxt.js app.', +} + +The fastest way to get started with supabase and Nuxt.js is to use the supabase-js client library, which provides a convenient interface for working with supabase from a Nuxt.js app. To use supabase-js with Nuxt.js, you can follow these steps: + + + + + + + + Start by creating a new Nuxt.js project if you do not have one set up: + + + + + + ```bash Terminal + npx create-nuxt-app my-project + cd my-project + ``` + + + + + + + + + To install the `@supabase/supabase-js` package, you will need to run the following command: + + + + + + ```bash Terminal + npm install @supabase/supabase-js + ``` + + + + + + + + + And finally we want to save the environment variables in a .env. All we need are the API URL and the anon key that you copied earlier. + + + + + + ```text .env + SUPABASE_URL="YOUR_SUPABASE_URL" + SUPABASE_KEY="YOUR_SUPABASE_ANON_KEY" + ``` + + + + + + + + + Then let's install the only additional dependency: NuxtSupabase. We only need to import NuxtSupabase as a dev dependency: + + + + + + ```bash Terminal + npm install @nuxtjs/supabase --save-dev + ``` + + + + + + + + + To create a table of countries with their timezones, you will first need to create a table in your Supabase database using SQL. You can use the following SQL statement to create a table called countries: + + + + + + ```sql SQL_EDITOR + -- this creates the table + CREATE TABLE countries ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) NOT NULL + ); + -- insert some sample data into new table + INSERT INTO countries (name) VALUES ('United States'); + INSERT INTO countries (name) VALUES ('Canada'); + INSERT INTO countries (name) VALUES ('Mexico'); + ```` + + + + + + + + + Start the dev server by running the following commands: + + + + + + ```bash Terminal + npm run dev + ``` + + + + + + + + + Next, in your Next.js app, create a file called supabase-client.js and add the following code to initialize the Supabase client and set your project's credentials: + + + + + + ```js lib/supabaseClient.js + import { createClient } from '@supabase/supabase-js' + + const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') + ``` + + + + + + + +export const Page = ({ children }) => +export default Page diff --git a/apps/docs/pages/guides/getting-started/quickstarts/reactjs.mdx b/apps/docs/pages/guides/getting-started/quickstarts/reactjs.mdx new file mode 100644 index 00000000000..da4f7431bb3 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/quickstarts/reactjs.mdx @@ -0,0 +1,124 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import StepHikeCompact from '~/components/StepHikeCompact' + +export const meta = { + title: 'Use Supabase with React', + subtitle: 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a React app.', + breadcrumb: 'Framework Quickstarts', +} + + + + + + + [Create a new project](https://app.supabase.com) in the Supabase Dashboard. + + After your project is ready, create a table in your Supabase database using the [SQL Editor](https://app.supabase.com/project/_/sql) in the Dashboard. Use the following SQL statement to create a `countries` table with some sample data. + + + + + + ```sql SQL_EDITOR + -- Create the table + CREATE TABLE countries ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) NOT NULL + ); + -- Insert some sample data into the table + INSERT INTO countries (name) VALUES ('United States'); + INSERT INTO countries (name) VALUES ('Canada'); + INSERT INTO countries (name) VALUES ('Mexico'); + ```` + + + + + + + + + + Create a React app using the `create-react-app` command. + + + + + + ```bash Terminal + npx create-react-app my-app + ``` + + + + + + + + + The fastest way to get started is to use the `supabase-js` client library which provides a convenient interface for working with Supabase from a React app. + + Navigate to the React app and install `supabase-js`. + + + + + + ```bash Terminal + cd my-app && npm install @supabase/supabase-js + ``` + + + + + + + + + In `index.js`, create a Supabase client using your [Project URL and public API (anon) key](https://app.supabase.com/project/_/settings/api). + + Add a `getCountries` function to fetch the data and log the query result to the browser console. + + + + + + ```js src/index.js + import { createClient } from '@supabase/supabase-js' + + const supabase = createClient('https://.supabase.co', '') + + async function getCountries() { + const countries = await supabase.from('countries').select('*') + console.log(countries) + } + + getCountries() + ``` + + + + + + + + + Start the app, go to http://localhost:3000 in a browser, and open the browser console and you should see the list of countries. + + + + + + ```bash Terminal + npm start + ``` + + + + + + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx new file mode 100644 index 00000000000..a0770366dff --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-angular.mdx' + +export const meta = { + id: 'with-angular', + title: 'Quickstart: Angular', + description: 'Learn how to use Supabase in your Angular App.', + sidebar_label: 'Angular', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-expo.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-expo.mdx new file mode 100644 index 00000000000..77544c71214 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-expo.mdx @@ -0,0 +1,19 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-expo.mdx' + +export const meta = { + id: 'with-expo', + title: 'Quickstart: Expo', + description: 'Learn how to use Supabase in your React Native App.', + sidebar_label: 'Expo', + hide_table_of_contents: false, +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx new file mode 100644 index 00000000000..67bb214af51 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-flutter.mdx' + +export const meta = { + id: 'with-flutter', + title: 'Quickstart: Flutter', + description: 'Learn how to use Supabase in your Flutter App.', + sidebar_label: 'Flutter', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-ionic-angular.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-angular.mdx new file mode 100644 index 00000000000..a136b57b95b --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-angular.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-ionic-angular.mdx' + +export const meta = { + id: 'with-ionic-angular', + title: 'Quickstart: Ionic Angular', + description: 'Learn how to use Supabase in your Ionic Angular App.', + sidebar_label: 'Ionic Angular', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-ionic-react.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-react.mdx new file mode 100644 index 00000000000..56e9f2af33a --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-react.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-ionic-react.mdx' + +export const meta = { + id: 'with-ionic-react', + title: 'Quickstart: Ionic React', + description: 'Learn how to use Supabase in your Ionic React App.', + sidebar_label: 'Ionic React', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-ionic-vue.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-vue.mdx new file mode 100644 index 00000000000..bbc32e339d4 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-vue.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-ionic-vue.mdx' + +export const meta = { + id: 'with-ionic-vue', + title: 'Quickstart: Ionic Vue', + description: 'Learn how to use Supabase in your Ionic Vue App.', + sidebar_label: 'Ionic Vue', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx new file mode 100644 index 00000000000..77564737ca7 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import OldContent from '~/pages/guides/with-nextjs.mdx' + +export const meta = { + id: 'with-nextjs', + title: 'Quickstart: Next.js', + description: 'Learn how to use Supabase in your Next App.', + sidebar_label: 'Next.js', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return OldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx new file mode 100644 index 00000000000..f5f452b09e7 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-nuxt-3.mdx' + +export const meta = { + id: 'with-nuxt-3', + title: 'Quickstart: Nuxt 3', + description: 'Learn how to use Supabase in your Nuxt 3 App.', + sidebar_label: 'Nuxt 3', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx new file mode 100644 index 00000000000..58e435bab29 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-react.mdx' + +export const meta = { + id: 'with-react', + title: 'Quickstart: React', + description: 'Learn how to use Supabase in your React App.', + sidebar_label: 'React', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx new file mode 100644 index 00000000000..1d044ed13f5 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-redwoodjs.mdx' + +export const meta = { + id: 'with-redwoodjs', + title: 'Quickstart: RedwoodJS', + description: 'Learn how to use Supabase in your RedwoodJS App.', + sidebar_label: 'RedwoodJS', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx new file mode 100644 index 00000000000..f03f73a8e93 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-solidjs.mdx' + +export const meta = { + id: 'with-solidjs', + title: 'Quickstart: SolidJS', + description: 'Learn how to use Supabase in your SolidJS App.', + sidebar_label: 'SolidJS', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx new file mode 100644 index 00000000000..349e7af543a --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-svelte.mdx' + +export const meta = { + id: 'with-svelte', + title: 'Quickstart: Svelte', + description: 'Learn how to use Supabase in your Svelte App.', + sidebar_label: 'Svelte', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx new file mode 100644 index 00000000000..1ead93e6cb5 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-sveltekit.mdx' + +export const meta = { + id: 'with-sveltekit', + title: 'Quickstart: SvelteKit', + description: 'Learn how to use Supabase in your SvelteKit App.', + sidebar_label: 'SvelteKit', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx new file mode 100644 index 00000000000..781137f6ed3 --- /dev/null +++ b/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/with-vue-3.mdx' + +export const meta = { + id: 'with-vue-3', + title: 'Quickstart: Vue 3', + description: 'Learn how to use Supabase in your Vue 3 App.', + sidebar_label: 'Vue 3', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/hosting/overview.mdx b/apps/docs/pages/guides/hosting/overview.mdx index 3d6fa1ff753..51e618c4d31 100644 --- a/apps/docs/pages/guides/hosting/overview.mdx +++ b/apps/docs/pages/guides/hosting/overview.mdx @@ -64,7 +64,7 @@ create extension if not exists pgjwt with schema extensions; ##### `uuid-ossp` -For UUID functions, required for PostgreSQL <13. +For UUID functions, required for PostgreSQL `<13`. ##### `pgcrypto` and `pgjwt` diff --git a/apps/docs/pages/guides/integrations.mdx b/apps/docs/pages/guides/integrations.mdx new file mode 100644 index 00000000000..f4167b280a1 --- /dev/null +++ b/apps/docs/pages/guides/integrations.mdx @@ -0,0 +1,40 @@ +import Layout from '~/layouts/DefaultLayout' +import Link from 'next/link' +import { GlassPanel } from 'ui' +import { integrations } from '~/components/Navigation/NavigationMenu/NavigationMenu.constants' + +export const meta = { + title: 'Integrations', +} + +Explore a variety of integrations from Supabase partners. Need a different integration? Find a [Supabase expert](https://supabase.com/partners/experts) to help build your next idea. + +
                  + {integrations.items.map((item) => ( +
                  +

                  {item.name}

                  +
                  + {item.items.map((integration) => ( + + + } + > + {integration.description} + + + + + ))} + +
                  + +
                  + ))} +
                  + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/integrations/keyri.mdx b/apps/docs/pages/guides/integrations/keyri.mdx index fdbf231660c..3956655167b 100644 --- a/apps/docs/pages/guides/integrations/keyri.mdx +++ b/apps/docs/pages/guides/integrations/keyri.mdx @@ -13,7 +13,7 @@ Configuration is split into Web and Mobile components. On web, the Keyri QR Widg # Sign up for Keyri -First make a free account on the Keyri dashboard (). On Add Your Application, set a name and input the domain on which your app will eventually be deployed. You can create multiple application in Keyri to account for your development, staging, and production environments +First make a free account on the Keyri dashboard ([https://app.keyri.com](https://app.keyri.com)). On Add Your Application, set a name and input the domain on which your app will eventually be deployed. You can create multiple application in Keyri to account for your development, staging, and production environments ![](https://archbee-image-uploads.s3.amazonaws.com/FQ4YmCkDokMJylbTAsoOR/HvTIja3KfgKUIMiNVKAqP_screen-shot-2022-10-13-at-21524-pm.png) diff --git a/apps/docs/pages/guides/integrations/sequin.mdx b/apps/docs/pages/guides/integrations/sequin.mdx index 54f62b477c4..efdb578c775 100644 --- a/apps/docs/pages/guides/integrations/sequin.mdx +++ b/apps/docs/pages/guides/integrations/sequin.mdx @@ -81,7 +81,7 @@ You'll use this client to query for data in your synced schema. ## Resources -- [Sequin](https://sequin.io*) official website. +- [Sequin](https://sequin.io) official website. - [Sequin Console](https://app.sequin.io*). - [Sequin](https://docs.sequin.io/welcome) documentation. - [Sequin + Supabase + Stripe Tutorial](https://github.com/sequin-io/build-a-saas-with-next-js-supabase-stripe-and-sequin) diff --git a/apps/docs/pages/guides/integrations/snaplet.mdx b/apps/docs/pages/guides/integrations/snaplet.mdx index b3513fcaa7e..6f541f8253b 100644 --- a/apps/docs/pages/guides/integrations/snaplet.mdx +++ b/apps/docs/pages/guides/integrations/snaplet.mdx @@ -32,7 +32,7 @@ Follow along in the video below as the founder of Snaplet, Peter Pistorius, take 2. **A development Supabase project's connection string:** Same steps as above, but a different project/environment 3. **A read-only role** in Production (recommended): This can be done by running the following statements on Supabase via `Organization > SQL Editor > + New Query` -> To create a read-only role across all schemas you can checkout the Snaplet [docs](https://docs.snaplet.dev/postgresql/create-read-only-role) +> To create a read-only role across all schemas you can checkout the Snaplet [docs](https://docs.snaplet.dev/guides/postgresql/#create-a-read-only-role) 4. **Superuser access** for the development project. This can be done in Supabase via `Organization > SQL Editor > + New Query` and running this statement: `ALTER USER postgres WITH superuser;` diff --git a/apps/docs/pages/guides/integrations/stytch.mdx b/apps/docs/pages/guides/integrations/stytch.mdx index 0b6ceee6c4f..2ff0f691ae2 100644 --- a/apps/docs/pages/guides/integrations/stytch.mdx +++ b/apps/docs/pages/guides/integrations/stytch.mdx @@ -558,7 +558,7 @@ We now have a basic expense tracker application powered by Stytch, Supabase, and In this optional step, we will extend our application to allow users to login with Google One Tap in addition to Email magic links. -You will need to follow the first four steps of [this guide](https://stytch.com/docs/one-tap-guide?utm_source=supabase&utm_medium=guide) to create a Google project, set up Google OAuth consent, and configure credentials and redirect URLs. +You will need to follow the first four steps of [this guide](https://stytch.com/docs/oauth?utm_source=supabase&utm_medium=guide#guides_google-sdk) to create a Google project, set up Google OAuth consent, and configure credentials and redirect URLs. First, we will make some adjustments to the `StytchLogin` component. We will update the configuration, so that it uses both Google OAuth, and Email magic links. diff --git a/apps/docs/pages/guides/hosting/platform.mdx b/apps/docs/pages/guides/platform.mdx similarity index 100% rename from apps/docs/pages/guides/hosting/platform.mdx rename to apps/docs/pages/guides/platform.mdx diff --git a/apps/docs/pages/guides/platform/custom-domains.mdx b/apps/docs/pages/guides/platform/custom-domains.mdx index 0ff3d80bb49..2690eb5f23b 100644 --- a/apps/docs/pages/guides/platform/custom-domains.mdx +++ b/apps/docs/pages/guides/platform/custom-domains.mdx @@ -18,12 +18,12 @@ To get started: 1. [Install](/docs/guides/cli) the Supabase CLI 1.11.3+. 1. [Log in](/docs/guides/cli/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI. -1. Ensure that you have [Owner or Admin permissions](/docs/guides/hosting/platform#manage-team-members) for the project you'd like to set up a custom domain for. +1. Ensure that you have [Owner or Admin permissions](/docs/guides/platform#manage-team-members) for the project you'd like to set up a custom domain for. 1. Enable the Custom Domains add-on in the Billing page of the Dashboard. ## Configure a Custom Domain -This example assumes your Supabase project is `foobar` with a corresponding API URL `foobarbaz.supabase.co` and configures a custom domain at `api.example.com`. +This example assumes your Supabase project is `foobarbaz` with a corresponding API URL `foobarbaz.supabase.co` and configures a custom domain at `api.example.com`. ### Configure a CNAME @@ -34,7 +34,7 @@ Set up a CNAME record for `api.example.com`, resolving to `foobarbaz.supabase.co Use the `create` subcommand of the CLI to notify Supabase of your domain and retrieve TXT verification records: ```bash -supabase domains create --project-ref foobar --custom-hostname api.example.com --experimental +supabase domains create --project-ref foobarbaz --custom-hostname api.example.com --experimental ``` The output of the `create` command includes two TXT records[^1] you will need to set up, in order to verify your control over the domain in question, @@ -62,7 +62,7 @@ You might need to wait a few minutes before your updated DNS records are propaga ### Activate your domain The final activation step reconfigures your project to start serving traffic on your custom domain (`api.example.com`). -The auth service, in particular, will no longer work with the original URL (`foobar.supabase.co`). +The auth service, in particular, will no longer work with the original URL (`foobarbaz.supabase.co`). As such, it is recommended that you schedule a downtime window of 20-30 minutes, depending on the complexity of your project, to update all the services that need to know about your custom domain: - any client code (e.g., frontends, mobile apps) @@ -85,9 +85,63 @@ supabase domains delete --project-ref foobarbaz --experimental As with the final activation stage of the process for setting up a custom domain, you'll need to update any references in your client code and OAuth providers from the custom domain to the Supabase-provisioned endpoints. +## Vanity Subdomains + + + +Vanity Subdomains are currently in beta, and are being slowly made available to projects. [Contact Support](https://app.supabase.com/support/new) if you'd like to request early access. + + + +Vanity Subdomains allow you to present a basic branded experience, compared to custom domains. They allow you to host your services at a custom subdomain on Supabase (e.g., `my-example-brand.supabase.co`) instead of the default, randomly-assigned `foobarbaz.supabase.co`. + +To get started: + +1. [Install](/docs/guides/cli) the Supabase CLI 1.22.0+. +1. [Log in](/docs/guides/cli/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI. +1. Ensure that you have [Owner or Admin permissions](/docs/guides/hosting/platform#manage-team-members) for the project you'd like to set up a vanity subdomain for. +1. Ensure that your project has a paid subscription (Pro/Pay as you go/Enterprise tier) in the [Billing page of the Dashboard](https://app.supabase.com/project/_/settings/billing/subscription). + +## Configure a Vanity Subdomain + +This example assumes your Supabase project is `foobarbaz` with a corresponding API URL `foobarbaz.supabase.co` and configures a vanity subdomain at `my-example-brand.supabase.co`. + +### Check subdomain availability + +Use the `check-availability` subcommand of the CLI to check if your desired subdomain is available for use: + +```bash +supabase vanity-subdomains --project-ref foobarbaz check-availability --desired-subdomain my-example-brand --experimental +``` + +### Activate a subdomain + +Once you've chosen an available subdomain, you can reconfigure your Supabase project to start serving traffic on the vanity subdomain (`my-example-brand.supabase.co`). +The auth service, in particular, will no longer work with the original URL (`foobarbaz.supabase.co`). +As such, it is recommended that you schedule a downtime window of 20-30 minutes, depending on the complexity of your project, to update all the services that need to know about your vanity subdomain: + +- any client code (e.g., frontends, mobile apps) +- any OAuth providers (e.g., Google, GitHub) + +The `activate` subcommand can be used to initiate the activation: + +```bash +supabase vanity-subdomains --project-ref fwmssjhjgszhnavvqxnt check-availability --desired-subdomain my-example-subdomain --experimental +``` + +## Remove a Vanity Subdomain + +If you have a vanity subdomain (`my-example-brand.supabase.co`) set up for your Supabase project (ref `foobarbaz`, with assigned endpoints at `foobarbaz.supabase.co`), and would like to go back to using the Supabase-provisioned endpoints (`foobarbaz.supabase.co`), you can use the `delete` subcommand: + +```bash +supabase vanity-subdomains delete --project-ref foobarbaz --experimental +``` + +As with the final activation stage of the process for setting up a vanity subdomain, you'll need to update any references in your client code and OAuth providers from the vanity subdomain to the Supabase-provisioned endpoints. + ## Limitations -Edge functions do not honor the custom domain setting and they still have to be invoked via the `foobarbaz.supabase.co` domain. +Edge functions do not honor the custom domain or the vanity subdomain setting and they still have to be invoked via the `foobarbaz.supabase.co` domain. export const Page = ({ children }) => diff --git a/apps/docs/pages/guides/platform/logs.mdx b/apps/docs/pages/guides/platform/logs.mdx index 995683676ed..0754840cd7d 100644 --- a/apps/docs/pages/guides/platform/logs.mdx +++ b/apps/docs/pages/guides/platform/logs.mdx @@ -19,9 +19,7 @@ This is on the roadmap and you can follow the progress in the [Logflare reposito Supabase provides a logging interface specific to each product. You can use simple regular expressions for keywords and patterns to search log event messages. You can also export and download the log events matching your query as a spreadsheet. - +{/* */} +{/* */} ![Without Unnesting](/docs/img/unnesting-none.png) diff --git a/apps/docs/pages/guides/resources.mdx b/apps/docs/pages/guides/resources.mdx new file mode 100644 index 00000000000..7f4d00e107e --- /dev/null +++ b/apps/docs/pages/guides/resources.mdx @@ -0,0 +1,139 @@ +import Layout from '~/layouts/DefaultLayout' +import Link from 'next/link' +import { GlassPanel, IconPanel, Button, IconChevronRight } from 'ui' + +export const meta = { + id: 'resources', + title: 'Resources', + description: 'Resources for getting started building with Supabase.', + sidebar_label: 'Overview', +} + +
                  + +
                  + +
                  + {resources.map((resource) => { + return ( + + + + {resource.description} + + + + ) + +})} + +
                  + +
                  + +
                  +
                  + +### Migrate to Supabase + +
                  + +
                  + {migrationGuides.map((product) => { + return ( + + + + {product.description} + + + + ) + +})} + +
                  + +
                  + +
                  + +
                  + + ### Supabase CLI + + Develop your project locally, manage your Supabase projects, handle database migrations, CI/CD workflows, and generate types from your database schema, all from the comfort of your Terminal. + +[Learn more](/docs/guides/resources/supabase-cli) + +
                  + +
                  + + ### Self-Hosting Supabase + + We're happy to host your next big thing, but we also make it easy to host Supabase on your own. We use Docker to help make setup as painless as possible. + +[Learn more](/docs/guides/resources/self-hosting) + +
                  + +
                  + +{/* end of container */} + +
                  + +export const resources = [ + { + title: 'Examples', + hasLightIcon: true, + href: '/guides/resources/examples', + description: 'Official GitHub examples, curated content from the community, and more.', + }, + { + title: 'Glossary', + hasLightIcon: true, + href: '/guides/resources/glossary', + description: 'Definitions for terminology and acronyms used in the Supabase documentation.', + }, +] + +export const migrationGuides = [ + { + title: 'Firebase Auth', + icon: '/docs/img/icons/firebase-icon', + href: '/guides/migrations/firebase-auth', + description: 'Move your auth users from a Firebase project to a Supabase project.', + }, + { + title: 'Firebase Data', + icon: '/docs/img/icons/firebase-icon', + href: '/guides/migrations/firestore-data', + description: 'Migrate the contents of a Firestore collection to a single PostgreSQL table.', + }, + { + title: 'Firebase Storage', + icon: '/docs/img/icons/firebase-icon', + href: '/guides/migrations/firebase-storage', + description: 'Convert your Firebase Storage files to Supabase Storage.', + }, + { + title: 'Heroku', + icon: '/docs/img/icons/heroku-icon', + href: '/guides/migrations/heroku', + description: 'Migrate your Heroku Postgres database to Supabase.', + }, +] + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/resources/examples.mdx b/apps/docs/pages/guides/resources/examples.mdx new file mode 100644 index 00000000000..7faddafc507 --- /dev/null +++ b/apps/docs/pages/guides/resources/examples.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/examples.mdx' + +export const meta = { + id: 'examples', + title: 'Examples and Resources', + description: 'Examples you can use to get started with Supabase', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/resources/glossary.mdx b/apps/docs/pages/guides/resources/glossary.mdx new file mode 100755 index 00000000000..75c7d5efa1c --- /dev/null +++ b/apps/docs/pages/guides/resources/glossary.mdx @@ -0,0 +1,124 @@ +import Layout from '~/layouts/DefaultGuideLayout' + +export const meta = { + id: 'glossary', + title: 'Glossary', + description: 'Definitions for terminology and acronyms used in the Supabase documentation.', +} + +Definitions for terminology and acronyms used in the Supabase documentation. + +## Access token + +An access token is a short-lived (usually no more than 1 hour) token that authorizes a client to access resources on a server. It comes in the form of a [JSON Web Token (JWT)](#json-web-token-jwt). + +## Authentication + +Authentication (often abbreviated authn.) is the process of verifying the identity of a user. Verification of the identity of a user can happen in multiple ways: + +1. Asking users for something they know. For example: password, passphrase. +2. Checking that users have access to something they own. For example: an email address, a phone number, a hardware key, recovery codes. +3. Confirming that users have some biological features. For example: a fingerprint, a certain facial structure, an iris print. + +## Authenticator app + +An authenticator app generates time-based one-time passwords (TOTPs). These passwords are generated based off a long and difficult to guess secret string. The secret is initially passed to the application by scanning a QR code. + +## Authorization + +Authorization (often abbreviated authz.) is the process of verifying if a certain identity is allowed to access resources. Authorization often occurs by verifying an access token. + +## Identity provider + +An identity provider is software or service that allows third-party applications to identify users without the exchange of passwords. Social login and enterprise single-sign on won't be possible without identity providers. + +Social login platforms typically use the OAuth protocol, while enterprise single-sign on is based on the OIDC or SAML protocols. + +## JSON Web Token (JWT) + +A [JSON Web Token](https://jwt.io/introduction) is a type of data structure, represented as a string, that usually contains identity and authorization information about a user. It encodes information about its lifetime and is signed with cryptographic key making it tamper resistant. + +Access tokens are JWTs and by inspecting the information they contain you can allow or deny access to resources. Row level security policies are based on the information present in JWTs. + +## JWT signing secret + +JWTs issued by Supabase are signed using the HMAC-SHA256 algorithm. The secret key used in the signing is called the JWT signing secret. You should not share this secret with someone or some thing you don't trust, nor should you post it publicly. Anyone with access to the secret can create arbitrary JWTs. + +## Multi-factor authentication (MFA or 2FA) + +Multi-factor authentication is the process of authenticating a user's identity by using a combination of factors: something users know, something users have or something they are. + +## Nonce + +Nonce means number used once. In reality though, it is a unique and difficult to guess string used to either initialize a protocol or algorithm securely, or detect abuse in various forms of replay attacks. + +## OAuth + +OAuth is a protocol allowing third-party applications to request and receive authorization from their users. It is typically used to implement social login, and serves as a base for enterprise single-sign on in the OIDC protocol. Applications can request various level of access, and this includes some user identification information at least (name, email address, user identification number). + +## OIDC + +OIDC stands for OpenID Connect and is a protocol that enables single-sign on for enterprises. OIDC is based on modern web technologies such as OAuth and JSON Web Tokens. It is commonly used instead of the older SAML protocol. + +## One-time password (OTP) + +A one-time password is a short, randomly generated and difficult to guess password or code that is sent to a device (like a phone number) or generated by a device or application. + +## Password hashing function + +Password hashing functions are specially-designed algorithms that allow web servers to verify a password without storing it as-is. Unlike other difficult to guess strings generated from secure random number generators, passwords are picked by users and often are easy to guess by attackers. These algorithms slow down and make it very costly for attackers to guess passwords. + +There are three generally accepted password hashing functions: Argon2, bcrypt and scrypt. + +## Password strength + +Password strength is a measurement of how difficult a password is to guess. Simple measurement includes calculating the number of possibilities given the types of characters used in the password. For example a password of only letters has fewer variations than ones with letters and digits. Better measurements include strategies such as looking for similarity to words, phrases or already known passwords. + +## PKCE + +Proof Key for Code Exchange is an extension to the OAuth protocol that enables secure exchange of refresh and access tokens between an application (web app, single-page app or mobile app) and the authorization server. It is used in places where the exchange of the refresh and access token may be intercepted by third parties such as other applications running in the operating system. This is a common problem on mobile devices where the operating system may hand out URLs to other applications. This can sometimes be also exploited in single-page apps too. + +## Provider refresh token + +A provider refresh token is a refresh token issued by a third-party identity provider which can be used to refresh the provider token returned. + +## Provider tokens + +A provider token is a long-lived token issued by a third-party identity provider. These are issued by social login services (e.g., Google, Twitter, Apple, Microsoft) and uniquely identify a user on those platforms. + +## Refresh token + +A refresh token is a long-lived (in most cases with an indefinite lifetime) token that is meant to be stored and exchanged for a new refresh and access tokens only once. Once a refresh token is exchanged it becomes invalid, and can't be exchanged again. In practice, though, a refresh token can be exchanged multiple times but in a short time window. + +## Refresh token flow + +The refresh token flow is a mechanism that issues a new refresh and access token on the basis of a valid refresh token. It is used to extend authorization access for an application. An application that is being constantly used will invoke the refresh token flow just before the access token expires. + +## Replay attack + +A replay attack is when sensitive information is stolen or intercepted by attackers who then attempt to use it again (thus replay) in an effort to compromise a system. Commonly replay attacks can be mitigated with the proper use of nonces. + +## Row level security policies (RLS) + +Row level security policies are special objects within the Postgres database that limit the available operations or data returned to clients. RLS policies use information contained in a JWT to identify users and the actions and data they are allowed to perform or view. + +## SAML + +SAML stands for Security Assertion Markup Language and is a protocol that enables single-sign on for enterprises. SAML was invented in the early 2000s and is based on XML technology. It is the de-facto standard for enabling single-sign on for enterprises, although the more recent OIDC (OpenID Connect) protocol is gaining popularity. + +## Session + +A session or authentication session is the concept that binds a verified user identity to a web browser. A session usually is long-lived, and can be terminated by the user logging out. An access and refresh token pair represent a session in the browser, and they are stored in local storage or as cookies. + +## Single-sign on (SSO) + +Single-sign on allows enterprises to centrally manage accounts and access to applications. They use identity provider software or services to organize employee information in directories and connect those accounts with applications via OIDC or SAML protocols. + +## Time-based one-time password (TOTP) + +A time-based one-time password is a one-time password generated at regular time intervals from a secret, usually from an application in a mobile device (e.g., Google Authenticator, 1Password). + + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/resources/migrating-to-supabase.mdx b/apps/docs/pages/guides/resources/migrating-to-supabase.mdx new file mode 100644 index 00000000000..8f96cc42434 --- /dev/null +++ b/apps/docs/pages/guides/resources/migrating-to-supabase.mdx @@ -0,0 +1,13 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/hosting/overview.mdx' + +export const meta = { + title: 'Migrating to Supabase', + description: 'Learn all about migrating to Supabase from other backend providers', +} + +Hello world + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-auth.mdx b/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-auth.mdx new file mode 100644 index 00000000000..2e2cd1181ec --- /dev/null +++ b/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-auth.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/migrations/firebase-auth.mdx' + +export const meta = { + id: 'firebase-auth', + title: 'Firebase Auth Migration', + description: 'Migrate Firebase auth users to a Supabase project.', + sidebar_label: 'Firebase Auth', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-data.mdx b/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-data.mdx new file mode 100644 index 00000000000..15f6b257b0a --- /dev/null +++ b/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-data.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/migrations/firestore-data.mdx' + +export const meta = { + id: 'firestore-data', + title: 'Firestore Data Migration', + description: 'Migrate your Firebase Firestore database to a Supabase Postgres database.', + sidebar_label: 'Firestore Data', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-storage.mdx b/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-storage.mdx new file mode 100644 index 00000000000..b093df61ab9 --- /dev/null +++ b/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-storage.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/migrations/firebase-storage.mdx' + +export const meta = { + id: 'firebase-storage', + title: 'Firebase Storage Migration', + description: 'Migrate Firebase Storage files to Supabase Storage.', + sidebar_label: 'Firebase Storage', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/resources/migrating-to-supabase/heroku.mdx b/apps/docs/pages/guides/resources/migrating-to-supabase/heroku.mdx new file mode 100644 index 00000000000..2bf4004f95a --- /dev/null +++ b/apps/docs/pages/guides/resources/migrating-to-supabase/heroku.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/migrations/heroku.mdx' + +export const meta = { + id: 'heroku', + title: 'Migrate from Heroku to Supabase', + description: 'Migrate your Heroku Postgres database to Supabase.', + sidebar_label: 'Heroku', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/resources/self-hosting.mdx b/apps/docs/pages/guides/resources/self-hosting.mdx new file mode 100644 index 00000000000..37e118985ee --- /dev/null +++ b/apps/docs/pages/guides/resources/self-hosting.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/hosting/overview.mdx' + +export const meta = { + id: 'overview', + title: 'Self Hosting', + sidebar_label: 'Overview', + description: 'Getting started with Self Hosting.', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/resources/self-hosting/docker.mdx b/apps/docs/pages/guides/resources/self-hosting/docker.mdx new file mode 100644 index 00000000000..b310833c98b --- /dev/null +++ b/apps/docs/pages/guides/resources/self-hosting/docker.mdx @@ -0,0 +1,18 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/hosting/docker.mdx' + +export const meta = { + id: 'docker', + title: 'Self-hosting with Docker', + description: 'How to configure and deploy Supabase.', + sidebar_label: 'Docker', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/resources/supabase-cli.mdx b/apps/docs/pages/guides/resources/supabase-cli.mdx new file mode 100644 index 00000000000..86feaed2fb1 --- /dev/null +++ b/apps/docs/pages/guides/resources/supabase-cli.mdx @@ -0,0 +1,20 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/cli.mdx' + +export const meta = { + id: 'cli', + title: 'Supabase CLI', + description: + 'The Supabase CLI provides tools to develop your project locally and deploy to the Supabase Platform.', + sidebar_label: 'Overview', + toc_max_heading_level: 2, +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/resources/supabase-cli/local-development.mdx b/apps/docs/pages/guides/resources/supabase-cli/local-development.mdx new file mode 100644 index 00000000000..9e7243950f1 --- /dev/null +++ b/apps/docs/pages/guides/resources/supabase-cli/local-development.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/cli/local-development.mdx' + +export const meta = { + id: 'local-development', + title: 'Local Development', + description: 'How to use Supabase on your local development machine.', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/resources/supabase-cli/managing-enviroments.mdx b/apps/docs/pages/guides/resources/supabase-cli/managing-enviroments.mdx new file mode 100644 index 00000000000..cf3c92956fa --- /dev/null +++ b/apps/docs/pages/guides/resources/supabase-cli/managing-enviroments.mdx @@ -0,0 +1,17 @@ +import Layout from '~/layouts/DefaultGuideLayout' +import oldContent from '~/pages/guides/cli/managing-environments.mdx' + +export const meta = { + id: 'managing-environments', + title: 'Managing Environments', + description: 'How to deploy Supabase schema changes with a CI / CD pipeline.', +} + +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return oldContent() + } + return +} + +export default Page diff --git a/apps/docs/pages/guides/storage/quickstart.mdx b/apps/docs/pages/guides/storage/quickstart.mdx index 20b99aee99f..7309f2730af 100644 --- a/apps/docs/pages/guides/storage/quickstart.mdx +++ b/apps/docs/pages/guides/storage/quickstart.mdx @@ -7,7 +7,7 @@ export const meta = { sidebar_label: 'Quickstart', } -This guide shows the basic functionality of Supabase Storage. Find a full [example application on GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management) you can deploy yourself. +This guide shows the basic functionality of Supabase Storage. Find a full [example application on GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management) or deploy it with Vercel for a preview: [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fsupabase%2Fsupabase%2Ftree%2Fmaster%2Fexamples%2Fuser-management%2Fnextjs-ts-user-management&project-name=supabase-user-management&repository-name=supabase-user-management&demo-title=Supabase%20User%20Management&demo-description=An%20example%20web%20app%20using%20Supabase%20and%20Next.js&demo-url=https%3A%2F%2Fsupabase-nextjs-ts-user-management.vercel.app&demo-image=https%3A%2F%2Fi.imgur.com%2FZ3HkQqe.png&integration-ids=oac_jUduyjQgOyzev1fjrW83NYOv&external-id=nextjs-user-management) diff --git a/apps/docs/pages/guides/tutorials.mdx b/apps/docs/pages/guides/tutorials.mdx new file mode 100644 index 00000000000..39f553feea8 --- /dev/null +++ b/apps/docs/pages/guides/tutorials.mdx @@ -0,0 +1,159 @@ +import Layout from '~/layouts/DefaultLayout' +import Link from 'next/link' +import { GlassPanel } from 'ui' + +export const meta = { + title: 'Tutorials', +} + +### Webapps + +
                  + {webapps.map((item) => { + return ( + + + + {item.description} + + + + ) + })} +
                  + +### Mobile + +
                  + {mobile.map((item) => { + return ( + + + + {item.description} + + + + ) + })} +
                  + +### Low code + +
                  + {lowCode.map((item) => { + return ( + + + + {item.description} + + + + ) + })} +
                  + +export const webapps = [ + { + title: 'NextJS', + href: '/guides/tutorials/with-nextjs', + description: + 'Learn how to build a user management app with NextJS and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/nextjs-icon', + }, + { + title: 'React', + href: '/guides/tutorials/with-react', + description: + 'Learn how to build a user management app with React and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/react-icon', + }, + { + title: 'Vue 3', + href: '/guides/tutorials/with-vue-3', + description: + 'Learn how to build a user management app with Vue 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/vuejs-icon', + }, + { + title: 'Nuxt 3', + href: '/guides/tutorials/with-nuxt-3', + description: + 'Learn how to build a user management app with Nuxt 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/nuxt-icon', + }, + { + title: 'Anglular', + href: '/guides/tutorials/with-angular', + description: + 'Learn how to build a user management app with Nuxt 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/angular-icon', + }, + { + title: 'RedwoodJS', + href: '/guides/tutorials/with-redwoodjs', + description: + 'Learn how to build a user management app with Nuxt 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/redwood-icon', + }, + { + title: 'Svelte', + href: '/guides/tutorials/with-svelte', + description: + 'Learn how to build a user management app with Nuxt 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/svelte-icon', + }, + { + title: 'SvelteKit', + href: '/guides/tutorials/with-sveltekit', + description: + 'Learn how to build a user management app with Nuxt 3 and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/svelte-icon', + }, +] + +export const mobile = [ + { + title: 'Flutter', + href: '/guides/tutorials/with-flutter', + description: + 'Learn how to build a user management app with Flutter and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/flutter-icon', + }, + { + title: 'Expo', + href: '/guides/tutorials/with-expo', + description: + 'Learn how to build a user management app with React and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/expo-icon', + }, +] + +export const lowCode = [ + { + title: 'Ionic React', + href: '/guides/tutorials/with-ionic-react', + description: + 'Learn how to build a user management app with React and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/ionic-icon', + }, + { + title: 'Ionic Vue', + href: '/guides/tutorials/with-ionic-vue', + description: + 'Learn how to build a user management app with Flutter and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/ionic-icon', + }, + { + title: 'Ionic Angular', + href: '/guides/tutorials/with-ionic-angular', + description: + 'Learn how to build a user management app with NextJS and Supabase Database, Auth, and Storage functionality.', + icon: '/docs/img/icons/ionic-icon', + }, +] + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-redwoodjs.mdx b/apps/docs/pages/guides/with-redwoodjs.mdx index 163972e5a9f..cae8504a010 100644 --- a/apps/docs/pages/guides/with-redwoodjs.mdx +++ b/apps/docs/pages/guides/with-redwoodjs.mdx @@ -44,26 +44,26 @@ Note: For RedwoodJS apps, port will be 8910 If you get stuck at any point, take a look at [this repo](https://github.com/redwoodjs/redwoodjs-supabase-quickstart). - +{/* If you want to do it yourself, let's get started:` */} ## About RedwoodJS @@ -213,7 +213,7 @@ Let's start building the RedwoodJS app from scratch. -RedwoodJS requires Node.js (>=14.x <=16.x) and Yarn (>=1.15). +RedwoodJS requires Node.js `>= 14.x <= 16.x` and Yarn `>= 1.15`. diff --git a/apps/docs/pages/index.mdx b/apps/docs/pages/index.mdx index bb2537b2a48..19433105df3 100644 --- a/apps/docs/pages/index.mdx +++ b/apps/docs/pages/index.mdx @@ -1,10 +1,15 @@ import Layout from '~/layouts/DefaultGuideLayout' +import NewContent from '~/pages/new/index.mdx' export const meta = { id: 'introduction', title: 'Introduction', description: 'Introduction to Supabase', - hide_table_of_contents: true, + hide_table_of_contents: false, +} + +export function CheckDoc() { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') return NewContent } Supabase is an open source Firebase alternative providing all the backend features you need to build a product. @@ -14,7 +19,7 @@ You can use it completely, or just the features you need. ## Learn about features -
                  +
                  -export const Page = ({ children }) => +export const Page = ({ children }) => { + if (process.env.NEXT_PUBLIC_NEW_DOCS === 'true') { + return NewContent() + } + return +} export default Page - diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx index 942fe23e7bb..766c8a04806 100644 --- a/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx +++ b/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx @@ -184,7 +184,7 @@ Now that you understand what JWTs are and where they're used in Supabase, you ca ### Next steps - +{/* */} - [Part Two: Row Level Security](../../learn/auth-deep-dive/auth-row-level-security) - [Part Three: Policies](../../learn/auth-deep-dive/auth-policies) diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx index f53759eea9d..96a643aa696 100644 --- a/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx +++ b/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx @@ -95,7 +95,7 @@ For any support please get in touch at beta at [supabase.com](https://supabase.c - Watch [Part Two: Row Level Security](../../learn/auth-deep-dive/auth-row-level-security) - Watch [Part Three: Policies](../../learn/auth-deep-dive/auth-policies) - Watch [Part Four: GoTrue](../../learn/auth-deep-dive/auth-gotrue) - + {/* */} - Sign up for Supabase: [app.supabase.com](https://app.supabase.com) export const Page = ({ children }) => diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-gotrue.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-gotrue.mdx index 22c50cc66c3..ed9dd72dec7 100644 --- a/apps/docs/pages/learn/auth-deep-dive/auth-gotrue.mdx +++ b/apps/docs/pages/learn/auth-deep-dive/auth-gotrue.mdx @@ -76,7 +76,7 @@ In the next guide we'll be looking at how to setup external OAuth providers: Wat - Watch [Part One: JWTs](../../learn/auth-deep-dive/auth-deep-dive-jwts) - Watch [Part Two: Row Level Security](../../learn/auth-deep-dive/auth-row-level-security) - Watch [Part Three: Policies](../../learn/auth-deep-dive/auth-policies) - + {/* */} - Watch [Part Five: Google Oauth](../../learn/auth-deep-dive/auth-google-oauth) - Sign up for Supabase: [app.supabase.com](https://app.supabase.com) diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx index 34a749de16d..902fbe6f8be 100644 --- a/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx +++ b/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx @@ -168,7 +168,7 @@ You can get as creative as you like with these policies. - Watch [Part One: JWTs](../../learn/auth-deep-dive/auth-deep-dive-jwts) - Watch [Part Two: Row Level Security](../../learn/auth-deep-dive/auth-row-level-security) - + {/* */} - Watch [Part Four: GoTrue](../../learn/auth-deep-dive/auth-gotrue) - Watch [Part Five: Google Oauth](../../learn/auth-deep-dive/auth-google-oauth) - Sign up for Supabase: [app.supabase.com](https://app.supabase.com) diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx index 53fd711ce06..66687b36a7f 100644 --- a/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx +++ b/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx @@ -119,7 +119,7 @@ In the next guide we will look at using Policies in combination with User Accoun ### Next steps - Watch [Part One: JWTs](../../learn/auth-deep-dive/auth-deep-dive-jwts) - + {/* */} - Watch [Part Three: Policies](../../learn/auth-deep-dive/auth-policies) - Watch [Part Four: GoTrue](../../learn/auth-deep-dive/auth-gotrue) - Watch [Part Five: Google Oauth](../../learn/auth-deep-dive/auth-google-oauth) diff --git a/apps/docs/pages/new/auth.mdx b/apps/docs/pages/new/auth.mdx new file mode 100644 index 00000000000..f76a8b46bda --- /dev/null +++ b/apps/docs/pages/new/auth.mdx @@ -0,0 +1,77 @@ +import Layout from '~/layouts/DefaultLayout' +import Link from 'next/link' +// import { useTheme } from 'common/Providers' +import { GlassPanel } from 'ui' + +{/* // export const { isDarkMode } = useTheme() */} + +export const meta = { + title: 'Auth', +} + +## Add and manage email and password, passwordless, OAuth, and mobile logins to your project through a suite of identity providers and APIs. + +### Popular Guides + +
                  + {topArticles.map((item) => { + return ( + + + + {item.description} + + + + )})} + +
                  + +export const topArticles = [ + { + title: 'Enable Captcha Protection', + header: '/docs/img/cards/sample-card-header-4.svg', + href: '/guides/auth/auth-captcha', + description: 'Keep your platform safe from bots and malicious scripts by implementing hCaptcha.', + span: 'col-span-6', + }, + { + title: 'Auth Helpers', + header: '/docs/img/cards/sample-card-header-4.svg', + href: '/guides/auth/auth-helpers', + description: 'A collection of framework-specific utilities for implementing Supabase Auth.', + span: 'col-span-6', + }, + { + title: 'Email Login', + header: '/docs/img/cards/sample-card-header-4.svg', + href: '/guides/auth/auth-email', + description: 'Learn how to add an email and password login flow to your platform.', + }, + { + title: 'Passwordless Login', + header: '/docs/img/cards/sample-card-header-4.svg', + href: '/guides/auth/passwordless-login', + description: 'Learn how to add a login flow so your users can access your platform through SMS or without a password.', + }, + { + title: 'Social Login', + header: '/docs/img/cards/sample-card-header-4.svg', + href: '/guides/auth/social-login', + description: 'Learn how to add a login flow so your users can access your platform through social providers like Apple, Facebook, or Google.', + }, +] + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/new/auth/auth-login.mdx b/apps/docs/pages/new/auth/auth-login.mdx new file mode 100644 index 00000000000..f545f41ecfc --- /dev/null +++ b/apps/docs/pages/new/auth/auth-login.mdx @@ -0,0 +1,25 @@ +import Layout from '~/layouts/tutorials/TutorialLayout' +import Link from 'next/link' +import { GlassPanel } from 'ui' + +export const meta = { + title: 'Auth login', +} + +## Learn how to use Supabase Auth to handle authentication and authorization of your users blah blah i am test text + +Auth0 Universal Login defines your login flow, which is the key feature of an Authorization Server. +Each time a user needs to prove their identity, your applications redirect to Universal Login and Auth0 will do what is needed to guarantee the user's identity. + +By choosing Universal Login, you don't have to do any integration work to handle the various flavors of authentication. You can start off using a simple username and password. +You can also add other features such as social login and multi-factor authentication (MFA). All of this is dynamic and adjustable in real-time without requiring application-level changes because all functionality is driven by the web pages served by the centralized Authentication Server. +Your application will benefit from any improvements Auth0 makes in the login flow without the need for you to change your code. + +Create a consistent, branded login experience by customizing the login page appearance and behavior from the Auth0 Dashboard including the logo and colors. +For more advanced use cases, you can change the code of each page. + +To learn more about the differences between Universal Login and embedded login, read Centralized Universal Login vs. Embedded Login. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/new/index.mdx b/apps/docs/pages/new/index.mdx new file mode 100644 index 00000000000..b17f706beb3 --- /dev/null +++ b/apps/docs/pages/new/index.mdx @@ -0,0 +1,321 @@ +import Layout from '~/layouts/DefaultLayout' +import Link from 'next/link' +import { GlassPanel, IconPanel, Button, IconChevronRight } from 'ui' + +export const meta = { + title: 'Supabase Docs', + description: + 'Supabase is an open source Firebase alternative providing all the backend features you need to build a product.', + subtitle: 'Supabase Developer Documentation and API Reference', +} + +

                  + Supabase is an open source Firebase alternative providing all the backend features you need to + build a product. Choose a quickstart for an overview or dive straight into the different products + and APIs. +

                  + +{/* start container */} + +
                  + +
                  +
                  +
                  + +
                  +

                  Getting Started

                  + + Discover how to set up a database to an app making queries in just a few minutes. + +
                  What you will learn
                  + +
                  +
                  +
                  + +
                  + Setting up a Supabase project and app +
                  +
                  +
                  + +
                  + Adding some sample data to your project +
                  +
                  +
                  + +
                  + Select() from your new database table +
                  +
                  + +
                  +
                  + +
                  +
                  + + + + + + + + + + +
                  +
                  +
                  +
                  + +
                  +
                  + + + +
                  +

                  Ready to make a fully working app?

                  +

                  Follow the step-by-step tutorials.

                  +
                  + +
                  +
                  + +
                  +
                  + + ### Product Documentation + +
                  + +
                  + {products.map((product) => { + return ( + + + + {product.description} + + + + ) + +})} + + {platform.map((product) => { + return ( + + + + {product.description} + + + + ) + +})} + +
                  + +
                  + +
                  + +
                  + + ### Reference Documentation + +
                  + +
                  + {apis.map((product) => { + return ( + + + + {product.description} + + + + ) + +})} + +
                  +
                  + +{/* end of container */} + +
                  + +export const products = [ + { + title: 'Database', + icon: '/docs/img/icons/menu/database', + hasLightIcon: true, + href: '/guides/database', + description: + 'Supabase provides a full Postgres database for every project with Realtime functionality, database backups, extensions, and more.', + span: 'col-span-12 md:col-span-6', + }, + { + title: 'Auth', + icon: '/docs/img/icons/menu/auth', + hasLightIcon: true, + href: '/guides/auth', + description: + 'Add and manage email and password, passwordless, OAuth, and mobile logins to your project through a suite of identity providers and APIs.', + span: 'col-span-12 md:col-span-6', + }, + { + title: 'Storage', + icon: '/docs/img/icons/menu/storage', + hasLightIcon: true, + href: '/guides/storage', + description: + 'Store, organize, transform, and serve large files—fully integrated with your Postgres database with Row Level Security access policies.', + }, + { + title: 'Realtime', + icon: '/docs/img/icons/menu/realtime', + hasLightIcon: true, + href: '/guides/realtime', + description: + 'Listen to database changes, store and sync user states across clients, broadcast data to clients subscribed to a channel, and more.', + }, + { + title: 'Edge Functions', + icon: '/docs/img/icons/menu/functions', + hasLightIcon: true, + href: '/guides/functions', + description: + 'Globally distributed, server-side functions to execute your code closest to your users for the lowest latency.', + }, +] + +export const apis = [ + { + title: 'JavaScript Client Library', + icon: '/docs/img/icons/menu/reference-javascript', + hasLightIcon: true, + href: 'reference/javascript/introduction', + description: 'Official client libraries for JavaScript and TypeScript.', + }, + { + title: 'Flutter Client Library', + icon: '/docs/img/icons/menu/reference-dart', + hasLightIcon: true, + href: 'reference/dart/introduction', + description: 'Official client libraries for Flutter and Dart.', + }, + { + title: 'Management API', + icon: '/docs/img/icons/menu/reference-api', + hasLightIcon: true, + href: 'reference/api/introduction', + description: 'Manage your Supabase projects and organizations programmatically.', + }, + { + title: 'Supabase CLI', + icon: '/docs/img/icons/menu/reference-api', + hasLightIcon: true, + href: 'reference/cli/introduction', + description: + 'Use the CLI to develop your project locally, manage database migrations, and deploy to the Supabase Platform or self-host.', + }, + { + title: 'Self-Hosting Auth', + icon: '/docs/img/icons/menu/reference-auth', + hasLightIcon: true, + href: 'reference/self-hosting-auth/introduction', + description: 'Self-host your own Auth server.', + }, + { + title: 'Self-Hosting Storage', + icon: '/docs/img/icons/menu/reference-storage', + hasLightIcon: true, + href: 'reference/self-hosting-storage/introduction', + description: 'Self-host your own Storage server.', + }, + { + title: 'Self-Hosting Realtime', + icon: '/docs/img/icons/menu/reference-realtime', + hasLightIcon: true, + href: 'reference/self-hosting-realtime/introduction', + description: 'Self-host your own Realtime server.', + }, +] + +export const platform = [ + { + // header: '/docs/img/cards/sample-card-header-3.svg', + title: 'Platform Guides', + icon: '/docs/img/icons/menu/platform', + hasLightIcon: true, + href: 'guides/platform', + description: + 'Learn more about the tools and services powering the Supabase Platform, available add-ons, and how to customize the platform for your needs.', + }, + { + // header: '/docs/img/cards/sample-card-header-2.svg', + title: 'Resources', + icon: '/docs/img/icons/menu/resources', + hasLightIcon: true, + href: 'guides/resources', + description: 'View examples, curated content from the community, migration guides, and more.', + }, + { + // header: '/docs/img/cards/sample-card-header-2.svg', + title: 'Integrations', + icon: '/docs/img/icons/menu/integrations', + hasLightIcon: true, + href: 'guides/integrations', + description: 'Explore a variety of integrations from Supabase partners.', + }, +] + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/oss.tsx b/apps/docs/pages/oss.tsx deleted file mode 100644 index fe6d75a72ab..00000000000 --- a/apps/docs/pages/oss.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { useState, useEffect } from 'react' -import { Octokit } from '@octokit/core' -import Layout from '~/layouts/Default' -import maintainers from '../data/maintainers.json' -import { menuItems } from '~/components/Navigation/Navigation.constants' -import GithubCard from '../components/GithubCard' -import Sponsors from '../components/Sponsors' -import Image from 'next/image' - -export default function Oss({ meta }) { - const octokit = new Octokit() - - const [activePill, setActivePill] = useState('All') - const [repos, setRepos] = useState([]) - - const maintainerTags = maintainers - .reduce((acc, x) => acc.concat(x.tags), []) // get all tags - .filter((v, i, a) => a.indexOf(v) === i) // remove duplicates - .sort((a, b) => a.localeCompare(b)) // alphabetical - const maintainerPills = ['All'].concat(maintainerTags) - - useEffect(() => { - async function fetchOctoData() { - let res = await octokit.request('GET /orgs/{org}/repos', { - org: 'supabase', - type: 'public', - per_page: 6, - page: 1, - }) - setRepos( - res.data - .filter((r) => !!r.stargazers_count) - .sort((a, b) => b.stargazers_count - a.stargazers_count) - ) - } - fetchOctoData() - }, []) - - return ( - -
                  -
                  -
                  -
                  -

                  Open source

                  -

                  - Supabase is an open source company, supporting existing open source tools and - communities wherever possible. -

                  -
                  -
                  -
                  -
                  - -
                  -
                  -

                  Sponsors

                  - -
                  -
                  - -
                  -
                  -

                  Community Maintainers

                  - -
                  -
                    - {maintainerPills.map((x) => ( -
                  • setActivePill(x)} - > - {x} -
                  • - ))} -
                  -
                  -
                  - {maintainers - .filter((x) => activePill == 'All' || x.tags.includes(activePill)) - .sort((a, b) => a.handle.localeCompare(b.handle)) - .map((x, idx) => ( - - ))} -
                  -
                  -
                  - - {/* OSS */} -
                  -
                  -

                  Repositories

                  -
                  - {repos.length < 1 &&
                  } - {repos.length >= 1 && - repos.map((props, idx) => ( -
                  - -
                  - ))} -
                  -
                  -
                  -
                  - ) -} diff --git a/apps/docs/pages/ref-pages.mdx b/apps/docs/pages/ref-pages.mdx new file mode 100644 index 00000000000..e69de29bb2d diff --git a/apps/docs/pages/reference/api/[...slug].tsx b/apps/docs/pages/reference/api/[...slug].tsx new file mode 100644 index 00000000000..58d617d5cac --- /dev/null +++ b/apps/docs/pages/reference/api/[...slug].tsx @@ -0,0 +1,24 @@ +import apiCommonSections from '~/../../spec/common-api-sections.json' assert { type: 'json' } +import specFile from '~/../../spec/transforms/api_v0_openapi_deparsed.json' assert { type: 'json' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { gen_v3 } from '~/lib/refGenerator/helpers' + +// @ts-ignore +const generatedSpec = gen_v3(specFile, 'wat', { apiUrl: 'apiv0' }) + +const sections = flattenSections(apiCommonSections) + +export default function Config(props) { + return +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/api', '/api') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/auth/[...slug].tsx b/apps/docs/pages/reference/auth/[...slug].tsx new file mode 100644 index 00000000000..ad57871576b --- /dev/null +++ b/apps/docs/pages/reference/auth/[...slug].tsx @@ -0,0 +1,169 @@ +import specFile from '~/../../spec/transforms/auth_v1_openapi_deparsed.json' assert { type: 'json' } +import { gen_v3, enrichedOperation } from '~/lib/refGenerator/helpers' +import { Tabs } from '~/../../packages/ui' + +// @ts-ignore +import CodeBlock from '~/components/CodeBlock/CodeBlock' +import RefSubLayout from '~/layouts/ref/RefSubLayout' + +export type AcceptedValue = { + id: string + name: string + type: 'string' | 'boolean' | 'object' + description?: string +} + +export type Flag = { + id: string + name: string + description: string + default_value: string + accepted_values: AcceptedValue[] +} + +export type ApiParameter = { + example: string + in: string + name: string + required: boolean + schema: { + type: string + example: string + } +} +// @ts-ignore +const generatedSpec = gen_v3(specFile, 'wat', { apiUrl: 'apiv0' }) + +export default function Config() { + return ( + +
                  +
                  +
                  +

                  {generatedSpec.info.title}

                  +

                  {generatedSpec.info.description}

                  +
                  + +
                  + {generatedSpec.operations.map((operation: any) => ( +
                  + + +
                  + + {operation.operation} + {operation.fullPath} + +
                  + {/* Path Parameters */} + {operation.parameters && + operation.parameters.filter((parameter) => parameter.in === 'path').length > + 0 && ( +
                  +

                  Path parameters

                  +
                    + {operation.parameters && + operation.parameters + .filter((parameter: any) => parameter.in === 'path') + .map((parameter: any) => ( +
                  • +
                    +
                    + {parameter.name} +
                    + {parameter.required && ( +
                    + REQUIRED +
                    + )} +
                    +
                    +

                    {parameter.description}

                    +
                    + {parameter.example && ( +
                    + Example: + + {parameter.example} + +
                    + )} +
                  • + ))} +
                  +
                  + )} + + {/* Header Parameters */} + {operation.parameters && + operation.parameters.filter((parameter) => parameter.in === 'header').length > + 0 && ( +
                  +

                  Header parameters

                  +
                    + {operation.parameters && + operation.parameters + .filter((parameter: any) => parameter.in === 'header') + .map((parameter: any) => ( +
                  • +
                    + {parameter.name} + + {parameter.required && 'required'} + +
                    +
                    + Example: + + {parameter.example} + +
                    +
                  • + ))} +
                  +
                  + )} +
                  + + {operation.responseList.length > 0 && ( + <> +

                  Responses

                  + + {operation.responseList.map((response: any) => ( + +

                  {response.description}

                  + {response?.content && response?.content['application/json'] && ( +
                  + + {JSON.stringify(response.content['application/json'], null, 2)} + +
                  + )} +
                  + ))} +
                  + + )} +
                  +
                  +
                  + ))} +
                  +
                  +
                  +
                  + ) +} diff --git a/apps/docs/pages/reference/auth/config.tsx b/apps/docs/pages/reference/auth/config.tsx new file mode 100644 index 00000000000..3530cef71c6 --- /dev/null +++ b/apps/docs/pages/reference/auth/config.tsx @@ -0,0 +1,68 @@ +// @ts-expect-error +import specFile from '~/../../spec/gotrue_v1_config.yaml' assert { type: 'yml' } +import { Parameter } from '~/lib/refGenerator/refTypes' +import ReactMarkdown from 'react-markdown' + +// Parameters are grouped on the page by tag +const TAGS = ['general'] + +export default function Config() { + return ( +
                  +
                  +
                  +

                  {specFile.info.title} Configuration

                  + {specFile.info.description} +
                  + {TAGS.map((tag) => + specFile.parameters + .filter((param: Parameter) => param.tags[0] === tag) + .map((parameter: Parameter, index) => ( +
                  + {index === 0 &&

                  {tag}

                  } +
                  +
                  +

                  + $ + {parameter.title} +

                  +
                  +
                  +
                  +

                  + {parameter.description} +

                  +
                  +
                  + Required: {parameter.required.toString()} +
                  +
                  + Default: + + {parameter.default ? parameter.default.toString() : 'None'} + +
                  +
                  +
                  + {parameter.links && + parameter.links.map((link) => ( +
                  +

                  See also:

                  +
                • + {link.name} +
                • +
                  + ))} +
                  +
                  +
                  +
                  +
                  + )) + )} +
                  +
                  +
                  +
                  + ) +} diff --git a/apps/docs/pages/reference/cli/[...slug].tsx b/apps/docs/pages/reference/cli/[...slug].tsx new file mode 100644 index 00000000000..2e4a2218b3e --- /dev/null +++ b/apps/docs/pages/reference/cli/[...slug].tsx @@ -0,0 +1,23 @@ +// @ts-expect-error +import spec from '~/../../spec/cli_v1_commands.yaml' assert { type: 'yml' } + +import { flattenSections } from '~/lib/helpers' + +import cliCommonSections from '~/../../spec/common-cli-sections.json' assert { type: 'json' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' + +const sections = flattenSections(cliCommonSections) + +export default function CliRef(props) { + return +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/cli', '/cli') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/cli/config.tsx b/apps/docs/pages/reference/cli/config.tsx new file mode 100644 index 00000000000..f5aadc1c4a8 --- /dev/null +++ b/apps/docs/pages/reference/cli/config.tsx @@ -0,0 +1,68 @@ +// @ts-expect-error +import specFile from '~/../../spec/cli_v1_config.yaml' assert { type: 'yml' } +import { Parameter } from '~/lib/refGenerator/refTypes' +import ReactMarkdown from 'react-markdown' + +// Parameters are grouped on the page by tag +const TAGS = ['general', 'auth', 'api', 'database', 'dashboard', 'local'] + +export default function Config() { + return ( +
                  +
                  +
                  +

                  {specFile.info.title}

                  + {specFile.info.description} +
                  + {TAGS.map((tag) => + specFile.parameters + .filter((param: Parameter) => param.tags[0] === tag) + .map((parameter: Parameter, index) => ( +
                  + {index === 0 &&

                  {tag}

                  } +
                  +
                  +

                  + $ + {parameter.title} +

                  +
                  +
                  +
                  +

                  + {parameter.description} +

                  +
                  +
                  + Required: {parameter.required.toString()} +
                  +
                  + Default: + + {parameter.default ? parameter.default.toString() : 'None'} + +
                  +
                  +
                  + {parameter.links && + parameter.links.map((link) => ( +
                  +

                  See also:

                  +
                • + {link.name} +
                • +
                  + ))} +
                  +
                  +
                  +
                  +
                  + )) + )} +
                  +
                  +
                  +
                  + ) +} diff --git a/apps/docs/pages/reference/dart/[...slug].tsx b/apps/docs/pages/reference/dart/[...slug].tsx new file mode 100644 index 00000000000..4fecc97170d --- /dev/null +++ b/apps/docs/pages/reference/dart/[...slug].tsx @@ -0,0 +1,21 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_dart_v1.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + return +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/dart', '/dart') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/dart/crawlers/[...slug].tsx b/apps/docs/pages/reference/dart/crawlers/[...slug].tsx new file mode 100644 index 00000000000..afdc202a05f --- /dev/null +++ b/apps/docs/pages/reference/dart/crawlers/[...slug].tsx @@ -0,0 +1,34 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_dart_v1.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { useRouter } from 'next/router' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + const router = useRouter() + const slug = router.query.slug[0] + const filteredSection = sections.filter((section) => section.id === slug) + + return ( + + ) +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/dart', '/dart') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/dart/v0/[...slug].tsx b/apps/docs/pages/reference/dart/v0/[...slug].tsx new file mode 100644 index 00000000000..f0daf4e9d6e --- /dev/null +++ b/apps/docs/pages/reference/dart/v0/[...slug].tsx @@ -0,0 +1,21 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_dart_v0.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + return +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/dart/v0', '/dart/v0') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx new file mode 100644 index 00000000000..3ef20b302fe --- /dev/null +++ b/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx @@ -0,0 +1,34 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_dart_v0.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { useRouter } from 'next/router' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + const router = useRouter() + const slug = router.query.slug[0] + const filteredSection = sections.filter((section) => section.id === slug) + + return ( + + ) +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/dart/v0', '/dart/v0') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference.mdx b/apps/docs/pages/reference/index.mdx similarity index 89% rename from apps/docs/pages/reference.mdx rename to apps/docs/pages/reference/index.mdx index 10674bc0bcb..f6eeec0d70a 100644 --- a/apps/docs/pages/reference.mdx +++ b/apps/docs/pages/reference/index.mdx @@ -9,11 +9,11 @@ export const meta = { Reference documentation for the official Supabase client libraries, APIs, and tools. -
                  +
                  -
                  -
                  +
                  +
                  +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/javascript', '/javascript') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx b/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx new file mode 100644 index 00000000000..bd631d0e07e --- /dev/null +++ b/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx @@ -0,0 +1,34 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_js_v2.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { useRouter } from 'next/router' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + const router = useRouter() + const slug = router.query.slug[0] + const filteredSection = sections.filter((section) => section.id === slug) + + return ( + + ) +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/javascript', '/javascript') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/javascript/v1/[...slug].tsx b/apps/docs/pages/reference/javascript/v1/[...slug].tsx new file mode 100644 index 00000000000..d54c9df6d94 --- /dev/null +++ b/apps/docs/pages/reference/javascript/v1/[...slug].tsx @@ -0,0 +1,22 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +import typeSpec from '~/../../spec/enrichments/tsdoc_v1/combined.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_js_v1.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + return +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/javascript/v1', '/javascript/v1') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx b/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx new file mode 100644 index 00000000000..d1aa3ec92ee --- /dev/null +++ b/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx @@ -0,0 +1,34 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_js_v1.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { useRouter } from 'next/router' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + const router = useRouter() + const slug = router.query.slug[0] + const filteredSection = sections.filter((section) => section.id === slug) + + return ( + + ) +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/javascript/v1', '/javascript/v1') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/realtime/config.tsx b/apps/docs/pages/reference/realtime/config.tsx new file mode 100644 index 00000000000..eaa7763e7fa --- /dev/null +++ b/apps/docs/pages/reference/realtime/config.tsx @@ -0,0 +1,115 @@ +import fs from 'fs' +import matter from 'gray-matter' +import components from '~/components/index' +import { MDXRemote } from 'next-mdx-remote' +import { serialize } from 'next-mdx-remote/serialize' + +// @ts-expect-error +import specFile from '~/../../spec/realtime_v0_config.yaml' assert { type: 'yml' } +import { Parameter } from '~/lib/refGenerator/refTypes' + +import ReactMarkdown from 'react-markdown' + +// Parameters are grouped on the page by tag +const TAGS = ['general', 'database'] + +export default function Config(props) { + return ( +
                  +
                  +
                  +

                  {specFile.info.title} Configuration

                  + {specFile.info.description} +
                  +
                  + {props.docs + .filter((doc) => doc.introPage) + .map((item) => ( + + ))} +
                  + {TAGS.map((tag) => + specFile.parameters + .filter((param: Parameter) => param.tags[0] === tag) + .map((parameter: Parameter, index) => ( +
                  + {index === 0 &&

                  {tag} Settings

                  } +
                  +
                  +

                  + $ + {parameter.title} +

                  +
                  +
                  +
                  +

                  + {parameter.description} +

                  +
                  +
                  + Required: {parameter.required.toString()} +
                  +
                  + Default: + + {parameter.default ? parameter.default.toString() : 'None'} + +
                  +
                  +
                  + {parameter.links && + parameter.links.map((link) => ( +
                  +

                  See also:

                  +
                • + {link.name} +
                • +
                  + ))} +
                  +
                  +
                  +
                  +
                  + )) + )} +
                  +
                  +
                  +
                  + ) +} +export async function getServerSideProps() { + // an array of ids of the intro sections for this library + const introPages = ['realtime'] + + const pages = [...introPages] + + // Grab custom markdown intro page files + const allMarkdownDocs = await Promise.all( + pages.map(async (x: any, i) => { + const pathName = `docs/ref/realtime/${x}.mdx` + + const markdownExists = fs.existsSync(pathName) + + const fileContents = markdownExists ? fs.readFileSync(pathName, 'utf8') : '' + const { data, content } = matter(fileContents) + + return { + id: x, + title: x, + // ...content, + meta: data, + introPage: introPages.includes(x), + content: content ? await serialize(content || '') : null, + } + }) + ) + + return { + props: { + docs: allMarkdownDocs, + }, + } +} diff --git a/apps/docs/pages/reference/self-hosting-auth/[...slug].tsx b/apps/docs/pages/reference/self-hosting-auth/[...slug].tsx new file mode 100644 index 00000000000..819fd773892 --- /dev/null +++ b/apps/docs/pages/reference/self-hosting-auth/[...slug].tsx @@ -0,0 +1,24 @@ +import authSpec from '~/../../spec/auth_v1_openapi.json' assert { type: 'json' } +import selfHostingAuthCommonSections from '~/../../spec/common-self-hosting-auth-sections.json' +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { gen_v3 } from '~/lib/refGenerator/helpers' + +const sections = flattenSections(selfHostingAuthCommonSections) + +// @ts-ignore +const spec = gen_v3(authSpec, 'wat', { apiUrl: 'apiv0' }) + +export default function JSReference(props) { + return +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/self-hosting-auth', '/self-hosting-auth') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/self-hosting-realtime/[...slug].tsx b/apps/docs/pages/reference/self-hosting-realtime/[...slug].tsx new file mode 100644 index 00000000000..240ea180f0c --- /dev/null +++ b/apps/docs/pages/reference/self-hosting-realtime/[...slug].tsx @@ -0,0 +1,21 @@ +import selfHostingRealtimeCommonSections from '~/../../spec/common-self-hosting-realtime-sections.json' + +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { gen_v3 } from '~/lib/refGenerator/helpers' + +const sections = flattenSections(selfHostingRealtimeCommonSections) + +export default function JSReference(props) { + return +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/self-hosting-realtime', '/self-hosting-realtime') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/self-hosting-storage/[...slug].tsx b/apps/docs/pages/reference/self-hosting-storage/[...slug].tsx new file mode 100644 index 00000000000..2d2de874622 --- /dev/null +++ b/apps/docs/pages/reference/self-hosting-storage/[...slug].tsx @@ -0,0 +1,24 @@ +import storageSpec from '~/../../spec/storage_v0_openapi.json' assert { type: 'json' } +import selfHostingStorageCommonSections from '~/../../spec/common-self-hosting-storage-sections.json' +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { gen_v3 } from '~/lib/refGenerator/helpers' + +const sections = flattenSections(selfHostingStorageCommonSections) + +// @ts-ignore +const spec = gen_v3(storageSpec, 'wat', { apiUrl: 'apiv0' }) + +export default function JSReference(props) { + return +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/self-hosting-storage', '/self-hosting-storage') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/storage/[...slug].tsx b/apps/docs/pages/reference/storage/[...slug].tsx new file mode 100644 index 00000000000..9068c3008c7 --- /dev/null +++ b/apps/docs/pages/reference/storage/[...slug].tsx @@ -0,0 +1,163 @@ +import specFile from '~/../../spec/transforms/storage_v0_openapi_deparsed.json' assert { type: 'json' } +import { gen_v3, enrichedOperation } from '~/lib/refGenerator/helpers' +import { Tabs } from '~/../../packages/ui' + +// @ts-ignore +import CodeBlock from '~/components/CodeBlock/CodeBlock' +import RefSubLayout from '~/layouts/ref/RefSubLayout' + +export type AcceptedValue = { + id: string + name: string + type: 'string' | 'boolean' | 'object' + description?: string +} + +export type Flag = { + id: string + name: string + description: string + default_value: string + accepted_values: AcceptedValue[] +} + +export type ApiParameter = { + example: string + in: string + name: string + required: boolean + schema: { + type: string + example: string + } +} + +// @ts-ignore +const generatedSpec = gen_v3(specFile, 'wat', { apiUrl: 'apiv0' }) + +export default function Config() { + return ( + +
                  +
                  +
                  +

                  {generatedSpec.info.title}

                  +

                  {generatedSpec.info.description}

                  +
                  + +
                  + {generatedSpec.sections.map((section) => ( + <> +

                  {section.title}

                  + {section.operations.map((operation: any) => ( +
                  + + +
                  + + {operation.operation} + {operation.fullPath} + +
                  + {/* Path Parameters */} + {operation.parameters && + operation.parameters.filter((parameter) => parameter.in === 'path') + .length > 0 && ( +
                  +

                  Path parameters

                  +
                    + {operation.parameters && + operation.parameters + .filter((parameter: any) => parameter.in === 'path') + .map((parameter: any) => ( +
                  • +
                    + {parameter.name} + + {parameter.required && ( +
                    + REQUIRED +
                    + )} +
                    +
                    +
                    + Example: + + {parameter.example} + +
                    +
                  • + ))} +
                  +
                  + )} + + {/* Header Parameters */} + {operation.parameters && + operation.parameters.filter((parameter) => parameter.in === 'header') + .length > 0 && ( +
                  +

                  Header parameters

                  +
                    + {operation.parameters && + operation.parameters + .filter((parameter: any) => parameter.in === 'header') + .map((parameter: any) => ( +
                  • +
                    + {parameter.name} + + {parameter.required && 'required'} + +
                    +
                    + Example: + + {parameter.example} + +
                    +
                  • + ))} +
                  +
                  + )} +
                  + +

                  Responses

                  + + {operation.responseList.map((response: any) => ( + +

                  {response.description}

                  + {response?.content && response?.content['application/json'] && ( +
                  + + {JSON.stringify(response.content['application/json'], null, 2)} + +
                  + )} +
                  + ))} +
                  +
                  +
                  +
                  + ))} + + ))} +
                  +
                  +
                  +
                  + ) +} diff --git a/apps/docs/pages/reference/storage/config.tsx b/apps/docs/pages/reference/storage/config.tsx new file mode 100644 index 00000000000..8af901cba03 --- /dev/null +++ b/apps/docs/pages/reference/storage/config.tsx @@ -0,0 +1,69 @@ +// @ts-expect-error +import specFile from '~/../../spec/storage_v0_config.yaml' assert { type: 'yml' } +import { Parameter } from '~/lib/refGenerator/refTypes' + +import ReactMarkdown from 'react-markdown' + +// Parameters are grouped on the page by tag +const TAGS = ['general', 'multitenant'] +// console.log(specFile) +export default function Config() { + return ( +
                  +
                  +
                  +

                  {specFile.info.title} Configuration

                  + {specFile.info.description} +
                  + {TAGS.map((tag) => + specFile.parameters + .filter((param: Parameter) => param.tags[0] === tag) + .map((parameter: Parameter, index) => ( +
                  + {index === 0 &&

                  {tag} Settings

                  } +
                  +
                  +

                  + $ + {parameter.title} +

                  +
                  +
                  +
                  +

                  + {parameter.description} +

                  +
                  +
                  + Required: {parameter.required.toString()} +
                  +
                  + Default: + + {parameter.default ? parameter.default.toString() : 'None'} + +
                  +
                  +
                  + {parameter.links && + parameter.links.map((link) => ( +
                  +

                  See also:

                  +
                • + {link.name} +
                • +
                  + ))} +
                  +
                  +
                  +
                  +
                  + )) + )} +
                  +
                  +
                  +
                  + ) +} diff --git a/apps/docs/pages/tutorials/nextjs.mdx b/apps/docs/pages/tutorials/nextjs.mdx new file mode 100644 index 00000000000..5e22b391296 --- /dev/null +++ b/apps/docs/pages/tutorials/nextjs.mdx @@ -0,0 +1,724 @@ +import Layout from '~/layouts/tutorials/TutorialLayout' + +export const meta = { + title: 'Creating a user management dashboard with NextJS and Supabase', + author: 'Rich Haines', + video: 'https://www.youtube-nocookie.com/embed/0Fs96oZ4se0', +} + +In this 25-minute guide, we’ll be building a collaborative user managment app using NextJS and Supabase. +As users add and move rectangles in a canvas, changes will be automatically synced and persisted, allowing for a canvas that updates in real-time across clients. +Users will also be able to see other users selections, and undo and redo actions. + +![Supabase User Management example](/docs/img/user-management-demo.png) + +### GitHub + +Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management). + +## Building the App + +Let's start building the Next.js app from scratch. + +### Initialize a Next.js app + +We can use [`create-next-app`](https://nextjs.org/docs/getting-started) to initialize +an app called `supabase-nextjs`: + + + + +```bash +npx create-next-app@latest --use-npm supabase-nextjs +cd supabase-nextjs +``` + + + + +```bash +npx create-next-app@latest --ts --use-npm supabase-nextjs +cd supabase-nextjs +``` + + + + +Then install the Supabase client library: [supabase-js](https://github.com/supabase/supabase-js) + +```bash +npm install @supabase/supabase-js +``` + +And finally we want to save the environment variables in a `.env.local`. +All we need are the API URL and the `anon` key that you copied [earlier](#get-the-api-keys). + +```bash title=.env.local +NEXT_PUBLIC_SUPABASE_URL=YOUR_SUPABASE_URL +NEXT_PUBLIC_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY +``` + +And one optional step is to update the CSS file `styles/globals.css` to make the app look nice. +You can find the full contents of this file [here](https://raw.githubusercontent.com/supabase/supabase/master/examples/user-management/nextjs-ts-user-management/styles/globals.css). + +### Set up a Login component + +#### Supabase Auth Helpers + +Next.js is a highly versatile framework offering pre-rendering at build time (SSG), server-side rendering at request time (SSR), API routes, and middleware edge-functions. + +It can be challenging to authenticate your users in all these different environments, that's why we've created the [Supabase Auth Helpers](https://supabase.com/docs/guides/auth/auth-helpers/nextjs) to make user management and data fetching within Next.js as easy as possible. + +Install the auth helpers for React and Next.js + +```bash +npm install @supabase/auth-helpers-react @supabase/auth-helpers-nextjs +``` + + + + +Wrap your `pages/_app.js` component with the `SessionContextProvider` component: + +```jsx title=pages/_app.js +import '../styles/globals.css' +import { createBrowserSupabaseClient } from '@supabase/auth-helpers-nextjs' +import { SessionContextProvider } from '@supabase/auth-helpers-react' + +function MyApp({ Component, pageProps }) { + const [supabaseClient] = useState(() => createBrowserSupabaseClient()) + + return ( + + + + ) +} +export default MyApp +``` + + + + +Wrap your `pages/_app.tsx` component with the `SessionContextProvider` component: + +```jsx lines=2,8 title=pages/_app.tsx +import { createBrowserSupabaseClient } from '@supabase/auth-helpers-nextjs' +import { SessionContextProvider, Session } from '@supabase/auth-helpers-react' + +function MyApp({ + Component, + pageProps, +}: AppProps<{ + initialSession: Session, +}>) { + const [supabaseClient] = useState(() => createBrowserSupabaseClient()) + + return ( + + + + ) +} +export default MyApp +``` + +See the [Auth Helpers docs](/docs/guides/auth/auth-helpers/nextjs#usage-with-typescript) for more details on usage with TypeScript. + + + + +#### Supabase Auth UI + +We can use the [Supabase Auth UI](https://supabase.com/docs/guides/auth/auth-helpers/auth-ui) a pre-built React component for authenticating users via OAuth, email, and magic links. + +Install the Supabase Auth UI for React + +```bash +npm install @supabase/auth-ui-react +``` + +Add the `Auth` component to your home page + +```jsx title=pages/index.js +import { Auth, ThemeSupa } from '@supabase/auth-ui-react' +import { useSession, useSupabaseClient } from '@supabase/auth-helpers-react' + +const Home = () => { + const session = useSession() + const supabase = useSupabaseClient() + + return ( +
                  + {!session ? ( + + ) : ( +

                  Account page will go here.

                  + )} +
                  + ) +} + +export default Home +``` + +### Account page + +After a user is signed in we can allow them to edit their profile details and manage their account. + + + + +Let's create a new component for that called `Account.js` within a `components` folder. + +```tsx title=components/Account.js +import { useState, useEffect } from 'react' +import { useUser, useSupabaseClient } from '@supabase/auth-helpers-react' + +export default function Account({ session }) { + const supabase = useSupabaseClient() + const user = useUser() + const [loading, setLoading] = useState(true) + const [username, setUsername] = useState(null) + const [website, setWebsite] = useState(null) + const [avatar_url, setAvatarUrl] = useState(null) + + useEffect(() => { + getProfile() + }, [session]) + + async function getProfile() { + try { + setLoading(true) + + let { data, error, status } = await supabase + .from('profiles') + .select(`username, website, avatar_url`) + .eq('id', user.id) + .single() + + if (error && status !== 406) { + throw error + } + + if (data) { + setUsername(data.username) + setWebsite(data.website) + setAvatarUrl(data.avatar_url) + } + } catch (error) { + alert('Error loading user data!') + console.log(error) + } finally { + setLoading(false) + } + } + + async function updateProfile({ username, website, avatar_url }) { + try { + setLoading(true) + + const updates = { + id: user.id, + username, + website, + avatar_url, + updated_at: new Date().toISOString(), + } + + let { error } = await supabase.from('profiles').upsert(updates) + if (error) throw error + alert('Profile updated!') + } catch (error) { + alert('Error updating the data!') + console.log(error) + } finally { + setLoading(false) + } + } + + return ( +
                  +
                  + + +
                  +
                  + + setUsername(e.target.value)} + /> +
                  +
                  + + setWebsite(e.target.value)} + /> +
                  + +
                  + +
                  + +
                  + +
                  +
                  + ) +} +``` + +
                  + + +Let's create a new component for that called `Account.tsx` within a `components` folder. + +```tsx title=components/Account.tsx +import { useState, useEffect } from 'react' +import { useUser, useSupabaseClient, Session } from '@supabase/auth-helpers-react' +import { Database } from '../utils/database.types' +type Profiles = Database['public']['Tables']['profiles']['Row'] + +export default function Account({ session }: { session: Session }) { + const supabase = useSupabaseClient() + const user = useUser() + const [loading, setLoading] = useState(true) + const [username, setUsername] = useState(null) + const [website, setWebsite] = useState(null) + const [avatar_url, setAvatarUrl] = useState(null) + + useEffect(() => { + getProfile() + }, [session]) + + async function getProfile() { + try { + setLoading(true) + if (!user) throw new Error('No user') + + let { data, error, status } = await supabase + .from('profiles') + .select(`username, website, avatar_url`) + .eq('id', user.id) + .single() + + if (error && status !== 406) { + throw error + } + + if (data) { + setUsername(data.username) + setWebsite(data.website) + setAvatarUrl(data.avatar_url) + } + } catch (error) { + alert('Error loading user data!') + console.log(error) + } finally { + setLoading(false) + } + } + + async function updateProfile({ + username, + website, + avatar_url, + }: { + username: Profiles['username'] + website: Profiles['website'] + avatar_url: Profiles['avatar_url'] + }) { + try { + setLoading(true) + if (!user) throw new Error('No user') + + const updates = { + id: user.id, + username, + website, + avatar_url, + updated_at: new Date().toISOString(), + } + + let { error } = await supabase.from('profiles').upsert(updates) + if (error) throw error + alert('Profile updated!') + } catch (error) { + alert('Error updating the data!') + console.log(error) + } finally { + setLoading(false) + } + } + + return ( +
                  +
                  + + +
                  +
                  + + setUsername(e.target.value)} + /> +
                  +
                  + + setWebsite(e.target.value)} + /> +
                  + +
                  + +
                  + +
                  + +
                  +
                  + ) +} +``` + +
                  +
                  + +### Launch! + +Now that we have all the components in place, let's update `pages/index.js`: + +```jsx lines=3,14 title=pages/index.js +import { Auth, ThemeSupa } from '@supabase/auth-ui-react' +import { useSession, useSupabaseClient } from '@supabase/auth-helpers-react' +import Account from '../components/Account' + +const Home = () => { + const session = useSession() + const supabase = useSupabaseClient() + + return ( +
                  + {!session ? ( + + ) : ( + + )} +
                  + ) +} + +export default Home +``` + +Once that's done, run this in a terminal window: + +```bash +npm run dev +``` + +And then open the browser to [localhost:3000](http://localhost:3000) and you should see the completed app. + +## Bonus: Profile photos + +Every Supabase project is configured with [Storage](/docs/guides/storage) for managing large files like +photos and videos. + +### Create an upload widget + +Let's create an avatar widget for the user so that they can upload a profile photo. We can start by creating a new component: + + + + +```jsx title=components/Avatar.js +import React, { useEffect, useState } from 'react' +import { useSupabaseClient } from '@supabase/auth-helpers-react' + +export default function Avatar({ uid, url, size, onUpload }) { + const supabase = useSupabaseClient() + const [avatarUrl, setAvatarUrl] = useState(null) + const [uploading, setUploading] = useState(false) + + useEffect(() => { + if (url) downloadImage(url) + }, [url]) + + async function downloadImage(path) { + try { + const { data, error } = await supabase.storage.from('avatars').download(path) + if (error) { + throw error + } + const url = URL.createObjectURL(data) + setAvatarUrl(url) + } catch (error) { + console.log('Error downloading image: ', error) + } + } + + const uploadAvatar = async (event) => { + try { + setUploading(true) + + if (!event.target.files || event.target.files.length === 0) { + throw new Error('You must select an image to upload.') + } + + const file = event.target.files[0] + const fileExt = file.name.split('.').pop() + const fileName = `${uid}.${fileExt}` + const filePath = `${fileName}` + + let { error: uploadError } = await supabase.storage + .from('avatars') + .upload(filePath, file, { upsert: true }) + + if (uploadError) { + throw uploadError + } + + onUpload(filePath) + } catch (error) { + alert('Error uploading avatar!') + console.log(error) + } finally { + setUploading(false) + } + } + + return ( +
                  + {avatarUrl ? ( + Avatar + ) : ( +
                  + )} +
                  + + +
                  +
                  + ) +} +``` + + + + +```tsx title=components/Avatar.tsx +import React, { useEffect, useState } from 'react' +import { useSupabaseClient } from '@supabase/auth-helpers-react' +import { Database } from '../utils/database.types' +type Profiles = Database['public']['Tables']['profiles']['Row'] + +export default function Avatar({ + uid, + url, + size, + onUpload, +}: { + uid: string + url: Profiles['avatar_url'] + size: number + onUpload: (url: string) => void +}) { + const supabase = useSupabaseClient() + const [avatarUrl, setAvatarUrl] = useState(null) + const [uploading, setUploading] = useState(false) + + useEffect(() => { + if (url) downloadImage(url) + }, [url]) + + async function downloadImage(path: string) { + try { + const { data, error } = await supabase.storage.from('avatars').download(path) + if (error) { + throw error + } + const url = URL.createObjectURL(data) + setAvatarUrl(url) + } catch (error) { + console.log('Error downloading image: ', error) + } + } + + const uploadAvatar: React.ChangeEventHandler = async (event) => { + try { + setUploading(true) + + if (!event.target.files || event.target.files.length === 0) { + throw new Error('You must select an image to upload.') + } + + const file = event.target.files[0] + const fileExt = file.name.split('.').pop() + const fileName = `${uid}.${fileExt}` + const filePath = `${fileName}` + + let { error: uploadError } = await supabase.storage + .from('avatars') + .upload(filePath, file, { upsert: true }) + + if (uploadError) { + throw uploadError + } + + onUpload(filePath) + } catch (error) { + alert('Error uploading avatar!') + console.log(error) + } finally { + setUploading(false) + } + } + + return ( +
                  + {avatarUrl ? ( + Avatar + ) : ( +
                  + )} +
                  + + +
                  +
                  + ) +} +``` + + + + +### Add the new widget + +And then we can add the widget to the Account page: + +```jsx title=components/Account.js +// Import the new component +import Avatar from './Avatar' + +// ... + +return ( +
                  + {/* Add to the body */} + { + setAvatarUrl(url) + updateProfile({ username, website, avatar_url: url }) + }} + /> + {/* ... */} +
                  +) +``` + +## Next steps + +At this stage you have a fully functional application! + +- See the complete [example on GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management) and deploy it to Vercel. +- Explore the [pre-built Auth UI for React](https://supabase.com/docs/guides/auth/auth-helpers/auth-ui). +- Explore the [Auth Helpers for Next.js](https://supabase.com/docs/guides/auth/auth-helpers/nextjs). +- Explore the [Supabase Cache Helpers](https://github.com/psteinroe/supabase-cache-helpers). +- See the [Next.js Subscription Payments Starter](https://github.com/vercel/nextjs-subscription-payments) template on GitHub. +- Got a question? [Ask here](https://github.com/supabase/supabase/discussions). +- Sign in: [app.supabase.com](https://app.supabase.com) + +export default ({ children }) => diff --git a/apps/docs/public/img/cards/dark.png b/apps/docs/public/img/cards/dark.png new file mode 100644 index 00000000000..6a34d3a4794 Binary files /dev/null and b/apps/docs/public/img/cards/dark.png differ diff --git a/apps/docs/public/img/cards/dark.svg b/apps/docs/public/img/cards/dark.svg new file mode 100644 index 00000000000..4f791cb6cc9 --- /dev/null +++ b/apps/docs/public/img/cards/dark.svg @@ -0,0 +1,475 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/cards/sample-card-header-2.svg b/apps/docs/public/img/cards/sample-card-header-2.svg new file mode 100644 index 00000000000..3c4269e74cf --- /dev/null +++ b/apps/docs/public/img/cards/sample-card-header-2.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/cards/sample-card-header-3.svg b/apps/docs/public/img/cards/sample-card-header-3.svg new file mode 100644 index 00000000000..1eb4bffa5c6 --- /dev/null +++ b/apps/docs/public/img/cards/sample-card-header-3.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/cards/sample-card-header-4.svg b/apps/docs/public/img/cards/sample-card-header-4.svg new file mode 100644 index 00000000000..80a2c8933e7 --- /dev/null +++ b/apps/docs/public/img/cards/sample-card-header-4.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/cards/sample-card-header.svg b/apps/docs/public/img/cards/sample-card-header.svg new file mode 100644 index 00000000000..39cc30ca3df --- /dev/null +++ b/apps/docs/public/img/cards/sample-card-header.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/cards/tutorials-small.svg b/apps/docs/public/img/cards/tutorials-small.svg new file mode 100644 index 00000000000..7b7ed6fbf88 --- /dev/null +++ b/apps/docs/public/img/cards/tutorials-small.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/gradient-bg.png b/apps/docs/public/img/gradient-bg.png new file mode 100644 index 00000000000..b9c401191ff Binary files /dev/null and b/apps/docs/public/img/gradient-bg.png differ diff --git a/apps/docs/public/img/libraries/angular-icon.svg b/apps/docs/public/img/icons/angular-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/angular-icon.svg rename to apps/docs/public/img/icons/angular-icon.svg diff --git a/apps/docs/public/img/libraries/expo-icon-dark.svg b/apps/docs/public/img/icons/expo-icon-dark.svg similarity index 100% rename from apps/docs/public/img/libraries/expo-icon-dark.svg rename to apps/docs/public/img/icons/expo-icon-dark.svg diff --git a/apps/docs/public/img/icons/firebase-icon.svg b/apps/docs/public/img/icons/firebase-icon.svg new file mode 100644 index 00000000000..57bc1df1880 --- /dev/null +++ b/apps/docs/public/img/icons/firebase-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/gatsby-icon.svg b/apps/docs/public/img/icons/gatsby-icon.svg new file mode 100644 index 00000000000..6b35d391adc --- /dev/null +++ b/apps/docs/public/img/icons/gatsby-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/github-icon-dark.svg b/apps/docs/public/img/icons/github-icon-light.svg similarity index 93% rename from apps/docs/public/img/icons/github-icon-dark.svg rename to apps/docs/public/img/icons/github-icon-light.svg index 2667c90a499..5e9611f831b 100644 --- a/apps/docs/public/img/icons/github-icon-dark.svg +++ b/apps/docs/public/img/icons/github-icon-light.svg @@ -1,6 +1,6 @@ - + diff --git a/apps/docs/public/img/icons/github-icon.svg b/apps/docs/public/img/icons/github-icon.svg index 5e9611f831b..2667c90a499 100644 --- a/apps/docs/public/img/icons/github-icon.svg +++ b/apps/docs/public/img/icons/github-icon.svg @@ -1,6 +1,6 @@ - + diff --git a/apps/docs/public/img/icons/heroku-icon.svg b/apps/docs/public/img/icons/heroku-icon.svg new file mode 100644 index 00000000000..eba45563758 --- /dev/null +++ b/apps/docs/public/img/icons/heroku-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/ionic-icon.svg b/apps/docs/public/img/icons/ionic-icon.svg new file mode 100644 index 00000000000..470ac11daf1 --- /dev/null +++ b/apps/docs/public/img/icons/ionic-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/libraries/c-sharp-icon.svg b/apps/docs/public/img/icons/libraries/c-sharp-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/c-sharp-icon.svg rename to apps/docs/public/img/icons/libraries/c-sharp-icon.svg diff --git a/apps/docs/public/img/libraries/dart-icon.svg b/apps/docs/public/img/icons/libraries/dart-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/dart-icon.svg rename to apps/docs/public/img/icons/libraries/dart-icon.svg diff --git a/apps/docs/public/img/libraries/expo-icon.svg b/apps/docs/public/img/icons/libraries/expo-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/expo-icon.svg rename to apps/docs/public/img/icons/libraries/expo-icon.svg diff --git a/apps/docs/public/img/libraries/flutter-icon.svg b/apps/docs/public/img/icons/libraries/flutter-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/flutter-icon.svg rename to apps/docs/public/img/icons/libraries/flutter-icon.svg diff --git a/apps/docs/public/img/libraries/javascript-icon.svg b/apps/docs/public/img/icons/libraries/javascript-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/javascript-icon.svg rename to apps/docs/public/img/icons/libraries/javascript-icon.svg diff --git a/apps/docs/public/img/libraries/kotlin-icon.svg b/apps/docs/public/img/icons/libraries/kotlin-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/kotlin-icon.svg rename to apps/docs/public/img/icons/libraries/kotlin-icon.svg diff --git a/apps/docs/public/img/libraries/nestjs-icon.svg b/apps/docs/public/img/icons/libraries/nestjs-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/nestjs-icon.svg rename to apps/docs/public/img/icons/libraries/nestjs-icon.svg diff --git a/apps/docs/public/img/icons/nextjs-dark-icon.svg b/apps/docs/public/img/icons/libraries/nextjs-dark-icon.svg similarity index 100% rename from apps/docs/public/img/icons/nextjs-dark-icon.svg rename to apps/docs/public/img/icons/libraries/nextjs-dark-icon.svg diff --git a/apps/docs/public/img/libraries/python-icon.svg b/apps/docs/public/img/icons/libraries/python-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/python-icon.svg rename to apps/docs/public/img/icons/libraries/python-icon.svg diff --git a/apps/docs/public/img/libraries/react-icon.svg b/apps/docs/public/img/icons/libraries/react-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/react-icon.svg rename to apps/docs/public/img/icons/libraries/react-icon.svg diff --git a/apps/docs/public/img/libraries/react-native-icon.svg b/apps/docs/public/img/icons/libraries/react-native-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/react-native-icon.svg rename to apps/docs/public/img/icons/libraries/react-native-icon.svg diff --git a/apps/docs/public/img/libraries/rust-icon.svg b/apps/docs/public/img/icons/libraries/rust-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/rust-icon.svg rename to apps/docs/public/img/icons/libraries/rust-icon.svg diff --git a/apps/docs/public/img/libraries/svelte-icon.svg b/apps/docs/public/img/icons/libraries/svelte-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/svelte-icon.svg rename to apps/docs/public/img/icons/libraries/svelte-icon.svg diff --git a/apps/docs/public/img/libraries/vuejs-icon.svg b/apps/docs/public/img/icons/libraries/vuejs-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/vuejs-icon.svg rename to apps/docs/public/img/icons/libraries/vuejs-icon.svg diff --git a/apps/docs/public/img/icons/menu/auth-light.svg b/apps/docs/public/img/icons/menu/auth-light.svg new file mode 100644 index 00000000000..b32fd06213a --- /dev/null +++ b/apps/docs/public/img/icons/menu/auth-light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/docs/public/img/icons/menu/auth.svg b/apps/docs/public/img/icons/menu/auth.svg new file mode 100644 index 00000000000..49fcad94703 --- /dev/null +++ b/apps/docs/public/img/icons/menu/auth.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/docs/public/img/icons/menu/dart.svg b/apps/docs/public/img/icons/menu/dart.svg new file mode 100644 index 00000000000..b3fea918042 --- /dev/null +++ b/apps/docs/public/img/icons/menu/dart.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/database-light.svg b/apps/docs/public/img/icons/menu/database-light.svg new file mode 100644 index 00000000000..c44d1fcde15 --- /dev/null +++ b/apps/docs/public/img/icons/menu/database-light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/img/icons/menu/database.svg b/apps/docs/public/img/icons/menu/database.svg new file mode 100644 index 00000000000..8b8205599c2 --- /dev/null +++ b/apps/docs/public/img/icons/menu/database.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/img/icons/menu/extensions-light.svg b/apps/docs/public/img/icons/menu/extensions-light.svg new file mode 100644 index 00000000000..1ba220fa78b --- /dev/null +++ b/apps/docs/public/img/icons/menu/extensions-light.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/docs/public/img/icons/menu/functions-light.svg b/apps/docs/public/img/icons/menu/functions-light.svg new file mode 100644 index 00000000000..37dea5670d4 --- /dev/null +++ b/apps/docs/public/img/icons/menu/functions-light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/docs/public/img/icons/menu/functions.svg b/apps/docs/public/img/icons/menu/functions.svg new file mode 100644 index 00000000000..734a4c89e51 --- /dev/null +++ b/apps/docs/public/img/icons/menu/functions.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/docs/public/img/icons/menu/getting-started-light.svg b/apps/docs/public/img/icons/menu/getting-started-light.svg new file mode 100644 index 00000000000..8767de7774c --- /dev/null +++ b/apps/docs/public/img/icons/menu/getting-started-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/docs/public/img/icons/menu/getting-started.svg b/apps/docs/public/img/icons/menu/getting-started.svg new file mode 100644 index 00000000000..48507ca77f1 --- /dev/null +++ b/apps/docs/public/img/icons/menu/getting-started.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/docs/public/img/icons/menu/home-light.svg b/apps/docs/public/img/icons/menu/home-light.svg new file mode 100644 index 00000000000..4188b1807b8 --- /dev/null +++ b/apps/docs/public/img/icons/menu/home-light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/img/icons/menu/home.svg b/apps/docs/public/img/icons/menu/home.svg new file mode 100644 index 00000000000..8240c970369 --- /dev/null +++ b/apps/docs/public/img/icons/menu/home.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/img/icons/menu/integrations-light.svg b/apps/docs/public/img/icons/menu/integrations-light.svg new file mode 100644 index 00000000000..cea01318cb4 --- /dev/null +++ b/apps/docs/public/img/icons/menu/integrations-light.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/docs/public/img/icons/menu/integrations.svg b/apps/docs/public/img/icons/menu/integrations.svg new file mode 100644 index 00000000000..1e0027051c8 --- /dev/null +++ b/apps/docs/public/img/icons/menu/integrations.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/docs/public/img/icons/menu/platform-light.svg b/apps/docs/public/img/icons/menu/platform-light.svg new file mode 100644 index 00000000000..8712e24c76f --- /dev/null +++ b/apps/docs/public/img/icons/menu/platform-light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/img/icons/menu/platform.svg b/apps/docs/public/img/icons/menu/platform.svg new file mode 100644 index 00000000000..febc128769b --- /dev/null +++ b/apps/docs/public/img/icons/menu/platform.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/img/icons/menu/realtime-light.svg b/apps/docs/public/img/icons/menu/realtime-light.svg new file mode 100644 index 00000000000..3cea218cd72 --- /dev/null +++ b/apps/docs/public/img/icons/menu/realtime-light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/docs/public/img/icons/menu/realtime.svg b/apps/docs/public/img/icons/menu/realtime.svg new file mode 100644 index 00000000000..2c3be34319e --- /dev/null +++ b/apps/docs/public/img/icons/menu/realtime.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-api-light.svg b/apps/docs/public/img/icons/menu/reference-api-light.svg new file mode 100644 index 00000000000..c17b3fa3dc6 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-api-light.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-api.svg b/apps/docs/public/img/icons/menu/reference-api.svg new file mode 100644 index 00000000000..e26937c9071 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-api.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-auth-light.svg b/apps/docs/public/img/icons/menu/reference-auth-light.svg new file mode 100644 index 00000000000..3995c790842 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-auth-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/reference-auth.svg b/apps/docs/public/img/icons/menu/reference-auth.svg new file mode 100644 index 00000000000..ca43d9d0b20 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-auth.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/reference-cli-light.svg b/apps/docs/public/img/icons/menu/reference-cli-light.svg new file mode 100644 index 00000000000..b3a662bea7a --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-cli-light.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-cli.svg b/apps/docs/public/img/icons/menu/reference-cli.svg new file mode 100644 index 00000000000..b239a47e06b --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-cli.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-dart-light.svg b/apps/docs/public/img/icons/menu/reference-dart-light.svg new file mode 100644 index 00000000000..245516d78f7 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-dart-light.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-dart.svg b/apps/docs/public/img/icons/menu/reference-dart.svg new file mode 100644 index 00000000000..b3fea918042 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-dart.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-javascript-light.svg b/apps/docs/public/img/icons/menu/reference-javascript-light.svg new file mode 100644 index 00000000000..1417f5a8038 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-javascript-light.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-javascript.svg b/apps/docs/public/img/icons/menu/reference-javascript.svg new file mode 100644 index 00000000000..dff8905edb5 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-javascript.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-light.svg b/apps/docs/public/img/icons/menu/reference-light.svg new file mode 100644 index 00000000000..1e241072ca2 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-light.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-realtime-light.svg b/apps/docs/public/img/icons/menu/reference-realtime-light.svg new file mode 100644 index 00000000000..1a9bef014b3 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-realtime-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/reference-realtime.svg b/apps/docs/public/img/icons/menu/reference-realtime.svg new file mode 100644 index 00000000000..bbb0c056edb --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-realtime.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/reference-storage-light.svg b/apps/docs/public/img/icons/menu/reference-storage-light.svg new file mode 100644 index 00000000000..be8a47ae0a6 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-storage-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/reference-storage.svg b/apps/docs/public/img/icons/menu/reference-storage.svg new file mode 100644 index 00000000000..bdc394e6f54 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-storage.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference.svg b/apps/docs/public/img/icons/menu/reference.svg new file mode 100644 index 00000000000..90ff154832e --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/docs/public/img/icons/menu/resources-light.svg b/apps/docs/public/img/icons/menu/resources-light.svg new file mode 100644 index 00000000000..8712e24c76f --- /dev/null +++ b/apps/docs/public/img/icons/menu/resources-light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/img/icons/menu/resources.svg b/apps/docs/public/img/icons/menu/resources.svg new file mode 100644 index 00000000000..febc128769b --- /dev/null +++ b/apps/docs/public/img/icons/menu/resources.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/img/icons/menu/storage-light.svg b/apps/docs/public/img/icons/menu/storage-light.svg new file mode 100644 index 00000000000..308b5750387 --- /dev/null +++ b/apps/docs/public/img/icons/menu/storage-light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/img/icons/menu/storage.svg b/apps/docs/public/img/icons/menu/storage.svg new file mode 100644 index 00000000000..28e14c94387 --- /dev/null +++ b/apps/docs/public/img/icons/menu/storage.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/docs/public/img/icons/menu/tutorials-light.svg b/apps/docs/public/img/icons/menu/tutorials-light.svg new file mode 100644 index 00000000000..97c14dfbd7a --- /dev/null +++ b/apps/docs/public/img/icons/menu/tutorials-light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/docs/public/img/icons/menu/tutorials.svg b/apps/docs/public/img/icons/menu/tutorials.svg new file mode 100644 index 00000000000..6b2847c243d --- /dev/null +++ b/apps/docs/public/img/icons/menu/tutorials.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/docs/public/img/icons/nextjs-icon-light.svg b/apps/docs/public/img/icons/nextjs-icon-light.svg new file mode 100644 index 00000000000..135acfe233d --- /dev/null +++ b/apps/docs/public/img/icons/nextjs-icon-light.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/icons/nextjs-icon.svg b/apps/docs/public/img/icons/nextjs-icon.svg index c45d6e63fb9..e2da0adf97e 100644 --- a/apps/docs/public/img/icons/nextjs-icon.svg +++ b/apps/docs/public/img/icons/nextjs-icon.svg @@ -1,3 +1,20 @@ - - + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/libraries/nextjs.svg b/apps/docs/public/img/icons/nextjs.svg similarity index 100% rename from apps/docs/public/img/libraries/nextjs.svg rename to apps/docs/public/img/icons/nextjs.svg diff --git a/apps/docs/public/img/icons/nuxt-icon.svg b/apps/docs/public/img/icons/nuxt-icon.svg new file mode 100644 index 00000000000..1cc014898bb --- /dev/null +++ b/apps/docs/public/img/icons/nuxt-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/redwood-icon.svg b/apps/docs/public/img/icons/redwood-icon.svg new file mode 100644 index 00000000000..e85b6861921 --- /dev/null +++ b/apps/docs/public/img/icons/redwood-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/libraries/redwoodjs-icon.svg b/apps/docs/public/img/icons/redwoodjs-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/redwoodjs-icon.svg rename to apps/docs/public/img/icons/redwoodjs-icon.svg diff --git a/apps/docs/public/img/icons/remix-icon-light.svg b/apps/docs/public/img/icons/remix-icon-light.svg new file mode 100644 index 00000000000..111b082c2b8 --- /dev/null +++ b/apps/docs/public/img/icons/remix-icon-light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/docs/public/img/icons/remix-icon.svg b/apps/docs/public/img/icons/remix-icon.svg new file mode 100644 index 00000000000..2bfc43cc125 --- /dev/null +++ b/apps/docs/public/img/icons/remix-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/docs/public/img/libraries/solidjs-icon.svg b/apps/docs/public/img/icons/solidjs-icon.svg similarity index 100% rename from apps/docs/public/img/libraries/solidjs-icon.svg rename to apps/docs/public/img/icons/solidjs-icon.svg diff --git a/apps/docs/public/img/icons/typescript-icon.svg b/apps/docs/public/img/icons/typescript-icon.svg new file mode 100644 index 00000000000..0abfb1b4b89 --- /dev/null +++ b/apps/docs/public/img/icons/typescript-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/icons/vonage-icon-light.svg b/apps/docs/public/img/icons/vonage-icon-light.svg new file mode 100644 index 00000000000..f21da2bfbf4 --- /dev/null +++ b/apps/docs/public/img/icons/vonage-icon-light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/docs/public/img/icons/vonage-icon.svg b/apps/docs/public/img/icons/vonage-icon.svg index f21da2bfbf4..aa0e2c177f4 100644 --- a/apps/docs/public/img/icons/vonage-icon.svg +++ b/apps/docs/public/img/icons/vonage-icon.svg @@ -1,4 +1,4 @@ - - + + diff --git a/apps/docs/public/img/integrations/logos/appsmith_logo.png b/apps/docs/public/img/integrations/logos/appsmith_logo.png new file mode 100644 index 00000000000..43c73e52172 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/appsmith_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/arengu_logo.jpeg b/apps/docs/public/img/integrations/logos/arengu_logo.jpeg new file mode 100644 index 00000000000..6cbe3ed1164 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/arengu_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/auth0.webp b/apps/docs/public/img/integrations/logos/auth0.webp new file mode 100644 index 00000000000..85dafcc2567 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/auth0.webp differ diff --git a/apps/docs/public/img/integrations/logos/auth0_logo.png b/apps/docs/public/img/integrations/logos/auth0_logo.png new file mode 100644 index 00000000000..9558141f14d Binary files /dev/null and b/apps/docs/public/img/integrations/logos/auth0_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/authsignal_logo.jpeg b/apps/docs/public/img/integrations/logos/authsignal_logo.jpeg new file mode 100644 index 00000000000..65930d88586 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/authsignal_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/authsignal_logo.png b/apps/docs/public/img/integrations/logos/authsignal_logo.png new file mode 100644 index 00000000000..51ebdeeeb4d Binary files /dev/null and b/apps/docs/public/img/integrations/logos/authsignal_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/basedash_logo.jpeg b/apps/docs/public/img/integrations/logos/basedash_logo.jpeg new file mode 100644 index 00000000000..f4551a42378 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/basedash_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/clerk_logo.png b/apps/docs/public/img/integrations/logos/clerk_logo.png new file mode 100644 index 00000000000..39866a000aa Binary files /dev/null and b/apps/docs/public/img/integrations/logos/clerk_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/clerk_logo.svg b/apps/docs/public/img/integrations/logos/clerk_logo.svg new file mode 100644 index 00000000000..57375da7f8b --- /dev/null +++ b/apps/docs/public/img/integrations/logos/clerk_logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/docs/public/img/integrations/logos/clutch_logo.jpeg b/apps/docs/public/img/integrations/logos/clutch_logo.jpeg new file mode 100644 index 00000000000..dd55777b6b6 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/clutch_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/clutch_logo.png b/apps/docs/public/img/integrations/logos/clutch_logo.png new file mode 100644 index 00000000000..63b4f88db08 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/clutch_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/codesandbox_logo.jpeg b/apps/docs/public/img/integrations/logos/codesandbox_logo.jpeg new file mode 100644 index 00000000000..852aba8f950 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/codesandbox_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/colored_logo.png b/apps/docs/public/img/integrations/logos/colored_logo.png new file mode 100644 index 00000000000..7cbd75511ed Binary files /dev/null and b/apps/docs/public/img/integrations/logos/colored_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/dashibase_logo.jpeg b/apps/docs/public/img/integrations/logos/dashibase_logo.jpeg new file mode 100644 index 00000000000..aefffe1b44f Binary files /dev/null and b/apps/docs/public/img/integrations/logos/dashibase_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/dashibase_logo.png b/apps/docs/public/img/integrations/logos/dashibase_logo.png new file mode 100644 index 00000000000..359e5d8c831 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/dashibase_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/dhiwise_logo.jpeg b/apps/docs/public/img/integrations/logos/dhiwise_logo.jpeg new file mode 100644 index 00000000000..04ebaa5e0eb Binary files /dev/null and b/apps/docs/public/img/integrations/logos/dhiwise_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/dhiwise_logo.png b/apps/docs/public/img/integrations/logos/dhiwise_logo.png new file mode 100644 index 00000000000..96264cca03e Binary files /dev/null and b/apps/docs/public/img/integrations/logos/dhiwise_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/directus_logo.jpeg b/apps/docs/public/img/integrations/logos/directus_logo.jpeg new file mode 100644 index 00000000000..64f9a7b5f3b Binary files /dev/null and b/apps/docs/public/img/integrations/logos/directus_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/directus_logo.png b/apps/docs/public/img/integrations/logos/directus_logo.png new file mode 100644 index 00000000000..aac383a7e79 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/directus_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/doppler_logo.jpeg b/apps/docs/public/img/integrations/logos/doppler_logo.jpeg new file mode 100644 index 00000000000..0110459330a Binary files /dev/null and b/apps/docs/public/img/integrations/logos/doppler_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/draftbit_logo.png b/apps/docs/public/img/integrations/logos/draftbit_logo.png new file mode 100644 index 00000000000..ae58788de2c Binary files /dev/null and b/apps/docs/public/img/integrations/logos/draftbit_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/estuary_logo.jpeg b/apps/docs/public/img/integrations/logos/estuary_logo.jpeg new file mode 100644 index 00000000000..50d3aad9f05 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/estuary_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/estuary_logo.png b/apps/docs/public/img/integrations/logos/estuary_logo.png new file mode 100644 index 00000000000..ab96311f616 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/estuary_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/fezto-logo_logo.png b/apps/docs/public/img/integrations/logos/fezto-logo_logo.png new file mode 100644 index 00000000000..e259cc4b557 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/fezto-logo_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/internal_logo.png b/apps/docs/public/img/integrations/logos/internal_logo.png new file mode 100644 index 00000000000..824279374aa Binary files /dev/null and b/apps/docs/public/img/integrations/logos/internal_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/jetadmin_logo.png b/apps/docs/public/img/integrations/logos/jetadmin_logo.png new file mode 100644 index 00000000000..39008c72d48 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/jetadmin_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/keyri_logo.jpeg b/apps/docs/public/img/integrations/logos/keyri_logo.jpeg new file mode 100644 index 00000000000..e0713d86085 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/keyri_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/keyri_logo.png b/apps/docs/public/img/integrations/logos/keyri_logo.png new file mode 100644 index 00000000000..585b8c64d68 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/keyri_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/logo_logo.png b/apps/docs/public/img/integrations/logos/logo_logo.png new file mode 100644 index 00000000000..b5bc166815f Binary files /dev/null and b/apps/docs/public/img/integrations/logos/logo_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/logo_teta_logo.svg b/apps/docs/public/img/integrations/logos/logo_teta_logo.svg new file mode 100644 index 00000000000..fd9e393fa34 --- /dev/null +++ b/apps/docs/public/img/integrations/logos/logo_teta_logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/img/integrations/logos/nextauth_logo.png b/apps/docs/public/img/integrations/logos/nextauth_logo.png new file mode 100644 index 00000000000..60771efb5c2 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/nextauth_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/ory_logo.jpeg b/apps/docs/public/img/integrations/logos/ory_logo.jpeg new file mode 100644 index 00000000000..ce10c428c95 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/ory_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/pgmustard_logo.png b/apps/docs/public/img/integrations/logos/pgmustard_logo.png new file mode 100644 index 00000000000..806ec916bd4 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/pgmustard_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/plasmic_logo.png b/apps/docs/public/img/integrations/logos/plasmic_logo.png new file mode 100644 index 00000000000..162ca6ed517 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/plasmic_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/polyscale_logo.png b/apps/docs/public/img/integrations/logos/polyscale_logo.png new file mode 100644 index 00000000000..bdfb9318127 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/polyscale_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/prisma_logo.png b/apps/docs/public/img/integrations/logos/prisma_logo.png new file mode 100644 index 00000000000..b9398b4e814 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/prisma_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/readyset_logo.jpeg b/apps/docs/public/img/integrations/logos/readyset_logo.jpeg new file mode 100644 index 00000000000..cc8ab4dd83e Binary files /dev/null and b/apps/docs/public/img/integrations/logos/readyset_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/replibyte_logo.jpeg b/apps/docs/public/img/integrations/logos/replibyte_logo.jpeg new file mode 100644 index 00000000000..7212775333a Binary files /dev/null and b/apps/docs/public/img/integrations/logos/replibyte_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/replicache_logo.jpeg b/apps/docs/public/img/integrations/logos/replicache_logo.jpeg new file mode 100644 index 00000000000..9a61bad9cc2 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/replicache_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/retool_logo.jpeg b/apps/docs/public/img/integrations/logos/retool_logo.jpeg new file mode 100644 index 00000000000..a39afca024a Binary files /dev/null and b/apps/docs/public/img/integrations/logos/retool_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/sequin_logo.png b/apps/docs/public/img/integrations/logos/sequin_logo.png new file mode 100644 index 00000000000..83c9b964eba Binary files /dev/null and b/apps/docs/public/img/integrations/logos/sequin_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/snaplet_logo.png b/apps/docs/public/img/integrations/logos/snaplet_logo.png new file mode 100644 index 00000000000..2ac00b8ad3e Binary files /dev/null and b/apps/docs/public/img/integrations/logos/snaplet_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/streamio_logo.jpeg b/apps/docs/public/img/integrations/logos/streamio_logo.jpeg new file mode 100644 index 00000000000..72f1ba943ae Binary files /dev/null and b/apps/docs/public/img/integrations/logos/streamio_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/streamlit_logo.png b/apps/docs/public/img/integrations/logos/streamlit_logo.png new file mode 100644 index 00000000000..209ceba784b Binary files /dev/null and b/apps/docs/public/img/integrations/logos/streamlit_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/stytch_logo.png b/apps/docs/public/img/integrations/logos/stytch_logo.png new file mode 100644 index 00000000000..2e96124c4a6 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/stytch_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/supertokens_logo.png b/apps/docs/public/img/integrations/logos/supertokens_logo.png new file mode 100644 index 00000000000..72bebc5f51e Binary files /dev/null and b/apps/docs/public/img/integrations/logos/supertokens_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/trevorio_logo.jpeg b/apps/docs/public/img/integrations/logos/trevorio_logo.jpeg new file mode 100644 index 00000000000..066b67230de Binary files /dev/null and b/apps/docs/public/img/integrations/logos/trevorio_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/vercel_logo.jpeg b/apps/docs/public/img/integrations/logos/vercel_logo.jpeg new file mode 100644 index 00000000000..ea0dad906b6 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/vercel_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/vercel_logo.png b/apps/docs/public/img/integrations/logos/vercel_logo.png new file mode 100644 index 00000000000..cae9ecb1c23 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/vercel_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/voltapp_logo.png b/apps/docs/public/img/integrations/logos/voltapp_logo.png new file mode 100644 index 00000000000..57a59e9f115 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/voltapp_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/weweb_logo.jpeg b/apps/docs/public/img/integrations/logos/weweb_logo.jpeg new file mode 100644 index 00000000000..e2e9a20d3f8 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/weweb_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/weweb_logo.png b/apps/docs/public/img/integrations/logos/weweb_logo.png new file mode 100644 index 00000000000..4eee51ea708 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/weweb_logo.png differ diff --git a/apps/docs/public/img/integrations/logos/zapp_run_logo.jpeg b/apps/docs/public/img/integrations/logos/zapp_run_logo.jpeg new file mode 100644 index 00000000000..1b7d2d7a2cd Binary files /dev/null and b/apps/docs/public/img/integrations/logos/zapp_run_logo.jpeg differ diff --git a/apps/docs/public/img/integrations/logos/zuplo_logo.png b/apps/docs/public/img/integrations/logos/zuplo_logo.png new file mode 100644 index 00000000000..34c863e2f84 Binary files /dev/null and b/apps/docs/public/img/integrations/logos/zuplo_logo.png differ diff --git a/apps/docs/public/img/libraries/nextjs-dark-icon.svg b/apps/docs/public/img/libraries/nextjs-dark-icon.svg deleted file mode 100644 index 99afa3413d3..00000000000 --- a/apps/docs/public/img/libraries/nextjs-dark-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/docs/public/img/libraries/nextjs-light-icon.svg b/apps/docs/public/img/libraries/nextjs-light-icon.svg deleted file mode 100644 index 8cf0b722af1..00000000000 --- a/apps/docs/public/img/libraries/nextjs-light-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/logs-api.png b/apps/docs/public/img/logs-api.png index 798abee5f73..79c6aaa12fc 100644 Binary files a/apps/docs/public/img/logs-api.png and b/apps/docs/public/img/logs-api.png differ diff --git a/apps/docs/public/img/logs-auth.png b/apps/docs/public/img/logs-auth.png index a020bb86430..645fc87bdb5 100644 Binary files a/apps/docs/public/img/logs-auth.png and b/apps/docs/public/img/logs-auth.png differ diff --git a/apps/docs/public/img/logs-database.png b/apps/docs/public/img/logs-database.png index 78f9036eeaa..176549de5ab 100644 Binary files a/apps/docs/public/img/logs-database.png and b/apps/docs/public/img/logs-database.png differ diff --git a/apps/docs/public/img/logs-explorer.png b/apps/docs/public/img/logs-explorer.png index 3d21fb0569c..8527b8b3054 100644 Binary files a/apps/docs/public/img/logs-explorer.png and b/apps/docs/public/img/logs-explorer.png differ diff --git a/apps/docs/public/img/logs-functions-edge.png b/apps/docs/public/img/logs-functions-edge.png index 2d0d699cac1..decbe04b664 100644 Binary files a/apps/docs/public/img/logs-functions-edge.png and b/apps/docs/public/img/logs-functions-edge.png differ diff --git a/apps/docs/public/img/logs-functions.png b/apps/docs/public/img/logs-functions.png index efd455955c9..4357b9da74c 100644 Binary files a/apps/docs/public/img/logs-functions.png and b/apps/docs/public/img/logs-functions.png differ diff --git a/apps/docs/public/img/logs-realtime.png b/apps/docs/public/img/logs-realtime.png index 4b93e87e990..41cff800415 100644 Binary files a/apps/docs/public/img/logs-realtime.png and b/apps/docs/public/img/logs-realtime.png differ diff --git a/apps/docs/public/img/logs-storage.png b/apps/docs/public/img/logs-storage.png index d0f98ea43cc..4428ffbde51 100644 Binary files a/apps/docs/public/img/logs-storage.png and b/apps/docs/public/img/logs-storage.png differ diff --git a/apps/docs/public/img/purple-glow-dark.png b/apps/docs/public/img/purple-glow-dark.png new file mode 100644 index 00000000000..6740e956d8d Binary files /dev/null and b/apps/docs/public/img/purple-glow-dark.png differ diff --git a/apps/docs/public/sitemap.xml b/apps/docs/public/sitemap.xml index 246445d80af..64b374684e4 100644 --- a/apps/docs/public/sitemap.xml +++ b/apps/docs/public/sitemap.xml @@ -36,6 +36,12 @@ 0.5 + + https://supabase.com/docs/getting-started + weekly + 0.5 + + https://supabase.com/ weekly @@ -43,7 +49,7 @@ - https://supabase.com/docs/reference + https://supabase.com/docs/ref-pages weekly 0.5 @@ -54,30 +60,6 @@ 0.5 - - https://supabase.com/docs/company/aup - weekly - 0.5 - - - - https://supabase.com/docs/company/privacy - weekly - 0.5 - - - - https://supabase.com/docs/company/sla - weekly - 0.5 - - - - https://supabase.com/docs/company/terms - weekly - 0.5 - - https://supabase.com/docs/handbook/contributing weekly @@ -132,6 +114,18 @@ 0.5 + + https://supabase.com/docs/guides/getting-started + weekly + 0.5 + + + + https://supabase.com/docs/guides/integrations + weekly + 0.5 + + https://supabase.com/docs/guides/realtime weekly @@ -139,7 +133,7 @@ - https://supabase.com/docs/guides/storage-cdn + https://supabase.com/docs/guides/resources weekly 0.5 @@ -150,6 +144,12 @@ 0.5 + + https://supabase.com/docs/guides/tutorials + weekly + 0.5 + + https://supabase.com/docs/guides/with-angular weekly @@ -234,6 +234,54 @@ 0.5 + + https://supabase.com/docs/new/auth + weekly + 0.5 + + + + https://supabase.com/docs/new/index + weekly + 0.5 + + + + https://supabase.com/docs/tutorials/nextjs + weekly + 0.5 + + + + https://supabase.com/docs/reference/index + weekly + 0.5 + + + + https://supabase.com/docs/company/aup + weekly + 0.5 + + + + https://supabase.com/docs/company/privacy + weekly + 0.5 + + + + https://supabase.com/docs/company/sla + weekly + 0.5 + + + + https://supabase.com/docs/company/terms + weekly + 0.5 + + https://supabase.com/docs/learn/auth-deep-dive/auth-deep-dive-jwts weekly @@ -264,12 +312,6 @@ 0.5 - - https://supabase.com/docs/guides/api/generating-types - weekly - 0.5 - - https://supabase.com/docs/guides/cli/local-development weekly @@ -282,36 +324,6 @@ 0.5 - - https://supabase.com/docs/guides/functions/auth - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/best-practices - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/cicd-workflow - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/quickstart - weekly - 0.5 - - https://supabase.com/docs/guides/auth/auth-apple weekly @@ -468,6 +480,18 @@ 0.5 + + https://supabase.com/docs/guides/auth/overview + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/passwordless-login + weekly + 0.5 + + https://supabase.com/docs/guides/auth/row-level-security weekly @@ -480,6 +504,12 @@ 0.5 + + https://supabase.com/docs/guides/auth/social-login + weekly + 0.5 + + https://supabase.com/docs/guides/database/arrays weekly @@ -528,6 +558,12 @@ 0.5 + + https://supabase.com/docs/guides/database/overview + weekly + 0.5 + + https://supabase.com/docs/guides/database/replication weekly @@ -564,6 +600,42 @@ 0.5 + + https://supabase.com/docs/guides/functions/auth + weekly + 0.5 + + + + https://supabase.com/docs/guides/functions/best-practices + weekly + 0.5 + + + + https://supabase.com/docs/guides/functions/cicd-workflow + weekly + 0.5 + + + + https://supabase.com/docs/guides/functions/quickstart + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/architecture + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/features + weekly + 0.5 + + https://supabase.com/docs/guides/hosting/docker weekly @@ -577,7 +649,85 @@ - https://supabase.com/docs/guides/hosting/platform + https://supabase.com/docs/guides/platform + weekly + 0.5 + + + + https://supabase.com/docs/guides/migrations/firebase-auth + weekly + 0.5 + + + + https://supabase.com/docs/guides/migrations/firebase-storage + weekly + 0.5 + + + + https://supabase.com/docs/guides/migrations/firestore-data + weekly + 0.5 + + + + https://supabase.com/docs/guides/migrations/heroku + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/compute-add-ons + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/custom-domains + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/database-usage + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/going-into-prod + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/logs + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/metrics + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/migrating-and-upgrading-projects + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/performance + weekly + 0.5 + + + + https://supabase.com/docs/guides/platform/permissions weekly 0.5 @@ -721,79 +871,67 @@ - https://supabase.com/docs/guides/migrations/firebase-auth + https://supabase.com/docs/guides/api/generating-types weekly 0.5 - https://supabase.com/docs/guides/migrations/firebase-storage + https://supabase.com/docs/guides/storage/access-control weekly 0.5 - https://supabase.com/docs/guides/migrations/firestore-data + https://supabase.com/docs/guides/storage/cdn weekly 0.5 - https://supabase.com/docs/guides/migrations/heroku + https://supabase.com/docs/guides/storage/quickstart weekly 0.5 - https://supabase.com/docs/guides/platform/compute-add-ons + https://supabase.com/docs/guides/storage/storage-sample weekly 0.5 - https://supabase.com/docs/guides/platform/custom-domains + https://supabase.com/docs/new/auth/auth-login weekly 0.5 - https://supabase.com/docs/guides/platform/database-usage + https://supabase.com/docs/guides/resources/examples weekly 0.5 - https://supabase.com/docs/guides/platform/going-into-prod + https://supabase.com/docs/guides/resources/glossary weekly 0.5 - https://supabase.com/docs/guides/platform/logs + https://supabase.com/docs/guides/resources/migrating-to-supabase weekly 0.5 - https://supabase.com/docs/guides/platform/metrics + https://supabase.com/docs/guides/resources/self-hosting weekly 0.5 - https://supabase.com/docs/guides/platform/migrating-and-upgrading-projects - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/performance - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/permissions + https://supabase.com/docs/guides/resources/supabase-cli weekly 0.5 @@ -817,7 +955,25 @@ - https://supabase.com/docs/guides/storage/storage-sample + https://supabase.com/docs/guides/auth/passwordless-login/email-otp-magic-link + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/passwordless-login/phone-sms-otp-messagebird + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/passwordless-login/phone-sms-otp-twilio + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/passwordless-login/phone-sms-otp-vonage weekly 0.5 @@ -888,6 +1044,264 @@ 0.5 + + https://supabase.com/docs/guides/functions/examples/og-image + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-apple + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-azure + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-bitbucket + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-discord + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-facebook + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-github + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-gitlab + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-google + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-keycloak + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-linkedin + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-notion + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-slack + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-spotify + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-twilio + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-twitch + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-twitter + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-workos + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/social-login/auth-zoom + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/quickstarts/nextjs + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/quickstarts/nuxtjs + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/quickstarts/reactjs + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-angular + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-expo + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-flutter + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-angular + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-react + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-vue + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-nextjs + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-nuxt-3 + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-react + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-redwoodjs + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-solidjs + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-svelte + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-sveltekit + weekly + 0.5 + + + + https://supabase.com/docs/guides/getting-started/tutorials/with-vue-3 + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/self-hosting/docker + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/supabase-cli/local-development + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/supabase-cli/managing-enviroments + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-auth + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-data + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-storage + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/migrating-to-supabase/heroku + weekly + 0.5 + + https://supabase.com/docs/reference/api weekly @@ -954,6 +1368,12 @@ 0.5 + + https://supabase.com/docs/reference/javascript/admin-api + weekly + 0.5 + + https://supabase.com/docs/reference/javascript/auth-admin-createuser weekly @@ -984,12 +1404,24 @@ 0.5 + + https://supabase.com/docs/reference/javascript/auth-admin-invoke + weekly + 0.5 + + https://supabase.com/docs/reference/javascript/auth-admin-listusers weekly 0.5 + + https://supabase.com/docs/reference/javascript/auth-admin-resetpasswordforemail + weekly + 0.5 + + https://supabase.com/docs/reference/javascript/auth-admin-updateuserbyid weekly @@ -1428,6 +1860,12 @@ 0.5 + + https://supabase.com/docs/reference/javascript/undefined + weekly + 0.5 + + https://supabase.com/docs/reference/javascript/update weekly @@ -1470,6 +1908,18 @@ 0.5 + + https://supabase.com/docs/reference/dart/auth-admin-invoke + weekly + 0.5 + + + + https://supabase.com/docs/reference/dart/auth-admin-resetpasswordforemail + weekly + 0.5 + + https://supabase.com/docs/reference/dart/auth-currentsession weekly @@ -1482,6 +1932,18 @@ 0.5 + + https://supabase.com/docs/reference/dart/auth-getsession + weekly + 0.5 + + + + https://supabase.com/docs/reference/dart/auth-getuser + weekly + 0.5 + + https://supabase.com/docs/reference/dart/auth-onauthstatechange weekly @@ -1590,6 +2052,12 @@ 0.5 + + https://supabase.com/docs/reference/dart/in + weekly + 0.5 + + https://supabase.com/docs/reference/dart/in_ weekly @@ -1614,6 +2082,12 @@ 0.5 + + https://supabase.com/docs/reference/dart/is + weekly + 0.5 + + https://supabase.com/docs/reference/dart/is_ weekly @@ -1854,6 +2328,12 @@ 0.5 + + https://supabase.com/docs/reference/dart/undefined + weekly + 0.5 + + https://supabase.com/docs/reference/dart/update weekly diff --git a/apps/docs/scripts/build-search.js b/apps/docs/scripts/build-search.js index 91e69c3fae8..07865a2344c 100644 --- a/apps/docs/scripts/build-search.js +++ b/apps/docs/scripts/build-search.js @@ -25,10 +25,6 @@ const ignoredFiles = [ 'pages/_app.tsx', 'pages/_document.tsx', 'pages/[...slug].tsx', - 'pages/company/aup.md', - 'pages/company/privacy.md', - 'pages/company/sla.md', - 'pages/company/terms.md', 'pages/handbook/contributing.mdx', 'pages/handbook/introduction.mdx', 'pages/handbook/supasquad.mdx', @@ -70,6 +66,15 @@ async function walk(dir) { console.log('Preparing docs indexing for Algolia') + function extractMeta(mdx) { + const regex = /^export\sconst\smeta\s=\s(\{[\w\s':,]*\})/gm + const match = regex.exec(mdx) + if (match) { + return JSON.parse(match[1]) + } + return null + } + try { const indexName = process.env.NEXT_PUBLIC_ALGOLIA_INDEX_NAME const client = algoliasearch( @@ -94,7 +99,7 @@ async function walk(dir) { if (metaIndex !== -1) { const metaString = fileContents - .slice(metaIndex + 20, fileContents.indexOf('}') + 1) + .slice(metaIndex + 20, fileContents.indexOf('}', metaIndex + 1) + 1) .replace(/\n/g, '') .slice(0, -2) + '}' const meta = eval(`(${metaString})`) diff --git a/apps/docs/styles/algolia-search.scss b/apps/docs/styles/algolia-search.scss index d9d9bf0d870..a789f88a5bb 100644 --- a/apps/docs/styles/algolia-search.scss +++ b/apps/docs/styles/algolia-search.scss @@ -966,4 +966,10 @@ body { @media (hover: hover) { display: none; } +} + +// search bar +.dark .DocSearch-Input { + background-color: var(--colors-scale2); + color: white; } \ No newline at end of file diff --git a/apps/docs/styles/ch.scss b/apps/docs/styles/ch.scss new file mode 100644 index 00000000000..b9bff92fe95 --- /dev/null +++ b/apps/docs/styles/ch.scss @@ -0,0 +1,604 @@ +.ch-terminal { + font-size: 14px; + height: 100%; + box-sizing: border-box; + background: #1e1e1e; + color: #fafafa; + overflow: hidden; + padding: 0 8px 8px; + font-family: 'Courier New', Courier, monospace; + // font-family: Ubuntu, Droid Sans, -apple-system, BlinkMacSystemFont, Segoe WPC, Segoe UI, + // sans-serif; +} +.ch-terminal-container .ch-frame-content { + background-color: inherit; +} +.ch-terminal-prompt { + color: #8fa2db; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.ch-terminal-content { + margin: 0; +} +.ch-terminal-output { + opacity: 0.66; +} +.ch-code-line-number { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-align: right; + display: inline-block; + box-sizing: border-box; + padding-right: 1.5ch; + font-variant-numeric: tabular-nums; +} +.ch-code-scroll-parent { + display: block; + font-weight: 400; + font-size: 14px; + line-height: 19px; + letter-spacing: 0; + border-radius: 0; + background-color: unset; + color: unset; + padding: 0; + box-sizing: content-box; + border: none; +} +.ch-code-scroll-parent ::-moz-selection { + background-color: var(--ch-selection-background); + color: inherit; +} +.ch-code-scroll-parent ::selection { + background-color: var(--ch-selection-background); + color: inherit; +} +.ch-code-button { + position: absolute; + top: 10px; + right: 10px; + width: 1.1em; + height: 1.1em; + cursor: pointer; +} +.ch-no-scroll { + overflow: hidden; +} +.ch-expand-dialog { + height: 100vh; + width: 100vw; + max-width: 900px; + border: 0; + background-color: transparent; +} +.ch-expand-dialog::-webkit-backdrop { + background-color: rgba(0, 0, 0, 0.8); +} +.ch-expand-dialog::backdrop { + background-color: rgba(0, 0, 0, 0.8); +} +.ch-expand-close { + position: absolute; + top: 10px; + right: 10px; + cursor: pointer; + color: #fff; + width: 26px; + height: 26px; +} +.ch-expand-dialog-content { + color: #fff; + position: absolute; + inset: 40px; + overflow: hidden; + border-radius: 8px; + border: 1px solid; +} +.ch-code-browser { + display: flex; + height: 100%; + // font-family: 'Courier New', Courier, monospace; + // font-family: Ubuntu, Droid Sans, -apple-system; +} +.ch-code-browser-sidebar { + border-right: 1px solid; + min-width: 100px; + padding: 1em 0; + font-size: 0.95rem; +} +.ch-code-browser-content { + overflow: auto; + flex: 1; + padding: 1em; + white-space: pre; + font-family: monospace; + font-weight: 400; + font-size: 1rem; + line-height: 1.2rem; + letter-spacing: 0; + position: relative; +} +.ch-code-browser-content ::-moz-selection { + background-color: var(--ch-selection-background); + color: inherit; +} +.ch-code-browser-content ::selection { + background-color: var(--ch-selection-background); + color: inherit; +} +.ch-code-browser-sidebar-file, +.ch-code-browser-sidebar-folder { + padding: 0.1em 1em; +} +.ch-code-browser-sidebar-file { + cursor: pointer; +} +.ch-code-browser-sidebar-file:hover { + background-color: var(--ch-hover-background); + color: var(--ch-hover-foreground); +} +.ch-code-browser-button { + width: 1.5em; + height: 1.5em; + cursor: pointer; + min-width: 1.5em; + min-height: 1.5em; + position: absolute; + right: 0.8em; + top: 0.8em; +} +.ch-editor-tab { + border-right: 1px solid #252526; + min-width: -webkit-fit-content; + min-width: -moz-fit-content; + min-width: fit-content; + flex-shrink: 1; + position: relative; + display: flex; + white-space: nowrap; + cursor: pointer; + height: 100%; + box-sizing: border-box; + padding-left: 15px; + padding-right: 15px; + background-color: #2d2d2d; + color: hsla(0, 0%, 100%, 0.5); + min-width: 0; + border-bottom: 1px solid; + + font-family: 'Office Code Pro'; +} +.ch-editor-tab-active { + background-color: red; + color: #fff; + min-width: unset; +} + +.ch-editor-tab > div { + margin-top: auto; + margin-bottom: auto; + font-size: 12px; + line-height: 1.4em; + text-overflow: ellipsis; + overflow: hidden; +} +.ch-editor-frame { + display: flex; + flex-direction: column; + position: relative; + overflow: hidden; + font-family: Ubuntu, Droid Sans, -apple-system, BlinkMacSystemFont, Segoe WPC, Segoe UI, + sans-serif; + -moz-column-break-inside: avoid; + break-inside: avoid; + --ch-title-bar-height: 40px; + height: 100%; + // border: 1px solid red; +} +.ch-editor-frame .ch-frame-title-bar { + background: none; +} +.ch-editor-terminal { + position: absolute; + overflow: hidden; + bottom: 0; + width: 100%; + background-color: #1e1e1e; + color: #e7e7e7; + border-top: 1px solid hsla(0, 0%, 50.2%, 0.35); + padding: 0 8px; + box-sizing: border-box; +} +.ch-editor-terminal-tab { + text-transform: uppercase; + padding: 4px 10px 3px; + font-size: 11px; + line-height: 24px; + display: flex; +} +.ch-editor-terminal-tab > span { + border-bottom: 1px solid #e7e7e7; +} +.ch-editor-terminal-content { + margin-top: 8px; + height: calc(100% - 40px); + box-sizing: border-box; +} +.ch-editor-terminal-content .ch-terminal { + font-size: 12px; + margin: 0; +} +.ch-editor-button { + width: 1.5em; + height: 1.5em; + cursor: pointer; + min-width: 1.5em; + min-height: 1.5em; + margin-right: 0.8em; +} +.ch-frame { + height: 100%; + display: flex; + flex-direction: column; +} +.ch-frame, +.ch-simple-frame { + font-family: Ubuntu, Droid Sans, -apple-system, BlinkMacSystemFont, Segoe WPC, Segoe UI, + sans-serif; + -moz-column-break-inside: avoid; + break-inside: avoid; + --ch-title-bar-height: 30px; +} +.ch-simple-frame { + border-radius: 6px; + overflow: hidden; + box-shadow: 0 13px 27px -5px rgba(50, 50, 93, 0.25), 0 8px 16px -8px rgba(0, 0, 0, 0.3), + 0 -6px 16px -6px rgba(0, 0, 0, 0.025); +} +.ch-frame-content { + background-color: var(--ch-content-background, #fafafa); + flex-grow: 1; + flex-shrink: 1; + flex-basis: 0; + min-height: 0; +} +.ch-frame-zoom { + --ch-frame-zoom: 1; + overflow: auto; + position: relative; + width: calc(100% / var(--ch-frame-zoom)); + height: calc(100% / var(--ch-frame-zoom)); + transform: scale(var(--ch-frame-zoom)); + transform-origin: left top; +} +.ch-frame-title-bar { + font-size: 12px; + width: 100%; + height: var(--ch-title-bar-height); + min-height: var(--ch-title-bar-height); + flex-grow: 0; + flex-shrink: 0; + display: flex; + align-items: center; + background-color: var(--ch-content-background, #252526); + color: #ebebed; + position: relative; +} +.ch-frame-middle-bar { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + font-size: 1.2em; +} +.ch-frame-left-bar, +.ch-frame-right-bar { + flex-grow: 1; + flex-basis: 1em; + height: 100%; + display: flex; + align-items: center; + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; +} +.ch-frame-buttons { + margin: 0 0.8em; + flex-shrink: 0; + height: 1em; + width: 4.16em; + // display: flex; + display: none; // @mildtomato +} +.ch-frame-button { + width: 1em; + height: 1em; + border: 0.08em solid; + border-radius: 50%; + display: inline-block; + box-sizing: border-box; +} +.ch-frame-button-space { + width: 0.56em; +} +.ch-frame-button-left { + border-color: #ce5347; + background-color: #ed6b60; +} +.ch-frame-button-middle { + border-color: #d6a243; + background-color: #f5be4f; +} +.ch-frame-button-right { + border-color: #58a942; + background-color: #62c554; +} +.ch-mini-browser { + height: 100%; +} +.ch-mini-browser .ch-frame-content iframe, +.ch-mini-browser .ch-frame-content video { + border: none; + position: absolute; + height: 100%; + width: 100%; +} +.ch-mini-browser .ch-frame-title-bar input { + height: 1.4em; + font-size: 1em; + border-radius: 0.5em; + border: none; + box-shadow: none; + flex: 1; + padding: 0 10px; + color: #544; + min-width: 5px; + width: 5px; +} +.ch-browser-button { + margin: 0 1em; + color: #999; +} +.ch-browser-back-button { + margin-left: 0.2em; +} +.ch-browser-forward-button { + margin-left: 0; +} +.ch-browser-open-button { + color: inherit; +} +.ch-browser-open-icon { + display: block; +} +.ch-spotlight { + display: flex; + gap: 1.1rem; + margin: 1rem 0; +} +.ch-spotlight-tabs { + display: flex; + flex-flow: column; + flex: 1; + gap: 0.5rem; + align-items: stretch; +} +.ch-spotlight-tab { + border-radius: 0.25rem; + margin: 0 -0.5rem; + padding: 0 0.5rem; + border: 1px solid #e3e3e3; +} +.ch-spotlight-tab:hover { + border-color: red; +} +.ch-spotlight-tab[data-selected] { + border-color: red; +} +.ch-spotlight-sticker { + position: -webkit-sticky; + position: sticky; + top: 10vh; + display: flex; + align-self: stretch; + flex-flow: column; + justify-content: center; + width: 420px; + min-height: min(100%, 80vh); + max-height: 80vh; +} +.ch-spotlight-sticker .ch-codeblock, +.ch-spotlight-sticker .ch-codegroup { + width: 100%; + min-width: 100%; + min-height: min(100%, 80vh); + max-height: 80vh; + margin-top: 0; + margin-bottom: 0; + flex: 1; +} +.ch-spotlight-with-preview .ch-spotlight-sticker { + height: 80vh; + gap: 0.5rem; +} +.ch-spotlight-with-preview .ch-spotlight-sticker .ch-codeblock, +.ch-spotlight-with-preview .ch-spotlight-sticker .ch-codegroup { + min-height: 0; + flex: 1; +} +.ch-spotlight-with-preview .ch-spotlight-preview { + height: 280px; +} +.ch-scrollycoding { + display: flex; + position: relative; + margin: 1rem 0; + gap: 1rem; +} +.ch-scrollycoding-content { + box-sizing: border-box; + flex: 1; +} +.ch-scrollycoding-step-content { + border-radius: 8px; + margin: 0 -0.5rem; + padding: 1rem 0.5rem; + border: 1.5px solid transparent; + min-height: 180px; +} +.ch-scrollycoding-step-content[data-selected] { + border-color: #0070f3; +} +.ch-scrollycoding-step-content > :first-child { + margin-top: 0; +} +.ch-scrollycoding-step-content > :last-child { + margin-bottom: 0; +} +.ch-scrollycoding-sticker { + position: -webkit-sticky; + position: sticky; + top: 10vh; + display: flex; + align-self: start; + flex-flow: column; + justify-content: center; + width: var(--ch-scrollycoding-sticker-width, 420px); + max-height: 80vh; +} +.ch-scrollycoding-with-preview .ch-scrollycoding-sticker { + height: 80vh; + gap: 0.5rem; +} +.ch-scrollycoding-with-preview .ch-scrollycoding-sticker .ch-codeblock, +.ch-scrollycoding-with-preview .ch-scrollycoding-sticker .ch-codegroup { + flex: 1; +} +.ch-scrollycoding-with-preview .ch-scrollycoding-preview { + height: 280px; +} +.ch-scrollycoding-sticker .ch-codeblock, +.ch-scrollycoding-sticker .ch-codegroup { + width: 100%; + min-width: 100%; + min-height: var(--ch-scrollycoding-code-min-height, 200px); + max-height: 80vh; + margin-top: 0; + margin-bottom: 0; +} +.ch-scrollycoding-static .ch-preview { + height: 150px; +} +.ch-slideshow { + margin: 1rem 0; +} +.ch-slideshow-slide { + display: flex; + flex-flow: row; + gap: 0.5rem; + align-items: stretch; + aspect-ratio: 16/9; +} +.ch-slideshow-slide .ch-codeblock, +.ch-slideshow-slide .ch-codegroup { + flex: 2; + margin-top: 0; + margin-bottom: 0; + height: auto; +} +.ch-slideshow .ch-slideshow-preview { + flex: 1; + height: auto; + min-width: 0; +} +.ch-slideshow-range { + display: flex; + flex-flow: row; + gap: 0.5rem; +} +.ch-slideshow-range input { + flex: 1; +} +.ch-slideshow-notes { + border-radius: 0.25rem; + margin-top: 1rem; + padding: 1rem; + border: 1px solid #e3e3e3; +} +.ch-slideshow-note { + min-height: 140px; + max-height: 140px; + padding: 0.05px; + overflow: auto; +} +.ch-codeblock, +.ch-codegroup, +.ch-preview { + border-radius: 6px; + overflow: hidden; + height: -webkit-max-content; + height: -moz-max-content; + height: max-content; + // box-shadow: 0 13px 27px -5px rgba(50, 50, 93, 0.25), 0 8px 16px -8px rgba(0, 0, 0, 0.3), + // 0 -6px 16px -6px rgba(0, 0, 0, 0.025); + -webkit-print-color-adjust: exact; + print-color-adjust: exact; +} +.ch-codeblock > *, +.ch-codegroup > *, +.ch-preview > * { + height: 100%; + max-height: inherit; + min-height: inherit; +} +.ch-codeblock, +.ch-codegroup { + margin-top: 1.25em; + margin-bottom: 1.25em; + border: 1px solid var(--colors-scale5); // @mildtomato +} +.ch-inline-code > code { + padding: 0.2em 0.15em; + margin: 0.1em -0.05em; + border-radius: 0.25em; + font-size: 0.9rem; +} +.ch-section-link, +.ch-section-link * { + text-decoration: underline; + -webkit-text-decoration-style: dotted; + text-decoration-style: dotted; + text-decoration-thickness: 1px; + -webkit-text-decoration-color: var(--ch-code-foreground, currentColor); + text-decoration-color: var(--ch-code-foreground, currentColor); +} +.ch-section-link[data-active='true'] { + background-color: rgba(186, 230, 253, 0.4); +} +.ch-section-link[data-active='true'], +.ch-section-link[data-active='true'] * { + text-decoration-thickness: 1.5px; +} +.ch-code-inline-mark { + border-radius: 0.25rem; + padding: 0.2rem 0.15rem 0.1rem; + margin: 0 -0.15rem; +} +.ch-code-multiline-mark-border { + background: var(--colors-scale12) !important; + width: 3px; + height: 100%; + position: absolute; + left: 0; +} +.ch-code-inline-link, +.ch-code-link :not(span) > span { + text-decoration: underline; + -webkit-text-decoration-style: dotted; + text-decoration-style: dotted; + color: inherit; +} diff --git a/apps/docs/styles/main.scss b/apps/docs/styles/main.scss index 4b418f53612..db00f8c12e2 100644 --- a/apps/docs/styles/main.scss +++ b/apps/docs/styles/main.scss @@ -23,7 +23,7 @@ } body { - @apply bg-white dark:bg-[#1c1c1c] #{!important}; + @apply bg-scale-100 dark:bg-[#1c1c1c] #{!important}; scroll-behavior: smooth; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; @@ -34,14 +34,14 @@ body { color: #333 !important; } -a { - text-decoration: none !important; -} +// a { +// text-decoration: none !important; +// } article h1 { - margin-bottom: 2rem !important; - font-size: 3rem !important; - font-weight: 400 !important; + // margin-bottom: 2rem !important; + // font-size: 3rem !important; + // font-weight: 400 !important; } .thin-scrollbar { @@ -238,3 +238,18 @@ article p code { background: none; border: none; } + +// prevent horizontal scroll on mobile for tablist tab headers +div[role='tablist'] { + @media screen and (min-width: 320px) { + max-width: 320px; + } + + @media screen and (min-width: 600px) { + max-width: 520px; + } + + @media screen and (min-width: 769px) { + max-width: 620px; + } +} diff --git a/apps/docs/styles/new-docs.scss b/apps/docs/styles/new-docs.scss new file mode 100644 index 00000000000..10591acd3d6 --- /dev/null +++ b/apps/docs/styles/new-docs.scss @@ -0,0 +1,22 @@ +// overwrite for typography + +// .prose ul { +// li { +// position: relative; +// } +// li::before { +// position: absolute; +// top: 0.75rem; +// left: -1rem; +// height: 0.125rem; +// width: 0.5rem; +// border-radius: 0.25rem; +// background-color: var(--colors-scale9); +// opacity: 0.6; +// content: ''; +// } +// } + +// article { +// background: yellow !important; +// } diff --git a/apps/docs/types/index.ts b/apps/docs/types/index.ts new file mode 100644 index 00000000000..c1e58ad998a --- /dev/null +++ b/apps/docs/types/index.ts @@ -0,0 +1 @@ +export * from './next' diff --git a/apps/docs/types/next.ts b/apps/docs/types/next.ts new file mode 100644 index 00000000000..b525bed86bc --- /dev/null +++ b/apps/docs/types/next.ts @@ -0,0 +1,11 @@ +import { NextPage } from 'next' +import { AppProps } from 'next/app' +import { ReactElement, ReactNode } from 'react' + +export type AppPropsWithLayout = AppProps & { + Component: NextPageWithLayout +} + +export type NextPageWithLayout = NextPage & { + getLayout?: (page: ReactElement) => ReactNode +} diff --git a/apps/www/_blog/2022-08-19-launch-week-5-one-more-thing.mdx b/apps/www/_blog/2022-08-19-launch-week-5-one-more-thing.mdx index 1bf4d3bf1cc..1ad675b6b76 100644 --- a/apps/www/_blog/2022-08-19-launch-week-5-one-more-thing.mdx +++ b/apps/www/_blog/2022-08-19-launch-week-5-one-more-thing.mdx @@ -70,7 +70,7 @@ We've released granular permissions for the Supabase Dashboard. Dashboard permis We're starting with 3 roles—Owner, Administrator, and Developer—which you can edit in the Org settings of the Dashboard. There's a tooltip in the header of the members table, which elaborates on the individual permissions available for each role. -[Read more](/docs/guides/hosting/platform#manage-team-members). +[Read more](/docs/guides/platform#manage-team-members). --- diff --git a/apps/www/_blog/2022-12-06-the-supabase-content-storm.mdx b/apps/www/_blog/2022-12-06-the-supabase-content-storm.mdx index 07404711e42..f25e4dc11fb 100644 --- a/apps/www/_blog/2022-12-06-the-supabase-content-storm.mdx +++ b/apps/www/_blog/2022-12-06-the-supabase-content-storm.mdx @@ -29,7 +29,7 @@ More than 30 creators participated in creating content in different formats and - [Hoppscotch with GraphQL](https://www.youtube.com/watch?v=HoBXQng3aK4) by Jamie Barton. - [Supabase with TypeScript: using tRPC and Prisma to achieve end-to-end typesafety](https://noahflk.com/blog/supabase-typescript-trpc) by Noah. - [How to Connect Browser Extensions to Supabase](https://akoskm.com/how-to-connect-browser-extensions-to-supabase) by Ákos Kőműves. -- [A Chili Cookoff with Rust, Rocket, Render, and Supabase](bradcypert.com/chili-cookoff-with-rust-rocket-render-and-supabase/) by Brad Cypert. +- [A Chili Cookoff with Rust, Rocket, Render, and Supabase](https://bradcypert.com/chili-cookoff-with-rust-rocket-render-and-supabase/) by Brad Cypert. - [Authenticating users with Remix and Supabase](https://makerkit.dev/blog/tutorials/remix-supabase-auth) by Giancarlo Buomprisco. - [Automatic Spotify Playlist Creation with Pipedream and Supabase](https://www.ianwootten.co.uk/2022/12/06/automatic-spotify-playlist-creation-with-pipedream-and-supabase/) by Ian Wootten. - [Accept Payments For Your African-Based Business Using Supabase Edge Functions and Paystack](https://blog.hijabicoder.dev/accept-payments-for-your-african-based-business-using-supabase-edge-functions-and-paystack) by Fatuma Abdullahi. diff --git a/apps/www/_blog/2022-12-07-supabase-beta-november-2022.mdx b/apps/www/_blog/2022-12-07-supabase-beta-november-2022.mdx index d1387baddc8..e60f479dff9 100644 --- a/apps/www/_blog/2022-12-07-supabase-beta-november-2022.mdx +++ b/apps/www/_blog/2022-12-07-supabase-beta-november-2022.mdx @@ -24,7 +24,7 @@ Next week, we go all out for LW6. It’s 5 days of shipping, including major fea ![Remix Auth Helpers](/images/blog/2022-12-07-november-beta-update/remix-auth-helpers.jpg) -It’s here! The much-awaited Remix Auth Helpers make server-side auth even easier and with a better experience for server-side rendering. Up to date with supabase-js V2 and can be used with Typescript. +It’s here! The much-awaited Remix Auth Helpers make server-side auth even easier and with a better experience. Up to date with supabase-js V2 and can be used with Typescript. [Read the docs](https://supabase.com/docs/guides/auth/auth-helpers/remix) @@ -40,7 +40,7 @@ Plus, we published three new functions examples: [Generate OG Images](https://gi - Fixed two issues with the `supabase.auth.signOut` function: [cookies not clearing properly](https://github.com/supabase/gotrue/pull/830) and [session not removed](https://github.com/supabase/gotrue-js/pull/541). -- You can now customize magic links by providing access to the `HashedToken`. [PR](https://github.com/supabase/gotrue/pull/707) +- You can now customize magic links by providing access to the `{{ .TokenHash }}`. [PR](https://github.com/supabase/gotrue/pull/707) - Now you can do redirects from your functions. [PR](https://github.com/supabase/supabase/issues/10325) @@ -93,8 +93,6 @@ Discover other great projects: [Made with Supabase](https://www.madewithsupabas - ReactJS + Supabase Fullstack CRUD Application Development. [Youtube Playlist](https://youtube.com/playlist?list=PLl6EcvA_AoxEFqwT_rNs1uZnnf7LSEoji) - How to connect a ESP8266 to a Streamlit App using Supabase database. [Video](https://www.youtube.com/watch?v=wI209WK3-VM) - - ## Meme Zone This month’s meme comes courtesy of Fireship. [Follow us on Twitter](https://twitter.com/supabase) for more. diff --git a/apps/www/_blog/2022-12-09-launch-week-6-hackathon.mdx b/apps/www/_blog/2022-12-09-launch-week-6-hackathon.mdx new file mode 100644 index 00000000000..212e9cce132 --- /dev/null +++ b/apps/www/_blog/2022-12-09-launch-week-6-hackathon.mdx @@ -0,0 +1,115 @@ +--- +title: 'Launch Week 6 Hackathon' +description: Build an Open Source Project, Win $1500 and the Supabase Darkmode Keyboard +author: ant_wilson +image: lw6-hackathon/thumbnail.jpg +thumb: lw6-hackathon/thumbnail.jpg +tags: + - launch-week + - hackathon +date: '2022-12-09' +toc_depth: 3 +--- + + +The official Supabase Hackathon starts on Friday 9th December at 8am Pacific Time and ends Monday 19th December at 00:01am. + +[Launch Week](https://supabase.com/launch-week) is about to kick off and we're running a hackathon in parallel. + +You can win $1500 in GitHub sponsorships and an official Supabase Keyboard (extremely limited edition), along with a bunch of other prizes! + +See all the [winners from all the previous hackathons](https://supabase.com/blog/tags/hackathon) for inspiration. + +![Supabase Keyboard](/images/blog/lw6-hackathon/keyboard.png) + +## Key Facts + +- You have 10 days to build a new **Open Source** project using Supabase. + - Starting 8:00am PT Friday 9th December 2022 +- Build whatever you want - a project, app, tool, library, anything +- Enter as an individual, or as a team of up to 5 people +- Submission deadline is 00:01am early Monday morning PT 19th December 2022 +- There are 5 prize categories. + - Best overall project will win $1500 in GitHub sponsorships, and a Supabase Keyboard for each team member. + - Most fun/interesting, best Flutter project, and best storage project will all win a limited edition Hackathon swag kit for each team member! + - Our friends at [Deno](https://deno.land/) will be judging a special guest category: Best Edge Functions Project! They will be providing some [special swag](https://deno.com/blog/edge-functions-supabase-launch-week-6-hackathon) for the winners! + +## Details + +### Schedule + +- The Hackathon begins at 8:00am PT Friday 9th December 2022 +- Work on your project any time for the next 10 days +- Submission deadline (00:01am early Monday morning PT 19th December 2022) + +### Prizes + +There are 5 chances to win, there will be prizes for: + +- Best Overall Project ($1500 in GitHub Sponsorship & Supabase Keyboards) + - to be paid as 3x$500 GitHub Sponsorships (over 3 months) +- Most Fun/Interesting (Swag kit) +- Best Flutter Project (Swag kit) +- Best Storage Project (Swag kit) +- Best Edge Functions Project (Deno Swag kit) + + +There will be winner and runner-up prizes for each category. Every team member on winning/runner-up teams gets a supaverified swag kit. + +![Swag kit](/images/blog/lw6-hackathon/swagkit.png) + +### Submission + +You should submit your project using [this form](https://www.madewithsupabase.com/launch-week-6). + +### Judges + +Best Edge Functions Project category will be judged by our friends at [Deno](https://deno.land/), and other categories will be judged by the Supabase team. +We will be looking for: + +- creativity/inventiveness +- functions correctly/smoothly +- visually pleasing +- technically impressive +- use of Supabase features + - deep usage of a single feature or + - broad usage are both ok +- FUN! 😃 + +### Rules + +- Team size 1-5 (all team members on winning teams will receive a prize) +- You cannot be in multiple teams +- One submission per team +- All design elements, code, etc. for your project must be created **during** the event +- All entries must be Open Source (link to source code required in entry) +- Must use Supabase in some capacity +- Can be any language or framework +- You must submit before the deadline (no late entries) + +### Community + +The Supabase Team will be taking part in the Hackathon and you'll find us live building in our discord all week. Please join us by building in public: + +- Text channel: hackathon +- Audio channel: hackathon + +If you need help or advice when building, find other people to join your team, or if you just want to chill and watch people build, come and join us! + +[Join our Discord](https://discord.supabase.com) + +![Discord Hangout](/images/blog/hackathon/community.png) + +### Launch Week + +Don't forget to checkout the new feature's being announced as part of [Launch Week](/launch-week). + +- [Previous Hackathon Prize Winners](https://supabase.com/blog/launch-week-5-hackathon-winners) +- [Who We Hire at Supabase - Founders Chat](https://youtu.be/-BG9XptyCKI) + + +### Additional Info + +- Any intellectual property developed during the hackathon will belong to the team that developed it. We expect that each team will have an agreement between themselves regarding the IP, but this is not required +- By making a submission you grant Supabase permission to use screenshots, code-snippets and/or links to your project or content of your README on our Twitter, blog, website, email updates, and in the Supabase discord server. Supabase does not make any claims over your IP. +- $1500 prize will be paid by making a GitHub sponsorship to the winning repo, $500/month for 3 months. The goal here is to create a sustainable project that will be continue to be maintained for the duration of the sponsorship period (and hopefully beyond :) ) diff --git a/apps/www/_blog/2022-12-09-who-we-hire.mdx b/apps/www/_blog/2022-12-09-who-we-hire.mdx new file mode 100644 index 00000000000..4ebfa438775 --- /dev/null +++ b/apps/www/_blog/2022-12-09-who-we-hire.mdx @@ -0,0 +1,106 @@ +--- +title: 'Who We Hire at Supabase' +description: Traits we look for to maintain a culture of shipping fast and often +author: ant_wilson +image: who-we-hire.jpg +thumb: who-we-hire-cover.jpg +tags: + - launch-week +date: '2022-12-09' +toc_depth: 3 +youtubeHero: https://www.youtube-nocookie.com/embed/-BG9XptyCKI +--- + +It’s been 12 months since I wrote [How we launch at Supabase](https://supabase.com/blog/supabase-how-we-launch), which details our Launch strategy. This methodology helped us grow our hosted platform 46% month-over-month for the first 18 months since [first launching on Hacker News](https://news.ycombinator.com/item?id=23319901) in summer 2020. + +In the last 12 months we’ve continued to grow the number of databases deployed on our platform by a further 3.5x and increased revenue by 1300%, all thanks to a relentless team and intense shipping schedule. + +We’ve upgraded our methodology in a few ways, which I’ll touch on briefly, but it’s become clear in the time that we’ve been running Supabase that whilst methodology is important - having the right people on the bus is paramount. It’s the team who are relentlessly pushing us to do more, better, faster. + +Here I’ll discuss some of the traits that have shaped culture at Supabase, and defined what we look for in new candidates. + +![A chart showing growth at Supabase](/images/blog/how-it-started.jpg) + +Here’s some traits we’ve observed in people at Supabase that make them effective team members: + +### Extreme effectiveness when working asynchronously + +People who require a lot of face-to-face collaboration are unlikely to be successful at Supabase. Major projects have gone from inception, through implementation, to marketing and launch without a single synchronous meeting. Our team is now 60 people spread across 25 different countries. We focus on hiring the best person for the job regardless of geography. A nice side effect of this is excellent global support coverage (everyone from the CFO to the infra team has “front line support” listed as the first item in their job description) and a true appreciation of decreasing latency globally and not just for `us-east-1`. + +With so many timezones, a dependence on scheduled face time would kill our momentum, so meetings are used as a last resort. This isn’t to say that there are zero recurring meetings at Supabase, but in our ideal world there would be. + +### Egoless + +A willingness to do the [schlep](http://www.paulgraham.com/schlep.html) is essential to working at Supabase. Behind every shiny new feature we ship is thousands of hours of ruthless hard work and maintenance. The best people in the company have come to be known as “Supa-unblockers”; people who take work off your plate rather than piling it on. And being senior is no exception. We don’t have managers, which means all individuals need to: + +- do IC (independent contributor) work as their primary job. +- self manage, and develop the skills necessary to ruthlessly prioritise tasks with the business goals always in mind. +- have the full picture - everyone in the team has access to our metrics and we share a long list of product principles which enables everyone to make high-level decisions autonomously. + +### Kaizen mindset + +[Kaizen](https://en.wikipedia.org/wiki/Kaizen) in a Supabase context is the idea that each process should be continuously and incrementally improved, with small and frequent changes being preferred over larger ones. This is true for all process, from company culture to product updates. It allows us to chunk down large projects (with the bonus that new starters can start contributing in their first week) and ensures smooth gradual changes to culture. + +### Default to action + +The very first day of Supabase (6th Jan 2020), I met Copple for an all-day white-boarding session where we explored in detail everything that we thought Supabase could be, and how we were going to achieve it. We dumped down ideas on fund raising, product, competition, marketing, everything. At the end of what felt like a marathon, around the point that most people would pop the kettle on and start rummaging in the cupboards for the last remaining packet of Custard Creams (just me?), Copple opened his laptop and immediately started work. It was a simple act, but in that moment he set the pace for development at Supabase. Never would there ever be a whiff of “Let’s meet next week to discuss”. The words we encourage people to default to instead is “why not now?”. + +### Unreasonable levels of ambition + +When you find all of the above traits in a single person, your definition of the word ‘feasible’ changes dramatically. At the start of every product cycle, we ask the question “what is the most ambitious thing we can hope to achieve in the next 3 months?”, and the team never fail to push the boundary on what we previously considered reasonable. Maybe it’s because we work in Dev Tools, but it’s amazing to watch developers productise solutions to their own problems. The right people don’t need to run a customer survey to know what to work on next, they’re obsessed with solving their own problems, have strong opinions on what great looks like, and won’t stop until they get there. + +### A founder mindset + +We have a bias towards people who previously ran their own companies. This typically hints towards high levels of personal ambition. Ex-founders tend to be very flexible in their role. They can identify low hanging fruit and change focus quickly to address the needs of the business as a whole. If the person is technical, it also reduces the translation needed across the tech and business sides of the company. Something we especially value are team members who take on responsibility without asking and without being asked. Founders do this regularly. Clearly these traits are not only found in people who’ve started companies, but it can be an indication. It’s not the credentials that we value most, but the mindset. We expect everyone who works at Supabase to act like a business owner, and to solidify this part of everyone’s compensation package is an ESOP apportionment with [a 10 year exercise window](https://github.com/holman/extended-exercise-windows). + +--- + +By now, it should be no surprise that I estimate our product and growth momentum is actually 90% about the people, and only 10% about structure. But I’ll detail the structure anyway, since it’s still an important part of keeping people unblocked. + +## Team structure + +We often joke that building Supabase is like building 5 startups simultaneously, due to the number of modular products that make up the Supabase stack (Database, Auth, Realtime, etc.). Our culture has grown to support this idea - with an extremely high degree of autonomy bestowed to teams (and in fact, to everyone who works here). + +### Independent teams + +Previously there was a lot of crossover when it came to who worked on what, in the early days we had more products to manage than people. But these days the product team is broken roughly into: + +- Postgres / PostgREST +- Platform +- Auth +- Storage +- Realtime +- Functions +- CLI / API +- QA (cross cutting) +- Docs (cross cutting) +- Design (cross cutting) +- Front End (cross cutting) + +With some of these breaking down further into sub-teams (e.g. Realtime is actually more like an Elixir team that handles Observability, Logflare, and more). + +Inter-team communication is one of the harder problems we’ve had to solve over the past year. As the teams grow and move faster internally, how do we make sure they can stay in sync with the rest of the org? For example, things like Front End, QA, and Docs need to have a level of consistency to ensure Supabase is a coherent product. One way we’ve solved this is by making sure the cross-cutting teams act like a consultancy rather than a service. When a product team like Auth require some Front End work, it’s very rarely a case of “throwing tasks over the fence” to the cross cutting teams, rather those teams will consult with the product team on how they can work together to get a project over the line. Another example is the docs team. They won’t write all the docs for a feature, that’s still the job of the team that implemented the feature (it’s important that we view docs as part of the product itself and not a byproduct). The team in question will consult with Team Docs on where the docs should live, and the format they should take to maintain coherence across all products in the stack. + +Staying aligned on goals is also key. Each team is aware of the overall business metrics, but also the number of active, and paying projects that make use of their product’s APIs. It’s up to them to dig into the data and best decide how to boost their metrics, and to establish a hypothesis of how their numbers drive the business goals. + +We receive a firehose of user feedback across multiple channels including Dashboard widget, support, socials, Discord, customer interviews, dogfooding. This feedback is triaged and piped directly to the relevant team for them to assess. + +Ultimately, a team and the individuals within should have all the tools they need to be able to make decisions quickly and independently. We’re also not prescriptive on how teams organise their work, it’s up to them to decide. + +### Cadence + +Thanks to the Agile Manifesto, most software teams for the last decade ended up running some variation of a 2 week sprint on an endless loop, and yes its as exhausting as it sounds. Due to our desire to [recreate a Y-combinator-like environment internally](https://supabase.com/blog/supabase-how-we-launch) we landed on something that’s closer to 3 month product cycles. We found that it allows for more ambitious goal setting, accounts for the realities of people being sick or on holiday, and also allows teams to work through different phases. + +An intense shipping schedule can lead to an accrual of technical debt. To solve for this during the last year we introduced a series of “Kaizen Weeks” that run within the first month of each 3 month cycle. The three weeks we ran as part of the last one were: + +- QA week +- Docs week +- Performance week + +The goal of each week wasn’t only to make step changes in each area, but to find ways to bake this work into the team’s ongoing workflow. Performance testing for example requires some upfront work to get things up and running, but once this is done it’s fairly straightforward to automate this as part of your CI/CD pipeline. + +--- + +Monday 12th December is Supabase Launch Week 6 where you can find out what we’ve been grinding on for the last 3 months. All the details will be revealed here: [supabase.com/launch-week](https://supabase.com/launch-week) + +If you’d like to work with us, [check out our careers page](https://supabase.com/careers). diff --git a/apps/www/_blog/2022-12-10-postgres-crdt.mdx b/apps/www/_blog/2022-12-10-postgres-crdt.mdx new file mode 100644 index 00000000000..36dd3a90cbc --- /dev/null +++ b/apps/www/_blog/2022-12-10-postgres-crdt.mdx @@ -0,0 +1,145 @@ +--- +title: 'pg_crdt - an experimental CRDT extension for Postgres' +description: "Embedding Yjs and Automerge into Postgres for collaborative applications." +author: paul_copplestone +image: crdt/crdt-blog.png +thumb: crdt/crdt-blog.png +tags: + - launch-week +date: '2022-12-10' +toc_depth: 2 +--- + +Today we’re open-sourcing an EXPERIMENTAL extension for CRDTs, `pg_crdt`. The GitHub repo is [here](https://github.com/supabase/pg_crdt). There are [instructions](https://github.com/supabase/pg_crdt#installation) for running it locally in the README. + +When we released the new [multiplayer features](/blog/supabase-realtime-multiplayer-general-availability) for our Realtime engine, +it took 30 minutes for someone to ask if we’d add CRDT support. + +> *Anyone from Supabase here, do you have any plans to build in support for CRDT toolkits such as Yjs or AutoMerge for these features? It would make working with them so much easier if there was a plug and play backend.* + +@samwillis on [HackerNews](https://news.ycombinator.com/item?id=32510820) + +pg_crdt has not been released onto the Supabase platform (and it may never be). We’re considering many options for offline-sync/support and, while CRDTs will undoubtedly factor in, we’re not sure if this is the *right* approach. Hopefully this release generates a healthy discussion about the various ways we can do it at Supabase. + +## What’s a CRDT? + +A CRDT (Conflict-free Replicated Data Type) is a data structure. More accurately, a family of data structures. They enable collaborative apps like [Figma](https://www.figma.com/blog/how-figmas-multiplayer-technology-works/). + +You already know what a “data structure” is: an Array is a good example. CRDTs are a *special* type of data structure designed to solve a specific problem: they can merge changes in a way that the final state of the data will be the same, no matter the order in which the updates were applied. + +In simple terms, a CRDT allows multiple users to make changes to the same data without the need for a central authority to coordinate their actions. + +Let’s use our Array example to demonstrate the problem they solve. Imagine you have an array (which is not a CRDT): + +```jsx +let fruit = ['Apple', 'Banana', 'Orange'] +``` + +Now imagine you have 2 developers updating this array on their local computers. They both want to replace the fruit at the start of the array. The first user, let’s call her “Jenny”, does this: + +```js +fruit[0] = 'Grape' // the array is ['Grape', 'Banana', 'Orange'] +``` + +The developer sitting next to her, let’s call him “Jonny”, does the same: + +```js +fruit[0] = 'Mango' // the array is ['Mango', 'Banana', 'Orange'] +``` + +And now, since they are both developing on different machines, they push their changes to a remote server. When the updates land on the remote system, what will `fruit[0]` be? “Grape” or “Mango”? + +![Array - which will be saved?](/images/blog/crdt/array.png) + +Since this is one of those *basic* arrays, the answer is "the fruit array that arrives last”. + +1. If Jonny’s fruit array arrives first, it will be saved. +2. After that, Jenny’s fruit arrived and overwrites Jonny’s changes. + +But therein lies the problem: Jonny was the last developer to change his array of fruit, shouldn’t his changes be the ones that are saved? + +That’s one of the things that CRDTs solve. There is an “array CRDT” which, when merged, will always have the same result. It doesn’t matter if Jonny’s array arrives first, or if Jenny’s arrives first - every time you merge them they would be able to determine that the Jonny’s was the last change the fruit array. + +How does it do that? Some sort of algorithm, but you can ask ChatGPT to explain that one. + +## Offline philosophy + +Collaborative apps are becoming more prolific as legacy software is rebuilt within a browser environment. + +Collaboration is largely a data problem - how do we get one user’s changes (data) to merge with another user’s changes (data)? As a database provider it’s natural fit for Supabase to provide the tooling for developers to build collaborative apps. + +Before going too far down the “solution” rabbit hole at Supabase, we try to think about the long-term implications of adopting any technology. We’re pretty boring - we don’t make bets on technologies unless we think they will exist in 20 years. + +I personally believe CRDTs are the future. For *some things*. If databases were invented today, I’m certain most of the effort would be spent developing CRDT databases or something with “offline algorithms” built-in. But tech is a real-world demonstration of the Lindy effect: the longer something has existed, the longer it’s likely to exist in the future. That’s why we bet on Postgres - with more than 30 years history, it’s here to stay. + +Faced with this reality, we should consider how to solve *offline with Postgres* and where CRDTs might fit into that picture. + +For a long time I thought there could be a way to shoehorn Postgres row-level data into a CRDT, to give *truly* offline support. This may even still be [possible](https://electric-sql.com/), and it’s one of the ideas we’ll continue to pursue. But Postgres is a rich and evolving ecosystem, and I don’t know whether it will be possible to - + +a) find a merge strategy for an entire row, while simultaneously: + +b) finding a merge strategy for every data type *within* that row (especially with the number of data types available through extensions) + +It’s possible that developers will need to be selective about their “level” of offline support, at least if they plan to use an “incumbent” databases. For the cases, a simple “last write wins” strategy is probably acceptable (see the excellent [Replicache](https://doc.replicache.dev/examples/repliear) and [Watermelon](https://nozbe.github.io/WatermelonDB/) libraries), but there will be important pieces of their application where it is not. + +Take this table of blog posts as an example: + +```sql +create table posts ( + id serial primary key, + title text, + content text default '' +); +``` + +Perhaps it’s not that important if the `title` has a “last write wins” strategy, because it’s rarely updated and less likely to have a merge conflict. But it is critical to use a smarter algorithm for the `content` of the blog post, especially in a team where multiple users are editing a blog post at the same time. + +That’s a lot of background to get to what you probably want to know about: + +## Postgres CRDT extension + +`pg_crdt` is an extension which adds CRDT support to Postgres as a data type. For example, using our table from above: + +```sql +create table posts ( + id serial primary key, + title text, + content crdt.ydoc default crdt.new_ydoc() +); +``` + +The `content` column is now a [Yjs Doc](https://docs.yjs.dev/api/y.doc). Updates to this column are *commutative* and *idempotent*. This means that they can be applied in any order and multiple times, and the result will always be the same. Two people can edit the blog content at the same time, and they won’t have any issues when their changes are saved in the database. + +### Support for Yjs, Automerge, and beyond + +The Yjs and Automerge teams have done some excellent work to create Rust libraries for their CRDTs implementations. It was relatively trivial to wrap the libraries into a Postgres extension using the [pgx](https://github.com/tcdi/pgx) framework. + +At this stage it makes sense to give developers as many choices as possible in one extension. The CRDT space is nascent the algorithms are rapidly changing. + +Importantly, both Yjs and Automerge have *JavaScript* and Rust implementations, which means they work natively in both a browser and a Postgres environment. Since collaborative applications are largely a client-side problem, CRDTs are more useful for developers if they have robust JavaScript libraries. In the future, if this extension becomes the approach we take, then Supabase will focus some resources on building Yjs/Automerge libraries for mobile devices too (Swift for iOS, Kotlin for Android). + +## Why not build this into Realtime? + +An alternative approach for CRDT support in Supabase is to build support directly into [Realtime](https://github.com/supabase/realtime) and use it as an Authoritative server. In this scenario, Realtime would serialize the CRDT and save it to Postgres (probably as a `bytea` data type). Yjs has the concept of [Providers](https://github.com/yjs/yjs#providers) which would facilitate this. You can see the difference between the approaches in the diagram below - on the left, Realtime acts as the “middleman” for saving the CRDT in the database, whereas on the right the CRDT is pushed directly to the database, and Realtime receives updates from Postgres. (Note also that clients can send peer-to-peer updates.) + +![Realtime as an authority](/images/blog/crdt/authority.png) + +This might still be our best option, but it should not be our first attempt. If we make Realtime the authority, it strongly couples developers to the Supabase infrastructure. By placing the CRDT into the database, it simplifies the architecture, enables other tools (like Debezium), and provides the possibility to update the database directly (for semi-realtime events like counters or page-views). + +![External providers](/images/blog/crdt/semi-realtime.png) + +The Realtime engine seems like a great *compliment* for `pg_crdt`, but before we put it into production we need to solve a few (major) limitations. + +## Limitations + +These are a few of the *known* limitations: + +- Realtime broadcasts database changes from the Postgres write ahead log (WAL). The WAL includes a complete copy of the the underlying data so small updates cause the entire document to broadcast to all collaborators +- Frequently updated CRDTs produce a lot of WAL and dead tuples +- Large CRDT types in Postgres generate significant serialization/deserialization overhead on-update. + +We’re likely to discover more (no doubt from a few friendly HN comments). + +## Next steps + +If you want to help with `pg_crdt` the best way is to get involved in the GitHub repo. We have enabled [Discussions](https://github.com/supabase/pg_crdt/discussions) for any and all ideas. If you have experience with CRDTs and you like this approach, don’t hesitate to contact one of the team. \ No newline at end of file diff --git a/apps/www/_blog/2022-12-12-new-supabase-docs-built-with-nextjs.mdx b/apps/www/_blog/2022-12-12-new-supabase-docs-built-with-nextjs.mdx new file mode 100644 index 00000000000..dbeca1493f0 --- /dev/null +++ b/apps/www/_blog/2022-12-12-new-supabase-docs-built-with-nextjs.mdx @@ -0,0 +1,99 @@ +--- +title: 'New Supabase Docs, built with Next.js' +description: We've redesignd our Docs and migrated to Next.js +author: jonny +image: lw6-day-1/lw6-day1-docs.jpg +thumb: lw6-day-1/lw6-day1-docs.jpg +tags: + - launch-week +date: '2022-12-12' +toc_depth: 3 +youtubeHero: https://www.youtube-nocookie.com/embed/Q1Amk6iDlF8 +--- + +For a developer tool, documentation is more than a resource - it’s part of the product. For the past two years at Supabase, this part of our product hasn’t been great. Today’s release fixes that. + +## A brief history of documentation at Supabase + +When Supabase started in 2020, our website and our docs were powered by (the wonderful) [Docusaurus](https://docusaurus.io/), which allowed us to move quickly and efficiently. + +However, as time went on, we began to face some challenges: + +- We added versioning to our client libraries. Supabase maintains multiple client libraries, each with different versions. This increased the complexity and reduced maintainability of our Docusaurus setup. Contributors and team members had trouble figuring out how to contribute fixes and write new docs. +- It introduced friction with the rest of our stack (Next.js & Turborepo). At Supabase, we try and share as much setup and config as possible across projects. We have a monorepo of various Next.js sites with [shared](https://github.com/supabase/supabase/tree/master/packages) [Turborepo internal packages](https://turbo.build/repo/docs/handbook/sharing-code/internal-packages) including our Supabase UI library and configs for linting, Typescript, Tailwind and more. Having UI components and configs that we share across all projects is huge. The docs site was the only project not using Next.js and this internal packages setup. + +In short: we outgrew Docusaurus. + +## Documentation as a product + +Docs are the first thing you see when exploring a new tool. We wanted them to be as good as the rest of Supabase. We wanted to unify our frontend stack and build an “integrated” experience using the same UI libraries across all of our sites, and a unified Auth session so that we could tailor the documentation for our users. + +### Building an MVP + +We tried to migrate several times and failed because we couldn’t keep up with the divergences between the two sites. The temptation was to build a “better experience” as a part of the migration, to fit with “documentation as a product” values. This was a mistake. As with any product - you start with an MVP. + +We broke down the challenge into a single goal: migrate to Next.js, a carbon copy of Docusaurus. This took about 1 week, and we switched to the new Next.js MVP about one month ago. Did you notice? + +With the site running on Next, things started to accelerate. For the past month, we’ve had two developers working full-time to build what you see today. + +## Supabase Docs: v2, built with Next.js + +This release adds a few new features: + +### New design + +We’ve started implementing a set of new UI components to help facilitate our growing documentation content. While working on these, we’ve started to also refine how we want to present this information with more care on the smaller things we'd overlooked before, such as panels, buttons and icons. + +![New reference docs](/images/blog/launch-week-6/day-1-new-docs/redesign.png) + +### Better navigation + +Landing on a documentation site for a product as large as Supabase can be daunting. +There’s a lot to read. The problem is one of discoverability, which even a search interface can’t fix (how do you know what to search if you don’t know what a product can do?). + +To solve this, we built everything into a single sidebar. From a glance, you can see everything we offer without clicking three-levels-deep into a maze of content. For a first-time reader, you should never feel lost in the docs. + +Inspiration: [Airwallex](https://www.airwallex.com/docs) + +### Better reference docs + +![New reference docs](/images/blog/launch-week-6/day-1-new-docs/reference-screenshot.png) + +Previously when browsing through our reference docs, each function lived on a separate page. This release changes that behaviour - the new layout has all of a library’s functions on one page. This promotes discoverability within a single tool. Developers have the ability to use the search bar _or_ they can just `cmd+f` in their browser. + +We’ve also re-engineered how our reference docs are generated from typedoc, so it’s easier for contributors and our own team members to edit and add to Supabase documentation. + +Inspiration: [Stripe](https://stripe.com/docs/cli). + +## What’s next + +With this foundation, we hope to re-imagine what a documentation experience can be. Some things we’re working on: + +### Fully integrated experience + +- **Unified Authentication:** If you’re logged into the Dashboard, then you’re logged into Supabase docs. That means personalization and project-specific documentation. No more placeholders like “`SUPABASE_URL`". We will add URLs and Keys for the project you’ve selected, making it easier to copy and run code snippets. +- **Auto docs:** We may also move AutoDocs (currently in the dashboard) into the main Docs website. Reference docs are then just, reference docs, but you can see it in context with the table/schema you're interested in. + +### Runnable code blocks + +With [Postgres WASM](https://supabase.com/blog/postgres-wasm), you could run code examples against a full Postgres database (in the browser). + +### Tutorials + +In the background, we’ve been working with the creator of [CodeHike](https://codehike.org/), [sponsoring](https://github.com/sponsors/pomber#sponsors) him to re-imagine what a fully interactive tutorial for Supabase could look like. + +### Improved search + +We’re happy users of Algolia search and their extremely generous [Open Source](https://www.algolia.com/for-open-source/) plan. +That said, we’re a Postgres company, and it would only be right for us to dog-food (and help to improve) all the features that Postgres have to offer. +We hope to go deep in Postgres FTS (small hint: check back on [Friday](https://supabase.com/launch-week) for a search-related announcement). + +### More (and less!) content + +Docs are more than just the tech behind them. The goal of docs is to give you, the developer, everything you need to learn Supabase - no matter your level of knowledge. In some areas, our docs are too verbose. In most areas, they are too sparse. Our new docs give us the foundation to solve both of these problems so that you spend _less_ time in our docs, and more time shipping your product. + +## More Launch Week 6 + +- [Launch Week 6 Hackathon](https://supabase.com/blog/launch-week-6-hackathon) +- [Who We Hire at Supabase](https://supabase.com/blog/who-we-hire) +- [pg_crdt - an experimental CRDT extension for Postgres](https://supabase.com/blog/postgres-crdt) diff --git a/apps/www/components/Favicons.tsx b/apps/www/components/Favicons.tsx index 5c65346f0fa..8cb53689b8c 100644 --- a/apps/www/components/Favicons.tsx +++ b/apps/www/components/Favicons.tsx @@ -24,7 +24,8 @@ const Favicons = () => { /> {/* */} - + {/* */} + diff --git a/apps/www/components/LaunchWeek/Ticket/form.tsx b/apps/www/components/LaunchWeek/Ticket/form.tsx index 3595be0f946..59dbcb902ac 100644 --- a/apps/www/components/LaunchWeek/Ticket/form.tsx +++ b/apps/www/components/LaunchWeek/Ticket/form.tsx @@ -169,7 +169,6 @@ export default function Form({ sharePage, align = 'Center' }: Props) { align === 'Left' ? 'text-center xl:text-left' : 'text-center' )} > -

                  Coming soon

                  Register to get your ticket and stay tuned all week for daily announcements

                  diff --git a/apps/www/components/LaunchWeek/lw6_days.json b/apps/www/components/LaunchWeek/lw6_days.json new file mode 100644 index 00000000000..85e9afc98fc --- /dev/null +++ b/apps/www/components/LaunchWeek/lw6_days.json @@ -0,0 +1,70 @@ +[ + { + "title": "Docs Updated", + "shipped": true, + "date": "12 Dec 2022", + "description": "Supabase Docs", + "d": 1, + "dd": "Monday", + "youtube_id": "OpPOaJI_Z28", + "blogpost": "https://supabase.com/blog/new-supabase-docs-built-with-nextjs", + "docs": "https://supabase.com/docs", + "steps": [ + { + "title": "Supabase Docs", + "blog": "/blog/new-supabase-docs-built-with-nextjs", + "docs": "/docs", + "isNew": true, + "description": "" + } + ] + }, + { + "title": "Day 2", + "shipped": false, + "date": "13 Dec 2022", + "description": "Day 2", + "d": 2, + "dd": "Tuesday", + "youtube_id": "iqZlPtl_b-I", + "blogpost": "https://supabase.com/blog", + "docs": "https://supabase.com/docs", + "steps": [] + }, + { + "title": "Day 3", + "shipped": false, + "date": "14 Dec 2022", + "description": "Day 3", + "d": 3, + "dd": "Wednesday", + "youtube_id": "6bGQotxisoY", + "blogpost": "https://supabase.com/blog", + "docs": "https://supabase.com/docs", + "steps": [] + }, + { + "title": "Day 4", + "shipped": false, + "date": "15 Dec 2022", + "description": "Day 4", + "d": 4, + "dd": "Thursday", + "youtube_id": "CGZr5tybW18", + "blogpost": "https://supabase.com/blog", + "docs": "https://supabase.com/docs", + "steps": [] + }, + { + "title": "Day 5", + "shipped": false, + "date": "16 Dec 2022", + "description": "Day 5", + "d": 5, + "dd": "Friday", + "youtube_id": "CGZr5tybW18", + "blogpost": "https://supabase.com/blog", + "docs": "https://supabase.com/docs", + "steps": [] + } +] diff --git a/apps/www/components/LaunchWeek/types.d.ts b/apps/www/components/LaunchWeek/types.d.ts index 767d9d57111..fbea7cf9d0f 100644 --- a/apps/www/components/LaunchWeek/types.d.ts +++ b/apps/www/components/LaunchWeek/types.d.ts @@ -18,6 +18,13 @@ export type Product = { description?: string } +export type Step = { + title: string + url: string + docs: string + description?: string +} + export interface WeekDayProps { shipped: boolean title: string @@ -32,4 +39,5 @@ export interface WeekDayProps { index: number shippingHasStarted?: boolean youtube_id?: string + steps: Step[] } diff --git a/apps/docs/components/Sponsors.tsx b/apps/www/components/Sponsors.tsx similarity index 90% rename from apps/docs/components/Sponsors.tsx rename to apps/www/components/Sponsors.tsx index f6203f69201..c6bb698e85a 100644 --- a/apps/docs/components/Sponsors.tsx +++ b/apps/www/components/Sponsors.tsx @@ -37,14 +37,14 @@ export default function Sponsors() { ] return ( -
                  +
                  {tiers.map( (t, index) => !!t.transactions.length && ( -
                  -

                  {t.heading}

                  -
                  - {t.transactions.map((x, index) => ( +
                  +

                  {t.heading}

                  +
                  + {t.transactions.map((x: any, index: any) => (
                  ( diff --git a/apps/www/data/Footer.json b/apps/www/data/Footer.json index c0988c03dfe..98d012faf4e 100644 --- a/apps/www/data/Footer.json +++ b/apps/www/data/Footer.json @@ -72,10 +72,6 @@ "text": "Documentation", "url": "/docs" }, - { - "text": "API Reference", - "url": "/docs/reference" - }, { "text": "Changelog", "url": "/changelog" @@ -86,7 +82,7 @@ }, { "text": "Open Source", - "url": "/docs/oss" + "url": "/oss" }, { "text": "SupaSquad", @@ -119,19 +115,19 @@ }, { "text": "Terms of Service", - "url": "/docs/company/terms" + "url": "/terms" }, { "text": "Privacy Policy", - "url": "/docs/company/privacy" + "url": "/privacy" }, { "text": "Acceptable Use Policy", - "url": "/docs/company/aup" + "url": "/aup" }, { "text": "Service Level Agreement", - "url": "/docs/company/sla" + "url": "/sla" }, { "text": "Humans.txt", diff --git a/apps/docs/data/maintainers.json b/apps/www/data/maintainers.json similarity index 100% rename from apps/docs/data/maintainers.json rename to apps/www/data/maintainers.json diff --git a/apps/docs/data/sponsors.json b/apps/www/data/sponsors.json similarity index 98% rename from apps/docs/data/sponsors.json rename to apps/www/data/sponsors.json index 1cc4a2eec7e..1955cef3f70 100644 --- a/apps/docs/data/sponsors.json +++ b/apps/www/data/sponsors.json @@ -131,10 +131,6 @@ "tier": "$5 a month", "sponsor": "CmplxStack" }, - { - "tier": "$19 a month", - "sponsor": "roblack" - }, { "tier": "$5 a month", "sponsor": "davilico05" diff --git a/apps/www/lib/authors.json b/apps/www/lib/authors.json index f177f04a739..b847042a07b 100644 --- a/apps/www/lib/authors.json +++ b/apps/www/lib/authors.json @@ -236,5 +236,12 @@ "position": "Growth Marketer", "author_url": "https://twitter.com/ramiro__nd", "author_image_url": "https://avatars.githubusercontent.com/u/20600542?v=4" + }, + { + "author_id": "jonny", + "author": "Jonathan Summers-Muir", + "position": "Engineering", + "author_url": "https://github.com/mildtomato", + "author_image_url": "https://github.com/mildtomato.png" } ] diff --git a/apps/www/lib/redirects.js b/apps/www/lib/redirects.js index aa69f18688c..41552e25f88 100644 --- a/apps/www/lib/redirects.js +++ b/apps/www/lib/redirects.js @@ -537,9 +537,9 @@ module.exports = [ }, { - permanent: false, - source: '/docs/guides/platform', - destination: '/docs/guides/hosting/platform', + permanent: true, + source: '/docs/guides/hosting/platform', + destination: '/docs/guides/platform', }, { permanent: false, @@ -556,11 +556,6 @@ module.exports = [ source: '/docs/reference/javascript/reset-password-email', destination: '/docs/reference/javascript/auth-api-resetpasswordforemail', }, - { - permanent: true, - source: '/oss', - destination: '/docs/oss', - }, { permanent: true, source: '/docs/reference/postgres/connection-strings', @@ -604,7 +599,7 @@ module.exports = [ { permanent: true, source: '/docs/reference/javascript/supabase-client', - destination: '/docs/reference', + destination: '/docs#reference-documentation', }, { permanent: true, @@ -1336,7 +1331,7 @@ module.exports = [ { permanent: true, source: '/docs/guides/client-libraries', - destination: '/docs/reference', + destination: '/docs#reference-documentation', }, { permanent: true, @@ -1575,4 +1570,34 @@ module.exports = [ source: '/projects', destination: 'https://app.supabase.com/projects', }, + { + permanent: true, + source: '/docs/oss', + destination: '/oss', + }, + { + permanent: true, + source: '/docs/company/aup', + destination: '/aup', + }, + { + permanent: true, + source: '/docs/company/terms', + destination: '/terms', + }, + { + permanent: true, + source: '/docs/company/privacy', + destination: '/privacy', + }, + { + permanent: true, + source: '/docs/company/sla', + destination: '/sla', + }, + { + permanent: true, + source: '/docs/reference', + destination: '/docs#reference-documentation', + }, ] diff --git a/apps/www/lib/rewrites.js b/apps/www/lib/rewrites.js index 1fd564e3039..100cbc9b28d 100644 --- a/apps/www/lib/rewrites.js +++ b/apps/www/lib/rewrites.js @@ -44,10 +44,6 @@ module.exports = [ source: '/.well-known/security.txt', destination: `${process.env.NEXT_PUBLIC_DOCS_URL}/.well-known/security.txt`, }, - { - source: '/oss', - destination: `${process.env.NEXT_PUBLIC_DOCS_URL}/oss`, - }, { source: '/feed.xml', destination: `/rss.xml`, diff --git a/apps/www/package.json b/apps/www/package.json index 17051852fdf..5dd1f08a31f 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -14,10 +14,10 @@ }, "dependencies": { "@heroicons/react": "^1.0.6", - "@mdx-js/loader": "^1.6.22", - "@mdx-js/react": "^1.6.22", + "@mdx-js/loader": "^2.1.5", + "@mdx-js/react": "^2.1.5", "@next/bundle-analyzer": "^13.0.0", - "@next/mdx": "^10.0.7", + "@next/mdx": "^12.3.2", "@supabase/auth-ui-react": "^0.1.6", "@supabase/supabase-js": "^2.0.0", "classnames": "^2.3.1", @@ -36,6 +36,7 @@ "next-seo": "^4.20.0", "next-transpile-modules": "^9.0.0", "nodemailer": "^6.7.3", + "octokit": "^2.0.10", "parse-numeric-range": "^1.3.0", "react": "^17.0.2", "react-copy-to-clipboard": "^5.0.2", diff --git a/apps/docs/pages/company/aup.mdx b/apps/www/pages/aup.mdx similarity index 94% rename from apps/docs/pages/company/aup.mdx rename to apps/www/pages/aup.mdx index ff23bda20b0..d03fffe4fef 100644 --- a/apps/docs/pages/company/aup.mdx +++ b/apps/www/pages/aup.mdx @@ -1,9 +1,15 @@ -import Layout from '~/layouts/DefaultGuideLayout' +import Layout from '../layouts/Layout' +import SectionContainer from '../components/Layouts/SectionContainer' export const meta = { title: 'Acceptable Use Policy', + description: 'Supabase Acceptable Use Policy', } + + +# Acceptable Use Policy + _Last Modified: 15 April 2021_ This Acceptable Use Policy (this “Policy”) describes prohibited uses of the web services offered by Supabase, Inc. and its affiliates (the “Services”) and the website located at https://supabase.com (the “Supabase Site”). The examples described in this Policy are not exhaustive. We may modify this Policy at any time by posting a revised version on the Supabase Site. By using the Services or accessing the Supabase Site, you agree to the latest version of this Policy. If you violate the Policy or authorize or help others to do so, we may suspend or terminate your use of the Services. @@ -52,6 +58,6 @@ Reporting of Violations of this Policy If you become aware of any violation of this Policy, you will immediately notify us and provide us with assistance, as requested, to stop or remedy the violation. To report any violation of this Policy, please contact us at support@supabase.io. -export const Page = ({ children }) => + -export default Page +export default (context) => diff --git a/apps/www/pages/blog/[slug].tsx b/apps/www/pages/blog/[slug].tsx index a82e6ba33cd..36ac58de88c 100644 --- a/apps/www/pages/blog/[slug].tsx +++ b/apps/www/pages/blog/[slug].tsx @@ -227,17 +227,32 @@ function BlogPostPage(props: any) {
                  {/* Content */}
                  - {props.blog.thumb && ( -
                  - +
                  +
                  + {props.blog.youtubeHero ? ( + + ) : ( + props.blog.thumb && ( +
                  + +
                  + ) + )} +
                  - )} -
                  -
                  diff --git a/apps/www/pages/launch-week/index.tsx b/apps/www/pages/launch-week/index.tsx index 9a3945146f4..2fcd99cde21 100644 --- a/apps/www/pages/launch-week/index.tsx +++ b/apps/www/pages/launch-week/index.tsx @@ -1,5 +1,8 @@ +// @ts-nocheck + import { NextSeo } from 'next-seo' -import _days from '~/components/LaunchWeek/days.json' + +import _days from '~/components/LaunchWeek/lw6_days.json' import DefaultLayout from '~/components/Layouts/Default' import SectionContainer from '~/components/Layouts/SectionContainer' @@ -11,9 +14,13 @@ import { useTheme } from '~/components/Providers' import classNames from 'classnames' import styleUtils from '~/components/LaunchWeek/Ticket/utils.module.css' import { SITE_ORIGIN } from '~/lib/constants' +import { Accordion, Badge, IconExternalLink } from 'ui' +import { WeekDayProps } from '~/components/LaunchWeek/types' -import { Badge, IconExternalLink } from '~/../../packages/ui' +import styles from './launchWeek.module.css' +import Image from 'next/image' +const days = _days as WeekDayProps[] const constellation = [ [60, 8], [13, 20], @@ -29,13 +36,14 @@ const constellation = [ export default function launchweek() { const { isDarkMode } = useTheme() - const title = 'Launch Week 6' const description = 'Supabase Launch Week 6 | 12-18 Dec 2022' + const liveDay = 'Monday' const [supabase] = useState(() => createClient(process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!) ) + const [session, setSession] = useState(null) const [creators, setCreators] = useState([]) const [activeCreator, setActiveCreator] = useState(null) @@ -82,6 +90,69 @@ export default function launchweek() { } } + const AccordionHeader = ({ date, day, title, shipped }: any) => { + return ( +
                  +
                  + {liveDay === day ? ( + + Currently Happening + + ) : ( + + {shipped ? 'Shipped' : 'Coming Soon'} + + )} + + + {day} ・ {date} + +
                  + {title} +
                  + ) + } + + const SectionButtons = ({ blog, docs, video }) => { + return ( +
                  + ) + } + const [day1, day2, day3, day4, day5] = days + return ( <> - +
                  -

                  Dec 12 – 16 at 8 AM PT | 11 AM ET

                  -
                  -
                  - +

                  Dec 12 – 16 at 6 AM PT | 9 AM ET

                  + {process.env.NEXT_PUBLIC_LW_STARTED && ( + <> + +
                  +
                  +
                  + +
                  +
                  + Who we hire at Supabase + Fireside chat with founders +
                  +
                  + +
                  +
                  + + +
                  + + } + disabled={!day1.shipped} + className="h-[79px]" + id={day1.d.toString()} + > + {day1.steps.length > 0 && ( +
                  +
                  +
                  + {day1.description} + + Redesigned + +
                  + + +
                  +
                  + )} +
                  +
                  +
                  + + } + disabled={!day2.shipped} + className="h-[79px]" + id={day2.d.toString()} + > + {day2.steps.length > 0 && ( +
                  +
                  +
                  +
                  {day2.steps[0].title}
                  + + New + +
                  + +
                  +
                  +
                  + + New + + {day2.steps[1].title} +

                  {day2.steps[1].description}

                  +
                  + +
                  +
                  + )} +
                  +
                  +
                  + + } + disabled={!day3.shipped} + className="h-[79px]" + id={day3.d.toString()} + > + {day3.steps.length > 0 && ( +
                  +
                  +
                  + {day3.steps[0].title} + + New + +
                  + +
                  +
                  + {/* inset 0px 130px 50px -52px #121f1e; */} +
                  + + New + + {day3.steps[1].title} +
                  + +
                  +
                  + )} +
                  +
                  +
                  + + } + disabled={!day4.shipped} + className="h-[79px]" + id={day4.d.toString()} + > + {day4.steps.length > 0 && ( +
                  +
                  +
                  + {day4.steps[0].title} + + Updated + +
                  + +
                  +
                  + )} +
                  +
                  +
                  + + } + disabled={!day5.shipped} + className="h-[79px]" + id={day5.d.toString()} + > + {day5.steps.length > 0 && ( +
                  +
                  +
                  + {day5.steps[0].title} + + New + +
                  + +
                  +
                  +
                  + + New + + {day5.steps[1].title} +
                  + +
                  +
                  + )} +
                  +
                  +
                  +
                  + + )} + +
                  + + Happening all week + +

                  Launch Week Hackathon

                  +

                  + The traditional parallel Hackathon is back! Build a new open source project with + Supabase and you can win $1500 in GitHub sponsorships and a coveted Supabase Darkmode + Keyboard! For more info check the{' '} + + blog post + + . +

                  +
                  +
                  +
                  +
                  +

                  Prizes

                  +

                  + There are 5 categories to win, with prizes for winners and runner-ups of each + category. Each team member gets a prize. +

                  +
                  +
                  +

                  Judges

                  +

                  + The Supabase team will judge all the categories except the Best Edge Functions + Project, which will be judged by our friends at Deno. +

                  +
                  +
                  +
                  +

                  Community

                  +

                  + If you need help or advice when building, find other people to join your team, + or if you just want to chill and watch people build, come and join us! +

                  +
                  + + Join our Discord + +
                  +
                  +
                  +

                  Submission

                  +

                  + Submit your project through{' '} + + madewithsupabase.com + + . All submissions must be open source and publically available. Submissions close + Monday 19th Dec 00:01 AM PT. +

                  +
                  +
                  + +
                  +
                  - Currently happening + Live -

                  The Supabase Content Storm

                  +

                  The Supabase Content Storm

                  - We worked with +30 content creators from around the world to drop a mountain of - content simultaneously! + We worked with more than 30 content creators from around the world to drop a mountain + of content simultaneously! -

                  + + {process.env.NEXT_PUBLIC_LW_STARTED && ( +
                  + +
                  + )} +
                  ) diff --git a/apps/www/pages/launch-week/launchWeek.module.css b/apps/www/pages/launch-week/launchWeek.module.css index 574027b2053..c37b14deb0e 100644 --- a/apps/www/pages/launch-week/launchWeek.module.css +++ b/apps/www/pages/launch-week/launchWeek.module.css @@ -1,3 +1,11 @@ .mask { mask-image: radial-gradient(black, transparent); } + +.dark_community { + background-image: radial-gradient(closest-side at 50% 50%, #132121, #132121db, #121212); +} + +.community { + background-image: radial-gradient(closest-side at 50% 50%, #d9eeef, #dbeef0, white); +} diff --git a/apps/www/pages/oss.tsx b/apps/www/pages/oss.tsx new file mode 100644 index 00000000000..b39603f9343 --- /dev/null +++ b/apps/www/pages/oss.tsx @@ -0,0 +1,135 @@ +import { useState, useEffect } from 'react' +import { Octokit } from '@octokit/core' +import DefaultLayout from '~/components/Layouts/Default' +import SectionContainer from '~/components/Layouts/SectionContainer' +import maintainers from '../data/maintainers.json' +import Sponsors from '../components/Sponsors' +import Image from 'next/image' + +export default function Oss() { + const octokit = new Octokit() + + const [activePill, setActivePill] = useState('All') + const [repos, setRepos] = useState([{}]) + + const maintainerTags = maintainers + .reduce((acc: any, x: any) => acc.concat(x.tags), []) // get all tags + .filter((v: any, i: any, a: any) => a.indexOf(v) === i) // remove duplicates + .sort((a: any, b: any) => a.localeCompare(b)) // alphabetical + const maintainerPills = ['All'].concat(maintainerTags) + + useEffect(() => { + async function fetchOctoData() { + const res = await octokit.request('GET /orgs/{org}/repos', { + org: 'supabase', + type: 'public', + per_page: 6, + page: 1, + }) + setRepos(res.data) + } + fetchOctoData() + }, []) + + return ( + +
                  + + ) +} diff --git a/apps/docs/pages/company/privacy.mdx b/apps/www/pages/privacy.mdx similarity index 98% rename from apps/docs/pages/company/privacy.mdx rename to apps/www/pages/privacy.mdx index c55a1a711b7..5a2311abe07 100644 --- a/apps/docs/pages/company/privacy.mdx +++ b/apps/www/pages/privacy.mdx @@ -1,10 +1,16 @@ -import Layout from '~/layouts/DefaultGuideLayout' +import Layout from '../layouts/Layout' +import SectionContainer from '../components/Layouts/SectionContainer' export const meta = { title: 'Privacy Policy', + description: 'Supabase Privacy Policy', } -_Last modified: 27 March 2021_ + + +# Privacy Policy + +_Last Modified: 27 March 2021_ Thank you for your interest in Supabase, Inc., ("**_Supabase_**," "**_we_**", "**_our_**" or "**_us_**"). Supabase provides a suite of open source tools, stitched together to build a seamless developer experience. This Privacy Notice explains how information about you, that directly identifies you, or that makes you identifiable ("**_personal information_**") is collected, used and disclosed by Supabase in connection with our website at [supabase.com](https://supabase.com) (the "**_Site_**") and our services offered in connection with the Site (collectively with the Site, the "**_Service_**"). @@ -32,7 +38,7 @@ We collect personal information from you. The categories of information we colle - **_Registration information._** We collect personal and/or business information that you provide when you register for an account at the Site. This information may include your name, email address, GitHub username. We use this information to administer your account, provide you with the relevant services and information, communicate with you regarding your account, the Site and for customer support purposes. - **_Information collected through the Use of the Service._** After registration, you may create, upload or transmit files, documents, videos, images, data or information as part of your use of the Service (collectively, "**_User Content_**"). User Content and any information contained in the User Content, including personal information you may have included, is stored and collected as part of the Service. You have full control of the information included in the User Content. -- **_Payment information._** If you make a purchase or payment on the Site, such as for a subscription, we collect transactional information provided in connection with your purchase or payment. Please note that we use third party payment processors, including Stripe, to process payments made to us. As such, we do not retain any personally identifiable financial information such as credit card numbers. Rather, all such information is provided directly by you to our third-party processor. The payment processor’s use of your personal information is governed by their privacy notice. To view Stripe’s privacy notice, please visit: . +- **_Payment information._** If you make a purchase or payment on the Site, such as for a subscription, we collect transactional information provided in connection with your purchase or payment. Please note that we use third party payment processors, including Stripe, to process payments made to us. As such, we do not retain any personally identifiable financial information such as credit card numbers. Rather, all such information is provided directly by you to our third-party processor. The payment processor’s use of your personal information is governed by their privacy notice. To view Stripe’s privacy notice, please visit: - **_Payment information._** If you make a purchase or payment on the Site, such as for a subscription, we collect transactional information provided in connection with your purchase or payment. Please note that we use third party payment processors, including Stripe, to process payments made to us. As such, we do not retain any personally identifiable financial information such as credit card numbers. Rather, all such information is provided directly by you to our third-party processor. The payment processor’s use of your personal information is governed by their privacy notice. To view Stripe’s privacy notice, please visit: [https://stripe.com/privacy](https://stripe.com/privacy). - **_Communications._** If you communicate with us through any paper or electronic form, we may collect your name, email address, mailing address, phone number, or any other personal information you choose to provide to us. We use this information to investigate and respond to your inquiries, and to communicate with you, to enhance the services we offer to our users and to manage and grow our organization. If you register for our newsletters or updates, we may communicate with you by email. To unsubscribe from promotional messages, please follow the instructions within our messages and review the **Control Over Your Information** section below. If you become a contributor, we may also collect your GitHub name and feature you on our website. - **_Inquiries and Feedback._** If you contact us, we will collect the information that you provide us, such as your contact information and the contents of your communication with us. @@ -213,7 +219,7 @@ In accordance with applicable privacy law, you have the following rights in resp **You also have the right to object to any processing based on our legitimate interests where there are grounds relating to your particular situation. There may be compelling reasons for continuing to process your personal information, and we will assess and inform you if that is the case. You can object to marketing activities for any reason.** -You also have the right to lodge a complaint to your local data protection authority. If you are based in the European Union, information about how to contact your local data protection authority is available [here](http://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm). If you are based in the UK or Switzerland, your local data protection authorities are the UK Information Commissioner's Office () and the Swiss Federal Data Protection and Information Commissioner (). +You also have the right to lodge a complaint to your local data protection authority. If you are based in the European Union, information about how to contact your local data protection authority is available [here](http://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm). If you are based in the UK or Switzerland, your local data protection authorities are the UK Information Commissioner's Office ([https://ico.org.uk/global/contact-us/](https://ico.org.uk/global/contact-us/)) and the Swiss Federal Data Protection and Information Commissioner ([https://www.edoeb.admin.ch/edoeb/en/home/the-fdpic/contact/address.html](https://www.edoeb.admin.ch/edoeb/en/home/the-fdpic/contact/address.html)). If you wish to exercise one of these rights, please contact us using the contact details at the end of these Privacy Disclosures. @@ -292,6 +298,6 @@ Some browsers also give you the option of downloading and installing extensions |

                  a0:state

                  | Strictly necessary | 2 Hours | Authentication Purposes. | |

                  youtube-nocookie

                  | Strictly necessary | Persistent |

                  Privacy-enhanced cookie, essential for embedded videos. [Link.](https://support.google.com/youtube/answer/171780)

                  Privacy Enhanced Mode allows you to embed YouTube videos without using cookies that track viewing behavior. This means no activity is collected to personalize the viewing experience.

                  | -export const Page = ({ children }) => +
                  -export default Page +export default (context) => diff --git a/apps/docs/pages/company/sla.mdx b/apps/www/pages/sla.mdx similarity index 94% rename from apps/docs/pages/company/sla.mdx rename to apps/www/pages/sla.mdx index 54623a346eb..0c367489da1 100644 --- a/apps/docs/pages/company/sla.mdx +++ b/apps/www/pages/sla.mdx @@ -1,9 +1,15 @@ -import Layout from '~/layouts/DefaultGuideLayout' +import Layout from '../layouts/Layout' +import SectionContainer from '../components/Layouts/SectionContainer' export const meta = { title: 'Service Level Agreement', + description: 'Supabase Service Level Agreement', } + + +# Service Level Agreement + The following Service Level Agreement, which is incorporated into and forms part of the Subscription Agreement between Supabase, Inc. ("Supabase") and Customer (the "Agreement"), will apply to the Services for Enterprise Customers specified in an Order Form during the applicable Subscription Term: ## Platform @@ -88,6 +94,6 @@ An Information request about Supabase or feature request. Business hours are from 6am to 6pm (local time), except where otherwise stated. -export const Page = ({ children }) => + -export default Page +export default (context) => diff --git a/apps/docs/pages/company/terms.mdx b/apps/www/pages/terms.mdx similarity index 99% rename from apps/docs/pages/company/terms.mdx rename to apps/www/pages/terms.mdx index d7611812f4b..80cd1a4d015 100644 --- a/apps/docs/pages/company/terms.mdx +++ b/apps/www/pages/terms.mdx @@ -1,9 +1,15 @@ -import Layout from '~/layouts/DefaultGuideLayout' +import Layout from '../layouts/Layout' +import SectionContainer from '../components/Layouts/SectionContainer' export const meta = { - title: 'Terms of service', + title: 'Terms of Service', + description: 'Supabase Terms of Service', } + + +# Terms of service + _Last Modified: 20 November 2020_ These Customer Terms and Conditions (this "**Agreement**"), effective as of the date on which you click a button or check a box (or something similar) acknowledging your acceptance of this Agreement (the "**Effective Date**"), is by and between Supabase, Inc., a Delaware corporation with offices located at 970 Toa Payoh North #07-04, Singapore 318992 ("**Supabase**") and the entity on whose behalf the individual accepting this Agreement accepts this Agreement ("**Customer**"). The individual accepting this Agreement hereby represents and warrants that it is duly authorized by the entity on whose behalf it accepts this Agreement to so accept this Agreement. Supabase and Customer may be referred to herein collectively as the "**Parties**" or individually as a "**Party**." The Parties agree as follows: @@ -235,6 +241,6 @@ Each Party acknowledges and agrees that a breach or threatened breach by such Pa Supabase may identify Customer as a user of the Services and may use Customer's name, logo, and other trademarks in Supabase's customer list, press releases, blog posts, advertisements, and website (and all use thereof and goodwill arising therefrom shall inure to the sole and exclusive benefit of Customer). Otherwise, neither Party may use the name, logo, or other trademarks of the other Party for any purpose without the other Party's prior written approval. -export const Page = ({ children }) => + -export default Page +export default (context) => diff --git a/apps/www/public/favicon/favicon-lw.svg b/apps/www/public/favicon/favicon-lw.svg new file mode 100644 index 00000000000..b34acb319ed --- /dev/null +++ b/apps/www/public/favicon/favicon-lw.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apps/www/public/images/blog/crdt/array.png b/apps/www/public/images/blog/crdt/array.png new file mode 100644 index 00000000000..49e8efc7710 Binary files /dev/null and b/apps/www/public/images/blog/crdt/array.png differ diff --git a/apps/www/public/images/blog/crdt/authority.png b/apps/www/public/images/blog/crdt/authority.png new file mode 100644 index 00000000000..8ed4f6b10fd Binary files /dev/null and b/apps/www/public/images/blog/crdt/authority.png differ diff --git a/apps/www/public/images/blog/crdt/crdt-blog.jpg b/apps/www/public/images/blog/crdt/crdt-blog.jpg new file mode 100644 index 00000000000..99c7021c2dd Binary files /dev/null and b/apps/www/public/images/blog/crdt/crdt-blog.jpg differ diff --git a/apps/www/public/images/blog/crdt/crdt-blog.png b/apps/www/public/images/blog/crdt/crdt-blog.png new file mode 100644 index 00000000000..4d4cc7418d1 Binary files /dev/null and b/apps/www/public/images/blog/crdt/crdt-blog.png differ diff --git a/apps/www/public/images/blog/crdt/semi-realtime.png b/apps/www/public/images/blog/crdt/semi-realtime.png new file mode 100644 index 00000000000..6d3b2a51d72 Binary files /dev/null and b/apps/www/public/images/blog/crdt/semi-realtime.png differ diff --git a/apps/www/public/images/blog/how-it-started.jpg b/apps/www/public/images/blog/how-it-started.jpg new file mode 100644 index 00000000000..2bd11dfb68b Binary files /dev/null and b/apps/www/public/images/blog/how-it-started.jpg differ diff --git a/apps/www/public/images/blog/launch-week-6/day-1-new-docs/redesign.png b/apps/www/public/images/blog/launch-week-6/day-1-new-docs/redesign.png new file mode 100644 index 00000000000..d05275f6610 Binary files /dev/null and b/apps/www/public/images/blog/launch-week-6/day-1-new-docs/redesign.png differ diff --git a/apps/www/public/images/blog/launch-week-6/day-1-new-docs/reference-screenshot.png b/apps/www/public/images/blog/launch-week-6/day-1-new-docs/reference-screenshot.png new file mode 100644 index 00000000000..76aca768bd1 Binary files /dev/null and b/apps/www/public/images/blog/launch-week-6/day-1-new-docs/reference-screenshot.png differ diff --git a/apps/www/public/images/blog/lw6-day-1/lw6-day1-docs.jpg b/apps/www/public/images/blog/lw6-day-1/lw6-day1-docs.jpg new file mode 100644 index 00000000000..07257678739 Binary files /dev/null and b/apps/www/public/images/blog/lw6-day-1/lw6-day1-docs.jpg differ diff --git a/apps/www/public/images/blog/lw6-hackathon/keyboard.png b/apps/www/public/images/blog/lw6-hackathon/keyboard.png new file mode 100644 index 00000000000..61061a1239a Binary files /dev/null and b/apps/www/public/images/blog/lw6-hackathon/keyboard.png differ diff --git a/apps/www/public/images/blog/lw6-hackathon/swagkit.png b/apps/www/public/images/blog/lw6-hackathon/swagkit.png new file mode 100644 index 00000000000..dc375783452 Binary files /dev/null and b/apps/www/public/images/blog/lw6-hackathon/swagkit.png differ diff --git a/apps/www/public/images/blog/lw6-hackathon/thumbnail.jpg b/apps/www/public/images/blog/lw6-hackathon/thumbnail.jpg new file mode 100644 index 00000000000..4566dc72cf8 Binary files /dev/null and b/apps/www/public/images/blog/lw6-hackathon/thumbnail.jpg differ diff --git a/apps/www/public/images/blog/who-we-hire-cover.jpg b/apps/www/public/images/blog/who-we-hire-cover.jpg new file mode 100644 index 00000000000..80615372a87 Binary files /dev/null and b/apps/www/public/images/blog/who-we-hire-cover.jpg differ diff --git a/apps/www/public/images/blog/who-we-hire.jpg b/apps/www/public/images/blog/who-we-hire.jpg new file mode 100644 index 00000000000..484b7729020 Binary files /dev/null and b/apps/www/public/images/blog/who-we-hire.jpg differ diff --git a/apps/www/public/images/launchweek/ant.png b/apps/www/public/images/launchweek/ant.png new file mode 100644 index 00000000000..c0413ad7765 Binary files /dev/null and b/apps/www/public/images/launchweek/ant.png differ diff --git a/apps/www/public/images/launchweek/antcopple.png b/apps/www/public/images/launchweek/antcopple.png new file mode 100644 index 00000000000..769cd8b3b4f Binary files /dev/null and b/apps/www/public/images/launchweek/antcopple.png differ diff --git a/apps/www/public/images/launchweek/blog-icon.svg b/apps/www/public/images/launchweek/blog-icon.svg new file mode 100644 index 00000000000..7540a84898d --- /dev/null +++ b/apps/www/public/images/launchweek/blog-icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/www/public/images/launchweek/blogpost.svg b/apps/www/public/images/launchweek/blogpost.svg new file mode 100644 index 00000000000..f3cd890cfeb --- /dev/null +++ b/apps/www/public/images/launchweek/blogpost.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/www/public/images/launchweek/cdn-caching-bg-light.png b/apps/www/public/images/launchweek/cdn-caching-bg-light.png new file mode 100644 index 00000000000..6fad05721a2 Binary files /dev/null and b/apps/www/public/images/launchweek/cdn-caching-bg-light.png differ diff --git a/apps/www/public/images/launchweek/cdn-caching-bg.png b/apps/www/public/images/launchweek/cdn-caching-bg.png new file mode 100644 index 00000000000..bab530bd1ce Binary files /dev/null and b/apps/www/public/images/launchweek/cdn-caching-bg.png differ diff --git a/apps/www/public/images/launchweek/copple.png b/apps/www/public/images/launchweek/copple.png new file mode 100644 index 00000000000..18fbefa8aad Binary files /dev/null and b/apps/www/public/images/launchweek/copple.png differ diff --git a/apps/www/public/images/launchweek/docs-update-bg.png b/apps/www/public/images/launchweek/docs-update-bg.png new file mode 100644 index 00000000000..87893a7b76b Binary files /dev/null and b/apps/www/public/images/launchweek/docs-update-bg.png differ diff --git a/apps/www/public/images/launchweek/docs-update-bg__.png b/apps/www/public/images/launchweek/docs-update-bg__.png new file mode 100644 index 00000000000..12de95b1b48 Binary files /dev/null and b/apps/www/public/images/launchweek/docs-update-bg__.png differ diff --git a/apps/www/public/images/launchweek/docs.svg b/apps/www/public/images/launchweek/docs.svg new file mode 100644 index 00000000000..89218192301 --- /dev/null +++ b/apps/www/public/images/launchweek/docs.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/www/public/images/launchweek/encryption-bg-light.png b/apps/www/public/images/launchweek/encryption-bg-light.png new file mode 100644 index 00000000000..9de76cf9127 Binary files /dev/null and b/apps/www/public/images/launchweek/encryption-bg-light.png differ diff --git a/apps/www/public/images/launchweek/encryption-bg.png b/apps/www/public/images/launchweek/encryption-bg.png new file mode 100644 index 00000000000..01dff450301 Binary files /dev/null and b/apps/www/public/images/launchweek/encryption-bg.png differ diff --git a/apps/www/public/images/launchweek/encryption-bg.svg b/apps/www/public/images/launchweek/encryption-bg.svg new file mode 100644 index 00000000000..4dabc6af972 --- /dev/null +++ b/apps/www/public/images/launchweek/encryption-bg.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/www/public/images/launchweek/icons-blogpost.svg b/apps/www/public/images/launchweek/icons-blogpost.svg new file mode 100644 index 00000000000..155b8eb067e --- /dev/null +++ b/apps/www/public/images/launchweek/icons-blogpost.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/www/public/images/launchweek/icons-docs.svg b/apps/www/public/images/launchweek/icons-docs.svg new file mode 100644 index 00000000000..274b20b8e4f --- /dev/null +++ b/apps/www/public/images/launchweek/icons-docs.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/www/public/images/launchweek/image-processing-bg-light.png b/apps/www/public/images/launchweek/image-processing-bg-light.png new file mode 100644 index 00000000000..72eed0b732a Binary files /dev/null and b/apps/www/public/images/launchweek/image-processing-bg-light.png differ diff --git a/apps/www/public/images/launchweek/image-processing-bg.png b/apps/www/public/images/launchweek/image-processing-bg.png new file mode 100644 index 00000000000..ae3334d8502 Binary files /dev/null and b/apps/www/public/images/launchweek/image-processing-bg.png differ diff --git a/apps/www/public/images/launchweek/link.svg b/apps/www/public/images/launchweek/link.svg new file mode 100644 index 00000000000..940f584166d --- /dev/null +++ b/apps/www/public/images/launchweek/link.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/www/public/images/launchweek/mfa-bg-light.png b/apps/www/public/images/launchweek/mfa-bg-light.png new file mode 100644 index 00000000000..6ee535ba251 Binary files /dev/null and b/apps/www/public/images/launchweek/mfa-bg-light.png differ diff --git a/apps/www/public/images/launchweek/mfa-bg.png b/apps/www/public/images/launchweek/mfa-bg.png new file mode 100644 index 00000000000..7ab2738a2e5 Binary files /dev/null and b/apps/www/public/images/launchweek/mfa-bg.png differ diff --git a/apps/www/public/images/launchweek/pitr-bg-light.png b/apps/www/public/images/launchweek/pitr-bg-light.png new file mode 100644 index 00000000000..5960c9314bd Binary files /dev/null and b/apps/www/public/images/launchweek/pitr-bg-light.png differ diff --git a/apps/www/public/images/launchweek/pitr-bg.png b/apps/www/public/images/launchweek/pitr-bg.png new file mode 100644 index 00000000000..efc950051d4 Binary files /dev/null and b/apps/www/public/images/launchweek/pitr-bg.png differ diff --git a/apps/www/public/images/launchweek/vault-bg-light.png b/apps/www/public/images/launchweek/vault-bg-light.png new file mode 100644 index 00000000000..50ae3c9462f Binary files /dev/null and b/apps/www/public/images/launchweek/vault-bg-light.png differ diff --git a/apps/www/public/images/launchweek/vault-bg.png b/apps/www/public/images/launchweek/vault-bg.png new file mode 100644 index 00000000000..2b927dcbab8 Binary files /dev/null and b/apps/www/public/images/launchweek/vault-bg.png differ diff --git a/apps/www/public/images/launchweek/video-icon.svg b/apps/www/public/images/launchweek/video-icon.svg new file mode 100644 index 00000000000..e2a3438dfae --- /dev/null +++ b/apps/www/public/images/launchweek/video-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/www/public/images/launchweek/wrappers-bg-light.png b/apps/www/public/images/launchweek/wrappers-bg-light.png new file mode 100644 index 00000000000..e70745d217c Binary files /dev/null and b/apps/www/public/images/launchweek/wrappers-bg-light.png differ diff --git a/apps/www/public/images/launchweek/wrappers-bg.png b/apps/www/public/images/launchweek/wrappers-bg.png new file mode 100644 index 00000000000..cef57946f8b Binary files /dev/null and b/apps/www/public/images/launchweek/wrappers-bg.png differ diff --git a/apps/www/public/images/launchweek/wrappers-bg.svg b/apps/www/public/images/launchweek/wrappers-bg.svg new file mode 100644 index 00000000000..8698edaf7d2 --- /dev/null +++ b/apps/www/public/images/launchweek/wrappers-bg.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/www/public/rss.xml b/apps/www/public/rss.xml index fa70af0078c..122ff39e516 100644 --- a/apps/www/public/rss.xml +++ b/apps/www/public/rss.xml @@ -5,945 +5,987 @@ https://supabase.com Latest news from Supabase en - Wed, 30 Nov 2022 03:03:00 +0000 + Sun, 11 Dec 2022 16:04:00 +0000 + https://supabase.com/blog/new-supabase-docs-built-with-nextjs + New Supabase Docs, built with Next.js + https://supabase.com/blog/new-supabase-docs-built-with-nextjs + We've redesign our Docs and migrated to Next.js + Sun, 11 Dec 2022 16:04:00 +0000 + + + https://supabase.com/blog/postgres-crdt + pg_crdt - an experimental CRDT extension for Postgres + https://supabase.com/blog/postgres-crdt + Embedding Yjs and Automerge into Postgres for collaborative applications. + Fri, 09 Dec 2022 16:04:00 +0000 + + + https://supabase.com/blog/who-we-hire + Who We Hire at Supabase + https://supabase.com/blog/who-we-hire + Traits we look for to maintain a culture of shipping fast and often + Thu, 08 Dec 2022 16:04:00 +0000 + + + https://supabase.com/blog/launch-week-6-hackathon + Launch Week 6 Hackathon + https://supabase.com/blog/launch-week-6-hackathon + Build an Open Source Project, Win $1500 and the Supabase Darkmode Keyboard + Thu, 08 Dec 2022 16:04:00 +0000 + + + https://supabase.com/blog/supabase-beta-november-2022 + Supabase Beta November 2022 + https://supabase.com/blog/supabase-beta-november-2022 + We are preparing everything for Launch Week 6, but we still had time to ship some goodies this month! + Tue, 06 Dec 2022 16:04:00 +0000 + + + https://supabase.com/blog/the-supabase-content-storm + The Supabase Content Storm + https://supabase.com/blog/the-supabase-content-storm + We worked with +30 content creators to drop a mountain of content simultaneously. + Mon, 05 Dec 2022 16:04:00 +0000 + + https://supabase.com/blog/transparent-column-encryption-with-postgres Transparent Column Encryption with Postgres https://supabase.com/blog/transparent-column-encryption-with-postgres Using pgsodium's Transparent Column Encryption to encrypt data and provide your users with row-level encryption. - Wed, 30 Nov 2022 03:03:00 +0000 + Wed, 30 Nov 2022 16:04:00 +0000 https://supabase.com/blog/sql-or-nosql-both-with-postgresql SQL or NoSQL? Why not use both (with PostgreSQL)? https://supabase.com/blog/sql-or-nosql-both-with-postgresql How to turn Postgres into an easy-to-use NoSQL database that retains all the power of SQL - Wed, 23 Nov 2022 03:03:00 +0000 + Wed, 23 Nov 2022 16:04:00 +0000 https://supabase.com/blog/flutter-authentication-and-authorization-with-rls Flutter Authentication and Authorization with RLS https://supabase.com/blog/flutter-authentication-and-authorization-with-rls Learn how you can secure your Flutter app using Supabase Row Level Security. - Mon, 21 Nov 2022 03:03:00 +0000 + Mon, 21 Nov 2022 16:04:00 +0000 https://supabase.com/blog/fetching-and-caching-supabase-data-in-next-js-server-components Fetching and caching Supabase data in Next.js 13 Server Components https://supabase.com/blog/fetching-and-caching-supabase-data-in-next-js-server-components Next.js 13 introduces new data fetching and caching methods to enable React Server Components and Suspense. - Wed, 16 Nov 2022 03:03:00 +0000 + Wed, 16 Nov 2022 16:04:00 +0000 https://supabase.com/blog/authentication-in-ionic-angular Authentication in Ionic Angular with Supabase https://supabase.com/blog/authentication-in-ionic-angular Learn how to build an Ionic Angular app with authentication, Row Level Security, and Magic Link auth. - Mon, 07 Nov 2022 03:03:00 +0000 + Mon, 07 Nov 2022 16:04:00 +0000 https://supabase.com/blog/supabase-beta-update-october-2022 Supabase Beta October 2022 https://supabase.com/blog/supabase-beta-update-october-2022 New SDKs, quickstarts, Functions tricks, and more. But, more importantly, Launch Week 6️ has a date! - Tue, 01 Nov 2022 03:03:00 +0000 + Tue, 01 Nov 2022 16:04:00 +0000 https://supabase.com/blog/postgresql-commitfest What is PostgreSQL commitfest and how to contribute https://supabase.com/blog/postgresql-commitfest A time-tested method for contributing to the core Postgres code - Wed, 26 Oct 2022 03:03:00 +0000 + Wed, 26 Oct 2022 16:04:00 +0000 https://supabase.com/blog/supabase-flutter-sdk-v1-released supabase-flutter v1 Released https://supabase.com/blog/supabase-flutter-sdk-v1-released We've released supabase-flutter v1. More intuitive way of accessing Supabase from your Flutter application. - Thu, 20 Oct 2022 03:03:00 +0000 + Thu, 20 Oct 2022 16:04:00 +0000 https://supabase.com/blog/supabase-js-v2-released supabase-js v2 Released https://supabase.com/blog/supabase-js-v2-released We've released supabase-js v2. Updated examples, quickstarts, and an improved experience. - Wed, 19 Oct 2022 03:03:00 +0000 + Wed, 19 Oct 2022 16:04:00 +0000 https://supabase.com/blog/postgres-full-text-search-vs-the-rest Postgres Full Text Search vs the rest https://supabase.com/blog/postgres-full-text-search-vs-the-rest Comparing one of the most popular Postgres features against alternatives - Thu, 13 Oct 2022 03:03:00 +0000 + Thu, 13 Oct 2022 16:04:00 +0000 https://supabase.com/blog/supabase-beta-update-september-2022 Supabase Beta September 2022 https://supabase.com/blog/supabase-beta-update-september-2022 We were too focused on clearing out the backlog so we didn't ship anything new last month... or did we?! - Tue, 04 Oct 2022 03:03:00 +0000 + Tue, 04 Oct 2022 16:04:00 +0000 https://supabase.com/blog/postgres-wasm Postgres WASM by Snaplet and Supabase https://supabase.com/blog/postgres-wasm We're open sourcing postgres-wasm, a PostgresQL server that runs inside a browser, with our friends at Snaplet. - Sun, 02 Oct 2022 03:03:00 +0000 + Sun, 02 Oct 2022 16:04:00 +0000 https://supabase.com/blog/choosing-a-postgres-primary-key Choosing a Postgres Primary Key https://supabase.com/blog/choosing-a-postgres-primary-key Turns out the question of which identifier to use as a Primary Key is complicated -- we're going to dive into some of the complexity and inherent trade-offs, and figure things out - Wed, 07 Sep 2022 03:03:00 +0000 + Wed, 07 Sep 2022 16:04:00 +0000 https://supabase.com/blog/supabase-beta-update-august-2022 Supabase Beta August 2022 https://supabase.com/blog/supabase-beta-update-august-2022 Launch Week Special. See everything we shipped, plus winners of the Hackathon and the extended Community Highlights - Tue, 06 Sep 2022 03:03:00 +0000 + Tue, 06 Sep 2022 16:04:00 +0000 https://supabase.com/blog/launch-week-5-hackathon-winners Launch Week 5 Hackathon Winners https://supabase.com/blog/launch-week-5-hackathon-winners Announcing the winners of the Launch Week 5 Hackathon! - Wed, 24 Aug 2022 03:03:00 +0000 + Wed, 24 Aug 2022 16:04:00 +0000 https://supabase.com/blog/building-a-realtime-trello-board-with-supabase-and-angular Building a Realtime Trello Board with Supabase and Angular https://supabase.com/blog/building-a-realtime-trello-board-with-supabase-and-angular Go beyond the hello world example with this real world project. - Tue, 23 Aug 2022 03:03:00 +0000 + Tue, 23 Aug 2022 16:04:00 +0000 https://supabase.com/blog/supabase-vault Supabase Vault https://supabase.com/blog/supabase-vault Today we're announcing Vault, a Postgres extension for managing secrets and encryption inside your database. - Thu, 18 Aug 2022 03:03:00 +0000 + Thu, 18 Aug 2022 16:04:00 +0000 https://supabase.com/blog/postgrest-v10 PostgREST v10: EXPLAIN and Improved Relationship Detection https://supabase.com/blog/postgrest-v10 Today, PostgREST 10 was released. Let's take a look at some of the new features that go hand in hand with supabase-js v2. - Thu, 18 Aug 2022 03:03:00 +0000 + Thu, 18 Aug 2022 16:04:00 +0000 https://supabase.com/blog/pg-jsonschema-a-postgres-extension-for-json-validation pg_jsonschema: JSON Schema support for Postgres https://supabase.com/blog/pg-jsonschema-a-postgres-extension-for-json-validation Today we're releasing pg_jsonschema, a Postgres extension for JSON validation. - Thu, 18 Aug 2022 03:03:00 +0000 + Thu, 18 Aug 2022 16:04:00 +0000 https://supabase.com/blog/launch-week-5-one-more-thing One more thing https://supabase.com/blog/launch-week-5-one-more-thing Let's be honest, it's never just one more thing. - Thu, 18 Aug 2022 03:03:00 +0000 + Thu, 18 Aug 2022 16:04:00 +0000 https://supabase.com/blog/launch-week-5-community-day Community Day https://supabase.com/blog/launch-week-5-community-day Wrapping up Launch Week 5 with contributors, partners, and friends. - Thu, 18 Aug 2022 03:03:00 +0000 + Thu, 18 Aug 2022 16:04:00 +0000 https://supabase.com/blog/supabase-realtime-multiplayer-general-availability Realtime: Multiplayer Edition https://supabase.com/blog/supabase-realtime-multiplayer-general-availability Announcing the general availability of Realtime's Broadcast and Presence. - Wed, 17 Aug 2022 03:03:00 +0000 + Wed, 17 Aug 2022 16:04:00 +0000 https://supabase.com/blog/supabase-soc2 Supabase is SOC2 compliant https://supabase.com/blog/supabase-soc2 Supabase is now SOC2 compliant. Learn how we got here and what it means for our customers. - Tue, 16 Aug 2022 03:03:00 +0000 + Tue, 16 Aug 2022 16:04:00 +0000 https://supabase.com/blog/supabase-js-v2 supabase-js v2 https://supabase.com/blog/supabase-js-v2 A look at supabase-js v2, which brings type support and focuses on quality-of-life improvements for developers. - Mon, 15 Aug 2022 03:03:00 +0000 + Mon, 15 Aug 2022 16:04:00 +0000 https://supabase.com/blog/supabase-cli-v1-and-admin-api-beta Supabase CLI v1 and Management API Beta https://supabase.com/blog/supabase-cli-v1-and-admin-api-beta We are moving Supabase CLI v1 out of beta, and releasing Management API beta. - Sun, 14 Aug 2022 03:03:00 +0000 + Sun, 14 Aug 2022 16:04:00 +0000 https://supabase.com/blog/supabase-series-b Supabase Series B https://supabase.com/blog/supabase-series-b Supabase raised $80M in May, bringing our total funding to $116M. - Thu, 11 Aug 2022 03:03:00 +0000 + Thu, 11 Aug 2022 16:04:00 +0000 https://supabase.com/blog/launch-week-5-hackathon Launch Week 5 Hackathon https://supabase.com/blog/launch-week-5-hackathon Build to win $1500 - Friday 12th to Monday 21st August 2022 - Tue, 09 Aug 2022 03:03:00 +0000 + Tue, 09 Aug 2022 16:04:00 +0000 https://supabase.com/blog/slack-consolidate-slackbot-to-consolidate-messages Slack Consolidate: a slackbot built with Python and Supabase https://supabase.com/blog/slack-consolidate-slackbot-to-consolidate-messages A slackbot to consolidate messages from different channels using Supabase, Slack SDK and Python - Mon, 08 Aug 2022 03:03:00 +0000 + Mon, 08 Aug 2022 16:04:00 +0000 https://supabase.com/blog/supabase-beta-update-july-2022 Supabase Beta July 2022 https://supabase.com/blog/supabase-beta-update-july-2022 Launch Week Golden Tickets, Flutter SDK 1.0 Developer Preview and more... - Tue, 02 Aug 2022 03:03:00 +0000 + Tue, 02 Aug 2022 16:04:00 +0000 https://supabase.com/blog/supabase-flutter-sdk-1-developer-preview Supabase Flutter SDK 1.0 Developer Preview https://supabase.com/blog/supabase-flutter-sdk-1-developer-preview Supabase Flutter SDK is getting a major update and we need your help making it better. - Mon, 01 Aug 2022 03:03:00 +0000 + Mon, 01 Aug 2022 16:04:00 +0000 https://supabase.com/blog/seen-by-in-postgresql Implementing "seen by" functionality with Postgres https://supabase.com/blog/seen-by-in-postgresql Different approaches for tracking visitor counts with PostgreSQL. - Sun, 17 Jul 2022 03:03:00 +0000 + Sun, 17 Jul 2022 16:04:00 +0000 https://supabase.com/blog/supabase-auth-helpers-with-sveltekit-support Revamped Auth Helpers for Supabase (with SvelteKit support) https://supabase.com/blog/supabase-auth-helpers-with-sveltekit-support Supabase Auth Helpers now have improved developer experience, Sveltekit support, and more. - Tue, 12 Jul 2022 03:03:00 +0000 + Tue, 12 Jul 2022 16:04:00 +0000 https://supabase.com/blog/beta-update-june-2022 Supabase Beta June 2022 https://supabase.com/blog/beta-update-june-2022 Auth Helpers, Unlimited Free Projects, CLI and more... - Tue, 05 Jul 2022 03:03:00 +0000 + Tue, 05 Jul 2022 16:04:00 +0000 https://supabase.com/blog/flutter-tutorial-building-a-chat-app Flutter Tutorial: building a Flutter chat app https://supabase.com/blog/flutter-tutorial-building-a-chat-app Learn how to build a Flutter chat app with open source and scalable backend (inc. auth, realtime, database, and more). - Wed, 29 Jun 2022 03:03:00 +0000 + Wed, 29 Jun 2022 16:04:00 +0000 https://supabase.com/blog/visualizing-supabase-data-using-metabase Visualizing Supabase Data using Metabase https://supabase.com/blog/visualizing-supabase-data-using-metabase How to create different kinds of charts out of data stored in Supabase using Metabase. - Tue, 28 Jun 2022 03:03:00 +0000 + Tue, 28 Jun 2022 16:04:00 +0000 https://supabase.com/blog/partial-postgresql-data-dumps-with-rls Partial data dumps using Postgres Row Level Security https://supabase.com/blog/partial-postgresql-data-dumps-with-rls Using RLS to create seed files for local PostgreSQL testing. - Mon, 27 Jun 2022 03:03:00 +0000 + Mon, 27 Jun 2022 16:04:00 +0000 https://supabase.com/blog/loading-data-supabase-python Python data loading with Supabase https://supabase.com/blog/loading-data-supabase-python An example of how to load data into Supabase using supabase-py - Thu, 16 Jun 2022 03:03:00 +0000 + Thu, 16 Jun 2022 16:04:00 +0000 https://supabase.com/blog/beta-update-may-2022 Supabase Beta May 2022 https://supabase.com/blog/beta-update-may-2022 Product and community updates including wildcard auth redirects, edge functions with webhooks, and Prometheus endpoints for everybody. - Tue, 31 May 2022 03:03:00 +0000 + Tue, 31 May 2022 16:04:00 +0000 https://supabase.com/blog/how-supabase-accelerates-development-of-all-pull-together How Mike Lyndon is using Supabase to accelerate development of AllPullTogether https://supabase.com/blog/how-supabase-accelerates-development-of-all-pull-together Mike Lyndon is learning web development as he builds AllPullTogether, and Supabase is helping him accelerate what he can accomplish. - Wed, 25 May 2022 03:03:00 +0000 + Wed, 25 May 2022 16:04:00 +0000 https://supabase.com/blog/partner-gallery-works-with-supabase Works With Supabase - announcing our Partner Gallery https://supabase.com/blog/partner-gallery-works-with-supabase Introducing our Partner Gallery - open source and made with Supabase. - Tue, 19 Apr 2022 03:03:00 +0000 + Tue, 19 Apr 2022 16:04:00 +0000 https://supabase.com/blog/bring-the-func-hackathon-winners Bring the Func Hackathon Winners 2022 https://supabase.com/blog/bring-the-func-hackathon-winners Celebrating many amazing OSS Hackathon projects using GraphQL and Edge Functions. - Sun, 17 Apr 2022 03:03:00 +0000 + Sun, 17 Apr 2022 16:04:00 +0000 https://supabase.com/blog/beta-update-march-2022 Supabase Beta March 2022 https://supabase.com/blog/beta-update-march-2022 Functions, GraphQL, and much more. - Thu, 14 Apr 2022 03:03:00 +0000 + Thu, 14 Apr 2022 16:04:00 +0000 https://supabase.com/blog/supabrew Supabrew - Never Code Thirsty https://supabase.com/blog/supabrew A light and refreshing non-alcoholic beer for devs. - Fri, 01 Apr 2022 03:03:00 +0000 + Thu, 31 Mar 2022 16:04:00 +0000 https://supabase.com/blog/supabase-realtime-with-multiplayer-features Supabase Realtime, with Multiplayer Features https://supabase.com/blog/supabase-realtime-with-multiplayer-features Today we're announced Realtime, with multiplayer features. Realtime enables broadcast, presence, and listening to database changes delivered over WebSockets. - Fri, 01 Apr 2022 03:03:00 +0000 + Thu, 31 Mar 2022 16:04:00 +0000 https://supabase.com/blog/hackathon-bring-the-func Hackathon: Bring the Func(🕺) https://supabase.com/blog/hackathon-bring-the-func Build open-source projects with our latest features, win limited edition swag and plant a tree! - Fri, 01 Apr 2022 03:03:00 +0000 + Thu, 31 Mar 2022 16:04:00 +0000 https://supabase.com/blog/supabase-edge-functions Edge Functions are now available in Supabase https://supabase.com/blog/supabase-edge-functions Today we're launching Edge Functions. Edge Functions let you execute Typescript code close to your users, no matter where they're located. - Wed, 30 Mar 2022 03:03:00 +0000 + Wed, 30 Mar 2022 16:04:00 +0000 https://supabase.com/blog/supabase-enterprise Introducing Supabase Enterprise https://supabase.com/blog/supabase-enterprise Today we are releasing Supabase Enterprise, a suite of features to scale your project. - Tue, 29 Mar 2022 03:03:00 +0000 + Tue, 29 Mar 2022 16:04:00 +0000 https://supabase.com/blog/graphql-now-available GraphQL is now available in Supabase https://supabase.com/blog/graphql-now-available GraphQL support is now in general availability on the Supabase platform via our open source PostgreSQL extension, pg_graphql (beta). - Mon, 28 Mar 2022 03:03:00 +0000 + Mon, 28 Mar 2022 16:04:00 +0000 https://supabase.com/blog/community-day-lw4 Community Day https://supabase.com/blog/community-day-lw4 Kicking off Launch Week 4 with contributors, partners, and friends. - Sun, 27 Mar 2022 03:03:00 +0000 + Sun, 27 Mar 2022 16:04:00 +0000 https://supabase.com/blog/supabase-launch-week-four Supabase Launch Week 4 https://supabase.com/blog/supabase-launch-week-four Launch Week 4: One new feature every day for an entire week. Starting Monday 28th March. - Thu, 24 Mar 2022 03:03:00 +0000 + Thu, 24 Mar 2022 16:04:00 +0000 https://supabase.com/blog/should-i-open-source-my-company Should I Open Source my Company? https://supabase.com/blog/should-i-open-source-my-company The unexpected upsides of building in public - Thu, 24 Mar 2022 03:03:00 +0000 + Thu, 24 Mar 2022 16:04:00 +0000 https://supabase.com/blog/audit Postgres Auditing in 150 lines of SQL https://supabase.com/blog/audit PostgreSQL has a robust set of features which we can leverage to create a generic auditing solution in 150 lines of SQL. - Mon, 07 Mar 2022 03:03:00 +0000 + Mon, 07 Mar 2022 16:04:00 +0000 https://supabase.com/blog/supabase-beta-january-2022 Supabase Beta January 2022 https://supabase.com/blog/supabase-beta-january-2022 New auth providers, SMS providers, and new videos. - Mon, 21 Feb 2022 03:03:00 +0000 + Mon, 21 Feb 2022 16:04:00 +0000 https://supabase.com/blog/supabase-beta-december-2021 Supabase Beta December 2021 https://supabase.com/blog/supabase-beta-december-2021 New crypto extension, Postgres videos, and a bunch of cool integrations. - Wed, 19 Jan 2022 03:03:00 +0000 + Wed, 19 Jan 2022 16:04:00 +0000 https://supabase.com/blog/product-hunt-golden-kitty-awards-2021 Golden Kitty Awards Ceremony Watch Party with Supabase https://supabase.com/blog/product-hunt-golden-kitty-awards-2021 Hang out with us while watching the Product Hunt Golden Kitty Awards Ceremony - Wed, 19 Jan 2022 03:03:00 +0000 + Wed, 19 Jan 2022 16:04:00 +0000 https://supabase.com/blog/holiday-hackdays-winners-2021 Holiday Hackdays Winners 2021 https://supabase.com/blog/holiday-hackdays-winners-2021 Celebrating many amazing projects submitted to our Holiday Hackdays Hackathon. - Thu, 16 Dec 2021 03:03:00 +0000 + Thu, 16 Dec 2021 16:04:00 +0000 https://supabase.com/blog/beta-november-2021-launch-week-recap Supabase Beta November 2021: Launch Week Recap https://supabase.com/blog/beta-november-2021-launch-week-recap We wrapped up November with Supabase's third Launch Week. Here's all the awesome stuff that got shipped ... - Tue, 14 Dec 2021 03:03:00 +0000 + Tue, 14 Dec 2021 16:04:00 +0000 https://supabase.com/blog/supabase-holiday-hackdays-hackathon Kicking off the Holiday Hackdays https://supabase.com/blog/supabase-holiday-hackdays-hackathon Build cool stuff and celebrate open-source software with us during the Holiday Hackdays! - Thu, 02 Dec 2021 03:03:00 +0000 + Thu, 02 Dec 2021 16:04:00 +0000 https://supabase.com/blog/pg-graphql pg_graphql: A GraphQL extension for PostgreSQL https://supabase.com/blog/pg-graphql GraphQL support is in development for PostgreSQL + Supabase. - Thu, 02 Dec 2021 03:03:00 +0000 + Thu, 02 Dec 2021 16:04:00 +0000 https://supabase.com/blog/launch-week-three-friday-five-more-things Five more things https://supabase.com/blog/launch-week-three-friday-five-more-things It's never just one more thing! - Thu, 02 Dec 2021 03:03:00 +0000 + Thu, 02 Dec 2021 16:04:00 +0000 https://supabase.com/blog/supabase-acquires-logflare Supabase acquires Logflare https://supabase.com/blog/supabase-acquires-logflare Today, we're ecstatic to announce that Logflare is joining Supabase. - Wed, 01 Dec 2021 03:03:00 +0000 + Wed, 01 Dec 2021 16:04:00 +0000 https://supabase.com/blog/realtime-row-level-security-in-postgresql Realtime Postgres RLS now available on Supabase https://supabase.com/blog/realtime-row-level-security-in-postgresql Realtime database changes are now broadcast to authenticated users, respecting the same PostgreSQL policies that you use for Row Level Security. - Tue, 30 Nov 2021 03:03:00 +0000 + Tue, 30 Nov 2021 16:04:00 +0000 https://supabase.com/blog/supabase-studio Supabase Studio https://supabase.com/blog/supabase-studio The same Dashboard that you're using on our Platform is now available for local development and Self-Hosting. - Mon, 29 Nov 2021 03:03:00 +0000 + Mon, 29 Nov 2021 16:04:00 +0000 https://supabase.com/blog/community-day-lw3 Community Day https://supabase.com/blog/community-day-lw3 Kicking off launch week by highlighting the communities around Supabase. - Sun, 28 Nov 2021 03:03:00 +0000 + Sun, 28 Nov 2021 16:04:00 +0000 https://supabase.com/blog/whats-new-in-postgres-14 New in PostgreSQL 14: What every developer should know https://supabase.com/blog/whats-new-in-postgres-14 A quick look at some new features and functionality in PostgreSQL 14. - Sat, 27 Nov 2021 03:03:00 +0000 + Sat, 27 Nov 2021 16:04:00 +0000 https://supabase.com/blog/postgrest-9 PostgREST 9 https://supabase.com/blog/postgrest-9 New features and updates in PostgREST version 9. - Fri, 26 Nov 2021 03:03:00 +0000 + Fri, 26 Nov 2021 16:04:00 +0000 https://supabase.com/blog/supabase-launch-week-the-trilogy Supabase Launch Week III: Holiday Special https://supabase.com/blog/supabase-launch-week-the-trilogy Tis the season to be shipping. - Thu, 25 Nov 2021 03:03:00 +0000 + Thu, 25 Nov 2021 16:04:00 +0000 https://supabase.com/blog/supabase-how-we-launch How we launch at Supabase https://supabase.com/blog/supabase-how-we-launch The history and methodology of Supabase Launch Week. - Thu, 25 Nov 2021 03:03:00 +0000 + Thu, 25 Nov 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-october-2021 Supabase Beta October 2021 https://supabase.com/blog/supabase-beta-october-2021 Three new Auth providers, multi-schema support, and we're gearing up for another Launch Week. - Sat, 06 Nov 2021 03:03:00 +0000 + Sat, 06 Nov 2021 16:04:00 +0000 https://supabase.com/blog/supabase-series-a Supabase $30m Series A https://supabase.com/blog/supabase-series-a Supabase just raised $30M, bringing our total funding to $36M. - Wed, 27 Oct 2021 03:03:00 +0000 + Wed, 27 Oct 2021 16:04:00 +0000 https://supabase.com/blog/replenysh-time-to-value-in-less-than-24-hours Replenysh uses Supabase to implement OTP in less than 24-hours https://supabase.com/blog/replenysh-time-to-value-in-less-than-24-hours Learn how Replenysh uses Supabase to power the circular economy, redefining how brands interact with their customers and products. - Mon, 18 Oct 2021 03:03:00 +0000 + Mon, 18 Oct 2021 16:04:00 +0000 https://supabase.com/blog/hacktoberfest-hackathon-winners-2021 Hacktoberfest Hackathon Winners 2021 https://supabase.com/blog/hacktoberfest-hackathon-winners-2021 Celebrating many amazing projects submitted to our Hacktoberfest Hackathon. - Wed, 13 Oct 2021 03:03:00 +0000 + Wed, 13 Oct 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-sept-2021 Supabase Beta Sept 2021 https://supabase.com/blog/supabase-beta-sept-2021 Hackathon, Aborting request, UI updates, and now Hiring. - Sun, 03 Oct 2021 03:03:00 +0000 + Sun, 03 Oct 2021 16:04:00 +0000 https://supabase.com/blog/supabase-hacktoberfest-hackathon-2021 Supabase Hacktoberfest Hackathon 2021 https://supabase.com/blog/supabase-hacktoberfest-hackathon-2021 We're running another Supabase Hackathon during Hacktoberfest! - Mon, 27 Sep 2021 03:03:00 +0000 + Mon, 27 Sep 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-august-2021 Supabase Beta August 2021 https://supabase.com/blog/supabase-beta-august-2021 Fundraising, Realtime Security, custom SMS templates, and deployments in South Korea. - Thu, 09 Sep 2021 03:03:00 +0000 + Thu, 09 Sep 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-july-2021 Supabase Beta July 2021 https://supabase.com/blog/supabase-beta-july-2021 Discord Logins, Vercel Integration, Full text search, and OAuth guides. - Wed, 11 Aug 2021 03:03:00 +0000 + Wed, 11 Aug 2021 16:04:00 +0000 https://supabase.com/blog/hackathon-winners Open Source Hackathon Winners https://supabase.com/blog/hackathon-winners Let the medal ceremony begin for the best projects submitted during the Supabase Hackathon. - Sun, 08 Aug 2021 03:03:00 +0000 + Sun, 08 Aug 2021 16:04:00 +0000 https://supabase.com/blog/supabase-swag-store Supabase Swag Store https://supabase.com/blog/supabase-swag-store Today we are officially launching the Supabase Swag Store. - Thu, 29 Jul 2021 03:03:00 +0000 + Thu, 29 Jul 2021 16:04:00 +0000 https://supabase.com/blog/supabase-functions-updates Updates for Supabase Functions https://supabase.com/blog/supabase-functions-updates The question on everyone's mind - are we launching Supabase Functions? Well, it's complicated. - Thu, 29 Jul 2021 03:03:00 +0000 + Thu, 29 Jul 2021 16:04:00 +0000 https://supabase.com/blog/1-the-supabase-hackathon The Supabase Hackathon https://supabase.com/blog/1-the-supabase-hackathon A whole week of Hacking for Fun and Prizes. - Thu, 29 Jul 2021 03:03:00 +0000 + Thu, 29 Jul 2021 16:04:00 +0000 https://supabase.com/blog/supabase-reports-and-metrics Supabase Reports and Metrics https://supabase.com/blog/supabase-reports-and-metrics We're exposing a full set of metrics in your projects, so that you can build better (and faster) products for your users. - Wed, 28 Jul 2021 03:03:00 +0000 + Wed, 28 Jul 2021 16:04:00 +0000 https://supabase.com/blog/supabase-auth-passwordless-sms-login Supabase Auth v2: Phone Auth now available https://supabase.com/blog/supabase-auth-passwordless-sms-login Phone Auth is available today on all new and existing Supabase projects. - Tue, 27 Jul 2021 03:03:00 +0000 + Tue, 27 Jul 2021 16:04:00 +0000 https://supabase.com/blog/mobbin-supabase-200000-users Mobbin uses Supabase to authenticate 200,000 users https://supabase.com/blog/mobbin-supabase-200000-users Learn how Mobbin migrated 200,000 users from Firebase for a better authentication experience. - Tue, 27 Jul 2021 03:03:00 +0000 + Tue, 27 Jul 2021 16:04:00 +0000 https://supabase.com/blog/storage-beta Supabase Storage now in Beta https://supabase.com/blog/storage-beta Supabase Storage moves into Beta. - Mon, 26 Jul 2021 03:03:00 +0000 + Mon, 26 Jul 2021 16:04:00 +0000 https://supabase.com/blog/spot-flutter-with-postgres Spot: a video sharing app built with Flutter https://supabase.com/blog/spot-flutter-with-postgres Spot is a geolocation-based video-sharing app with some social networking features. - Mon, 26 Jul 2021 03:03:00 +0000 + Mon, 26 Jul 2021 16:04:00 +0000 https://supabase.com/blog/supabase-postgres-13 Supabase is now on Postgres 13.3 https://supabase.com/blog/supabase-postgres-13 From today, new Supabase projects will be on a version of Supabase Postgres that runs on Postgres 13.3. - Sun, 25 Jul 2021 03:03:00 +0000 + Sun, 25 Jul 2021 16:04:00 +0000 https://supabase.com/blog/supabase-community-day Supabase Community Day https://supabase.com/blog/supabase-community-day Community Day - Sun, 25 Jul 2021 03:03:00 +0000 + Sun, 25 Jul 2021 16:04:00 +0000 https://supabase.com/blog/epsilon3-self-hosting Epsilon3 Self-Host Supabase To Revolutionize Space Operations https://supabase.com/blog/epsilon3-self-hosting Learn how the team at Epsilon3 use Supabase to help teams execute secure and reliable operations in an industry that project spend runs into the billions. - Sun, 25 Jul 2021 03:03:00 +0000 + Sun, 25 Jul 2021 16:04:00 +0000 https://supabase.com/blog/supabase-launch-week-sql Supabase Launch Week II: The SQL https://supabase.com/blog/supabase-launch-week-sql Five days of Supabase. Again. - Wed, 21 Jul 2021 03:03:00 +0000 + Wed, 21 Jul 2021 16:04:00 +0000 https://supabase.com/blog/roles-postgres-hooks Protecting reserved roles with PostgreSQL Hooks https://supabase.com/blog/roles-postgres-hooks Using Postgres Hooks to protect functionality in your Postgres database. - Thu, 01 Jul 2021 03:03:00 +0000 + Thu, 01 Jul 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-june-2021 Supabase Beta June 2021 https://supabase.com/blog/supabase-beta-june-2021 Discord Logins, Vercel Integration, Full text search, and OAuth guides. - Tue, 01 Jun 2021 03:03:00 +0000 + Tue, 01 Jun 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-may-2021 Supabase Beta May 2021 https://supabase.com/blog/supabase-beta-may-2021 Apple & Twitter Logins, Supabase Grid, Go & Swift Libraries. - Tue, 01 Jun 2021 03:03:00 +0000 + Tue, 01 Jun 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-april-2021 Supabase Beta April 2021 https://supabase.com/blog/supabase-beta-april-2021 Supabase "gardening" - stability, security, and community support. - Tue, 04 May 2021 03:03:00 +0000 + Tue, 04 May 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-march-2021 Supabase Beta March 2021 https://supabase.com/blog/supabase-beta-march-2021 Launch week, Storage, Supabase CLI, Connection Pooling, Supabase UI, and Pricing. - Mon, 05 Apr 2021 03:03:00 +0000 + Mon, 05 Apr 2021 16:04:00 +0000 https://supabase.com/blog/supabase-workflows Workflows are coming to Supabase https://supabase.com/blog/supabase-workflows Functions are great, but you know what's better? - Thu, 01 Apr 2021 03:03:00 +0000 + Thu, 01 Apr 2021 16:04:00 +0000 https://supabase.com/blog/supabase-pgbouncer PgBouncer is now available in Supabase https://supabase.com/blog/supabase-pgbouncer Better support for Serverless and Postgres. - Thu, 01 Apr 2021 03:03:00 +0000 + Thu, 01 Apr 2021 16:04:00 +0000 https://supabase.com/blog/supabase-dot-com Supabase Dot Com https://supabase.com/blog/supabase-dot-com The Supabase Domain name is changing. - Thu, 01 Apr 2021 03:03:00 +0000 + Thu, 01 Apr 2021 16:04:00 +0000 https://supabase.com/blog/supabase-nft-marketplace Supabase Launches NFT Marketplace https://supabase.com/blog/supabase-nft-marketplace A fully encrypted NFT platform to protect and transact your digital assets - Thu, 01 Apr 2021 03:03:00 +0000 + Wed, 31 Mar 2021 16:04:00 +0000 https://supabase.com/blog/supabase-cli Supabase CLI https://supabase.com/blog/supabase-cli Local development, database migrations, and self-hosting. - Wed, 31 Mar 2021 03:03:00 +0000 + Tue, 30 Mar 2021 16:04:00 +0000 https://supabase.com/blog/supabase-storage Storage is now available in Supabase https://supabase.com/blog/supabase-storage Launching Supabase Storage and how you can use it in your apps - Tue, 30 Mar 2021 03:03:00 +0000 + Mon, 29 Mar 2021 16:04:00 +0000 https://supabase.com/blog/pricing Supabase Beta Pricing https://supabase.com/blog/pricing Supabase launches Beta pricing structure - Mon, 29 Mar 2021 03:03:00 +0000 + Sun, 28 Mar 2021 16:04:00 +0000 https://supabase.com/blog/launch-week Launch week https://supabase.com/blog/launch-week Five days of Supabase. - Wed, 24 Mar 2021 03:03:00 +0000 + Wed, 24 Mar 2021 16:04:00 +0000 https://supabase.com/blog/angels-of-supabase Angels of Supabase https://supabase.com/blog/angels-of-supabase Meet the investors of Supabase. - Wed, 24 Mar 2021 03:03:00 +0000 + Wed, 24 Mar 2021 16:04:00 +0000 https://supabase.com/blog/In-The-Loop Developers stay up to date with intheloop.dev https://supabase.com/blog/In-The-Loop Learn why Kevin is building intheloop.dev with Supabase - Mon, 22 Mar 2021 03:03:00 +0000 + Sun, 21 Mar 2021 16:04:00 +0000 https://supabase.com/blog/using-supabase-replit Using Supabase in Replit https://supabase.com/blog/using-supabase-replit Free hosted relational database from within your node.js repl - Thu, 11 Mar 2021 03:03:00 +0000 + Wed, 10 Mar 2021 16:04:00 +0000 https://supabase.com/blog/toad-a-link-shortener-with-simple-apis-for-low-coders Toad, a link shortener with simple APIs for low-coders https://supabase.com/blog/toad-a-link-shortener-with-simple-apis-for-low-coders An easy-to-use link shortening tool with simple APIs - Mon, 08 Mar 2021 03:03:00 +0000 + Sun, 07 Mar 2021 16:04:00 +0000 https://supabase.com/blog/postgres-as-a-cron-server Postgres as a CRON Server https://supabase.com/blog/postgres-as-a-cron-server Running repetitive tasks with your Postgres database. - Fri, 05 Mar 2021 03:03:00 +0000 + Thu, 04 Mar 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-february-2021 Supabase Beta February 2021 https://supabase.com/blog/supabase-beta-february-2021 One year of building. - Tue, 02 Mar 2021 03:03:00 +0000 + Mon, 01 Mar 2021 16:04:00 +0000 https://supabase.com/blog/cracking-postgres-interview Cracking PostgreSQL Interview Questions https://supabase.com/blog/cracking-postgres-interview Understand the top PostgreSQL Interview Questions - Sat, 27 Feb 2021 03:03:00 +0000 + Fri, 26 Feb 2021 16:04:00 +0000 https://supabase.com/blog/case-study-roboflow Roboflow.com choose Supabase to power Paint.wtf leaderboard https://supabase.com/blog/case-study-roboflow Learn how Roboflow.com used Supabase to build their Paint.wtf leaderboard - Tue, 09 Feb 2021 03:03:00 +0000 + Mon, 08 Feb 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-january-2021 Supabase Beta January 2021 https://supabase.com/blog/supabase-beta-january-2021 Eleven months of building. - Tue, 02 Feb 2021 03:03:00 +0000 + Mon, 01 Feb 2021 16:04:00 +0000 https://supabase.com/blog/supabase-beta-december-2020 Supabase Beta December 2020 https://supabase.com/blog/supabase-beta-december-2020 Ten months of building. - Sat, 02 Jan 2021 03:03:00 +0000 + Fri, 01 Jan 2021 16:04:00 +0000 https://supabase.com/blog/supabase-dashboard-performance Making the Supabase Dashboard Supa-fast https://supabase.com/blog/supabase-dashboard-performance Improving the performance of the Supabase dashboard - Sun, 13 Dec 2020 03:03:00 +0000 + Sat, 12 Dec 2020 16:04:00 +0000 https://supabase.com/blog/supabase-striveschool Supabase Partners With Strive School To Help Teach Open Source https://supabase.com/blog/supabase-striveschool Supabase Partners With Strive School To Help Teach Open Source To The Next Generation Of Developers - Wed, 02 Dec 2020 03:03:00 +0000 + Tue, 01 Dec 2020 16:04:00 +0000 https://supabase.com/blog/case-study-xendit Xendit Built a Counter-Fraud Watchlist for the Fintech Industry https://supabase.com/blog/case-study-xendit See how Xendit use Supabase to build a full-text search engine. - Wed, 02 Dec 2020 03:03:00 +0000 + Tue, 01 Dec 2020 16:04:00 +0000 https://supabase.com/blog/case-study-tayfa TAYFA Built a No-Code Website Builder in Seven Days https://supabase.com/blog/case-study-tayfa See how Tayfa went from idea to paying customer in less than 30 days. - Wed, 02 Dec 2020 03:03:00 +0000 + Tue, 01 Dec 2020 16:04:00 +0000 https://supabase.com/blog/case-study-monitoro Monitoro Built a Web Crawler Handling Millions of API Requests https://supabase.com/blog/case-study-monitoro See how Monitoro built an automated scraping platform using Supabase. - Wed, 02 Dec 2020 03:03:00 +0000 + Tue, 01 Dec 2020 16:04:00 +0000 https://supabase.com/blog/supabase-alpha-november-2020 Supabase Alpha November 2020 https://supabase.com/blog/supabase-alpha-november-2020 Nine months of building. - Tue, 01 Dec 2020 03:03:00 +0000 + Mon, 30 Nov 2020 16:04:00 +0000 https://supabase.com/blog/postgresql-views Postgres Views https://supabase.com/blog/postgresql-views Creating and using a view in PostgreSQL. - Wed, 18 Nov 2020 03:03:00 +0000 + Tue, 17 Nov 2020 16:04:00 +0000 https://supabase.com/blog/supabase-alpha-october-2020 Supabase Alpha October 2020 https://supabase.com/blog/supabase-alpha-october-2020 Eight months of building. - Mon, 02 Nov 2020 03:03:00 +0000 + Sun, 01 Nov 2020 16:04:00 +0000 https://supabase.com/blog/improved-dx Supabase.js 1.0 https://supabase.com/blog/improved-dx We're releasing a new version of our Supabase client with some awesome new improvements. - Fri, 30 Oct 2020 03:03:00 +0000 + Thu, 29 Oct 2020 16:04:00 +0000 https://supabase.com/blog/supabase-alpha-september-2020 Supabase Alpha September 2020 https://supabase.com/blog/supabase-alpha-september-2020 Seven months of building. - Sat, 03 Oct 2020 03:03:00 +0000 + Fri, 02 Oct 2020 16:04:00 +0000 https://supabase.com/blog/supabase-hacktoberfest-2020 Supabase Hacktoberfest 2020 https://supabase.com/blog/supabase-hacktoberfest-2020 Join us for a celebration of open source software and learn how to contribute to Supabase. - Fri, 11 Sep 2020 03:03:00 +0000 + Thu, 10 Sep 2020 16:04:00 +0000 https://supabase.com/blog/supabase-alpha-august-2020 Supabase Alpha August 2020 https://supabase.com/blog/supabase-alpha-august-2020 Six months of building - Thu, 03 Sep 2020 03:03:00 +0000 + Wed, 02 Sep 2020 16:04:00 +0000 https://supabase.com/blog/supabase-auth Supabase Auth https://supabase.com/blog/supabase-auth Authenticate and authorize your users with Supabase Auth - Wed, 05 Aug 2020 03:03:00 +0000 + Tue, 04 Aug 2020 16:04:00 +0000 https://supabase.com/blog/supabase-alpha-july-2020 Supabase Alpha July 2020 https://supabase.com/blog/supabase-alpha-july-2020 Five months of building - Sun, 02 Aug 2020 03:03:00 +0000 + Sat, 01 Aug 2020 16:04:00 +0000 https://supabase.com/blog/continuous-postgresql-backup-walg Continuous PostgreSQL Backups using WAL-G https://supabase.com/blog/continuous-postgresql-backup-walg Have you ever wanted to restore your database's state to a particular moment in time? This post explains how, using WAL-G. - Sun, 02 Aug 2020 03:03:00 +0000 + Sat, 01 Aug 2020 16:04:00 +0000 https://supabase.com/blog/alpha-launch-postmortem Alpha Launch Postmortem https://supabase.com/blog/alpha-launch-postmortem Everything that went wrong with Supabase's launch - Fri, 10 Jul 2020 03:03:00 +0000 + Thu, 09 Jul 2020 16:04:00 +0000 https://supabase.com/blog/postgresql-templates What are PostgreSQL Templates? https://supabase.com/blog/postgresql-templates What are PostgreSQL templates and what are they used for? - Thu, 09 Jul 2020 03:03:00 +0000 + Wed, 08 Jul 2020 16:04:00 +0000 https://supabase.com/blog/postgresql-physical-logical-backups Physical vs Logical Backups in PostgreSQL https://supabase.com/blog/postgresql-physical-logical-backups What are physical and logical backups in Postgres? - Tue, 07 Jul 2020 03:03:00 +0000 + Mon, 06 Jul 2020 16:04:00 +0000 https://supabase.com/blog/supabase-alpha-june-2020 Supabase Alpha June 2020 https://supabase.com/blog/supabase-alpha-june-2020 Four months of building - Wed, 01 Jul 2020 03:03:00 +0000 + Tue, 30 Jun 2020 16:04:00 +0000 https://supabase.com/blog/supabase-steve-chavez Steve Chavez has joined Supabase https://supabase.com/blog/supabase-steve-chavez Steve joins Supabase to help build Auth. - Mon, 15 Jun 2020 03:03:00 +0000 + Sun, 14 Jun 2020 16:04:00 +0000 https://supabase.com/blog/supabase-alpha-may-2020 Supabase Alpha May 2020 https://supabase.com/blog/supabase-alpha-may-2020 Three months of building - Mon, 01 Jun 2020 03:03:00 +0000 + Sun, 31 May 2020 16:04:00 +0000 https://supabase.com/blog/supabase-alpha-april-2020 Supabase Alpha April 2020 https://supabase.com/blog/supabase-alpha-april-2020 Two months of building - Mon, 01 Jun 2020 03:03:00 +0000 + Sun, 31 May 2020 16:04:00 +0000 diff --git a/apps/www/public/sitemap_www.xml b/apps/www/public/sitemap_www.xml index e56ed36d162..ee99ac2420f 100644 --- a/apps/www/public/sitemap_www.xml +++ b/apps/www/public/sitemap_www.xml @@ -42,12 +42,24 @@ 0.5 + + https://supabase.com/oss + weekly + 0.5 + + https://supabase.com/support weekly 0.5 + + https://supabase.com/auth + weekly + 0.5 + + https://supabase.com/blog/ weekly @@ -55,7 +67,13 @@ - https://supabase.com/auth + https://supabase.com/database + weekly + 0.5 + + + + https://supabase.com/edge-functions weekly 0.5 @@ -72,24 +90,12 @@ 0.5 - - https://supabase.com/database - weekly - 0.5 - - https://supabase.com/launch-week/ticket-image weekly 0.5 - - https://supabase.com/edge-functions - weekly - 0.5 - - https://supabase.com/legal/dpa weekly @@ -920,6 +926,48 @@ 0.5 + + https://supabase.com/blog/transparent-column-encryption-with-postgres + weekly + 0.5 + + + + https://supabase.com/blog/the-supabase-content-storm + weekly + 0.5 + + + + https://supabase.com/blog/supabase-beta-november-2022 + weekly + 0.5 + + + + https://supabase.com/blog/launch-week-6-hackathon + weekly + 0.5 + + + + https://supabase.com/blog/who-we-hire + weekly + 0.5 + + + + https://supabase.com/blog/postgres-crdt + weekly + 0.5 + + + + https://supabase.com/blog/new-supabase-docs-built-with-nextjs + weekly + 0.5 + + https://supabase.com/alternatives/supabase-vs-firebase weekly diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 7d041164e75..949b5971275 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -130,7 +130,7 @@ services: storage: container_name: supabase-storage - image: supabase/storage-api:v0.21.4 + image: supabase/storage-api:v0.26.1 depends_on: db: # Disable this if you are using an external Postgres database condition: service_healthy @@ -150,6 +150,18 @@ services: # TODO: https://github.com/supabase/storage-api/issues/55 REGION: stub GLOBAL_S3_BUCKET: stub + ENABLE_IMAGE_TRANSFORMATION: "true" + IMGPROXY_URL: http://imgproxy:5001 + volumes: + - ./volumes/storage:/var/lib/storage + + imgproxy: + container_name: supabase-imgproxy + image: darthsim/imgproxy:v3.11 + environment: + IMGPROXY_BIND: ":5001" + IMGPROXY_LOCAL_FILESYSTEM_ROOT: / + IMGPROXY_USE_ETAG: "true" volumes: - ./volumes/storage:/var/lib/storage diff --git a/package-lock.json b/package-lock.json index 66be52941a9..77745d0f540 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,11 +11,13 @@ "workspaces": [ "apps/www", "apps/docs", + "apps/new-docs", "studio", "tests", "packages/*" ], "dependencies": { + "@code-hike/mdx": "^0.7.4", "@mdx-js/react": "^2.1.1", "mdx-mermaid": "^1.3.2", "mermaid": "^9.2.2", @@ -28,7 +30,7 @@ "json-stringify-safe": "^5.0.1", "prettier": "^2.5.1", "ts-jest": "^27.0.7", - "turbo": "1.4.7" + "turbo": "^1.4.7" }, "engines": { "node": ">=14.0.0", @@ -41,11 +43,13 @@ "@algolia/autocomplete-js": "^1.7.2", "@algolia/autocomplete-plugin-recent-searches": "^1.7.2", "@apollo/client": "^3.6.6", + "@code-hike/mdx": "^0.7.4", "@docsearch/react": "^3.3.0", "@mdx-js/loader": "^1.6.22", "@mdx-js/react": "^1.6.22", "@next/mdx": "^12.0.4", "@radix-ui/react-accordion": "^1.0.1", + "@radix-ui/react-collapsible": "^1.0.1", "@tailwindcss/typography": "^0.4.1", "algoliasearch": "^4.14.2", "babel": "^6.23.0", @@ -54,13 +58,16 @@ "dotenv": "^16.0.3", "graphql": "^16.5.0", "gray-matter": "^4.0.3", + "isbot": "^3.6.5", "jsrsasign": "^10.5.26", "lodash": "^4.17.21", "markdown-toc": "^1.2.0", "mdx-mermaid": "2.0.0-rc3", - "next": "12.1.0", + "next": "12.3.2", "next-compose-plugins": "^2.2.1", - "next-mdx-remote": "^3.0.8", + "next-mdx-remote": "^4.1.0", + "next-mdx-toc": "^0.1.3", + "next-plugin-yaml": "^1.0.1", "next-seo": "^5.14.1", "next-themes": "0.0.15", "next-transpile-modules": "^9.0.0", @@ -73,10 +80,15 @@ "react-syntax-highlighter": "^15.3.1", "remark": "^14.0.2", "remark-admonitions": "^1.2.1", + "remark-autolink-headings": "^7.0.1", + "remark-gfm": "^3.0.1", "remark-html": "^15.0.0", "remark-mdx": "^2.0.0-rc.2", "remark-prism": "^1.3.6", - "ui": "*" + "remark-slug": "^7.0.1", + "shiki": "^0.11.1", + "ui": "*", + "valtio": "^1.7.6" }, "devDependencies": { "@types/node": "^17.0.12", @@ -96,6 +108,128 @@ "typescript": "^4.5.3" } }, + "apps/docs/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "apps/docs/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "apps/docs/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "apps/docs/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "apps/docs/node_modules/@mdx-js/loader": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz", + "integrity": "sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==", + "dependencies": { + "@mdx-js/mdx": "1.6.22", + "@mdx-js/react": "1.6.22", + "loader-utils": "2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/@mdx-js/mdx/node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "apps/docs/node_modules/@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", @@ -108,6 +242,221 @@ "react": "^16.13.1 || ^17.0.0" } }, + "apps/docs/node_modules/@next/env": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.2.tgz", + "integrity": "sha512-upwtMaHxlv/udAWGq0kE+rg8huwmcxQPsKZFhS1R5iVO323mvxEBe1YrSXe1awLbg9sTIuEHbgxjLLt7JbeuAQ==" + }, + "apps/docs/node_modules/@next/swc-android-arm64": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.2.tgz", + "integrity": "sha512-B+TINJhCf+CrY1+b3/JWQlkecv53rAGa/gA7gi5B1cnBa/2Uvoe+Ue0JeCefTjfiyl1ScsyNx+NcESY8Ye2Ngg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@next/swc-darwin-arm64": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.2.tgz", + "integrity": "sha512-PTUfe1ZrwjsiuTmr3bOM9lsoy5DCmfYsLOUF9ZVhtbi5MNJVmUTy4VZ06GfrvnCO5hGCr48z3vpFE9QZ0qLcPw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@next/swc-darwin-x64": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.2.tgz", + "integrity": "sha512-1HkjmS9awwlaeEY8Y01nRSNkSv3y+qnC/mjMPe/W66hEh3QKa/LQHqHeS7NOdEs19B2mhZ7w+EgMRXdLQ0Su8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.2.tgz", + "integrity": "sha512-EuRZAamoxfe/WoWRaC0zsCAoE4gs/mEhilcloNM4J5Mnb3PLY8PZV394W7t5tjBjItMCF7l2Ebwjwtm46tq2RA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.2.tgz", + "integrity": "sha512-T9GCFyOIb4S3acA9LqflUYD+QZ94iZketHCqKdoO0Nx0OCHIgGJV5rotDe8TDXwh/goYpIfyHU4j1qqw4w4VnA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@next/swc-linux-arm64-musl": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.2.tgz", + "integrity": "sha512-hxNVZS6L3c2z3l9EH2GP0MGQ9exu6O8cohYNZyqC9WUl6C03sEn8xzDH1y+NgD3fVurvYkGU5F0PDddJJLfDIw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@next/swc-linux-x64-gnu": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.2.tgz", + "integrity": "sha512-fCPkLuwDwY8/QeXxciJJjDHG09liZym/Bhb4A+RLFQ877wUkwFsNWDUTSdUx0YXlYK/1gf67BKauqKkOKp6CYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@next/swc-linux-x64-musl": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.2.tgz", + "integrity": "sha512-o+GifBIQ2K+/MEFxHsxUZoU3bsuVFLXZYWd3idimFHiVdDCVYiKsY6mYMmKDlucX+9xRyOCkKL9Tjf+3tuXJpw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.2.tgz", + "integrity": "sha512-crii66irzGGMSUR0L8r9+A06eTv7FTXqw4rgzJ33M79EwQJOdpY7RVKXLQMurUhniEeQEEOfamiEdPIi/qxisw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.2.tgz", + "integrity": "sha512-5hRUSvn3MdQ4nVRu1rmKxq5YJzpTtZfaC/NyGw6wa4NSF1noUn/pdQGUr+I5Qz3CZkd1gZzzC0eaXQHlrk0E2g==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@next/swc-win32-x64-msvc": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.2.tgz", + "integrity": "sha512-tpQJYUH+TzPMIsdVl9fH8uDg47iwiNjKY+8e9da3dXqlkztKzjSw0OwSADoqh3KrifplXeKSta+BBGLdBqg3sg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/docs/node_modules/@radix-ui/react-collapsible": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.1.tgz", + "integrity": "sha512-0maX4q91iYa4gjt3PsNf7dq/yqSR+HGAE8I5p54dQ6gnveS+ETWlMoijxrhmgV1k8svxpm34mQAtqIrJt4XZmA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "apps/docs/node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "apps/docs/node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, "apps/docs/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -176,6 +525,68 @@ "url": "https://opencollective.com/eslint" } }, + "apps/docs/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "apps/docs/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "apps/docs/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "apps/docs/node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "apps/docs/node_modules/mdx-mermaid": { "version": "2.0.0-rc3", "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-2.0.0-rc3.tgz", @@ -193,30 +604,308 @@ "unist-util-visit": "^4.1.0" } }, - "apps/docs/node_modules/unist-util-visit": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", - "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", - "peer": true, + "apps/docs/node_modules/next": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/next/-/next-12.3.2.tgz", + "integrity": "sha512-orzvvebCwOqaz1eA5ZA0R5dbKxqtJyw7yeig7kDspu6p8OrplfyelzpvMHcDTKscv/l0nn/0l0v3mSsE8w4k7A==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@next/env": "12.3.2", + "@swc/helpers": "0.4.11", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.0.7", + "use-sync-external-store": "1.2.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=12.22.0" + }, + "optionalDependencies": { + "@next/swc-android-arm-eabi": "12.3.2", + "@next/swc-android-arm64": "12.3.2", + "@next/swc-darwin-arm64": "12.3.2", + "@next/swc-darwin-x64": "12.3.2", + "@next/swc-freebsd-x64": "12.3.2", + "@next/swc-linux-arm-gnueabihf": "12.3.2", + "@next/swc-linux-arm64-gnu": "12.3.2", + "@next/swc-linux-arm64-musl": "12.3.2", + "@next/swc-linux-x64-gnu": "12.3.2", + "@next/swc-linux-x64-musl": "12.3.2", + "@next/swc-win32-arm64-msvc": "12.3.2", + "@next/swc-win32-ia32-msvc": "12.3.2", + "@next/swc-win32-x64-msvc": "12.3.2" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^17.0.2 || ^18.0.0-0", + "react-dom": "^17.0.2 || ^18.0.0-0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "apps/docs/node_modules/next/node_modules/styled-jsx": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", + "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "apps/docs/node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "apps/docs/node_modules/proxy-compare": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-2.3.0.tgz", + "integrity": "sha512-c3L2CcAi7f7pvlD0D7xsF+2CQIW8C3HaYx2Pfgq8eA4HAl3GAH6/dVYsyBbYF/0XJs2ziGLrzmz5fmzPm6A0pQ==" + }, + "apps/docs/node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, + "apps/docs/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "apps/docs/node_modules/shiki": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz", + "integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==", + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "^6.0.0" + } + }, + "apps/docs/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "apps/docs/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/valtio": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/valtio/-/valtio-1.7.6.tgz", + "integrity": "sha512-zsGrCCYOIpy8egQxftduFyJusF/BMu3CganhHKUOE/I6t6V6yA1MDfZZkrYoWYCGkC3rSBYcIHEEsoYQM9lV2w==", + "dependencies": { + "proxy-compare": "2.3.0", + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@babel/helper-module-imports": ">=7.12", + "@babel/types": ">=7.13", + "aslemammad-vite-plugin-macro": ">=1.0.0-alpha.1", + "babel-plugin-macros": ">=3.0", + "react": ">=16.8", + "vite": ">=2.8.6" + }, + "peerDependenciesMeta": { + "@babel/helper-module-imports": { + "optional": true + }, + "@babel/types": { + "optional": true + }, + "aslemammad-vite-plugin-macro": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + }, + "react": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "apps/docs/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/vscode-textmate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz", + "integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==" + }, "apps/www": { "version": "0.0.3", "license": "MIT", "dependencies": { "@heroicons/react": "^1.0.6", - "@mdx-js/loader": "^1.6.22", - "@mdx-js/react": "^1.6.22", + "@mdx-js/loader": "^2.1.5", + "@mdx-js/react": "^2.1.5", "@next/bundle-analyzer": "^13.0.0", - "@next/mdx": "^10.0.7", + "@next/mdx": "^12.3.2", "@supabase/auth-ui-react": "^0.1.6", "@supabase/supabase-js": "^2.0.0", "classnames": "^2.3.1", @@ -235,6 +924,7 @@ "next-seo": "^4.20.0", "next-transpile-modules": "^9.0.0", "nodemailer": "^6.7.3", + "octokit": "^2.0.10", "parse-numeric-range": "^1.3.0", "react": "^17.0.2", "react-copy-to-clipboard": "^5.0.2", @@ -296,27 +986,6 @@ "node": ">= 8.3" } }, - "apps/www/node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "apps/www/node_modules/@next/mdx": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-10.2.3.tgz", - "integrity": "sha512-hseekptFqOCxLbdaNDS/yelaG2Q2uaNDilnRjq8Uv/LWHuZ9F2cp7ndwTolW9acJsbDedamKRMgdw4V2Fz0pUA==", - "peerDependencies": { - "@mdx-js/loader": ">=0.15.0", - "@mdx-js/react": "*" - } - }, "apps/www/node_modules/@tailwindcss/typography": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.8.tgz", @@ -362,6 +1031,7 @@ "version": "17.0.11", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz", "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==", + "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -381,41 +1051,6 @@ "node": ">=8" } }, - "apps/www/node_modules/next-mdx-remote": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-4.2.0.tgz", - "integrity": "sha512-X5RhD7f7b78pH2abbuusObSGgII5l54OdusS/2iXljN7WN1cel6ToLlZeCZcyxx9cR4wmBGQYGongIttDYNmAA==", - "dependencies": { - "@mdx-js/mdx": "^2.0.0", - "@mdx-js/react": "^2.0.0", - "vfile": "^5.3.0", - "vfile-matter": "^3.0.1" - }, - "engines": { - "node": ">=14", - "npm": ">=7" - }, - "peerDependencies": { - "react": ">=16.x <=18.x", - "react-dom": ">=16.x <=18.x" - } - }, - "apps/www/node_modules/next-mdx-remote/node_modules/@mdx-js/react": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.1.5.tgz", - "integrity": "sha512-3Az1I6SAWA9R38rYjz5rXBrGKeZhq96CSSyQtqY+maPj8stBsoUH5pNcmIixuGkufYsh8F5+ka2CVPo2fycWZw==", - "dependencies": { - "@types/mdx": "^2.0.0", - "@types/react": ">=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": ">=16" - } - }, "apps/www/node_modules/next-seo": { "version": "4.29.0", "resolved": "https://registry.npmjs.org/next-seo/-/next-seo-4.29.0.tgz", @@ -755,7 +1390,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -767,7 +1401,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, "dependencies": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -797,7 +1430,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -818,7 +1450,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.1.0" @@ -834,7 +1465,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -859,7 +1489,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -894,7 +1523,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, "dependencies": { "@babel/types": "^7.18.9" }, @@ -935,7 +1563,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -955,7 +1582,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -973,7 +1599,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.18.9", @@ -1000,7 +1625,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dev": true, "dependencies": { "@babel/types": "^7.20.0" }, @@ -1047,7 +1671,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "dev": true, "dependencies": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", @@ -1163,7 +1786,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1178,7 +1800,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -1195,7 +1816,6 @@ "version": "7.20.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.19.0", @@ -1213,7 +1833,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1229,7 +1848,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -1265,7 +1883,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -1297,7 +1914,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -1313,7 +1929,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1329,7 +1944,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1345,7 +1959,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1361,7 +1974,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1377,7 +1989,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.20.1", "@babel/helper-compilation-targets": "^7.20.0", @@ -1396,7 +2007,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -1412,7 +2022,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -1429,7 +2038,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1445,7 +2053,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -1463,7 +2070,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1479,7 +2085,6 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1503,7 +2108,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1515,7 +2119,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1545,7 +2148,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1572,7 +2174,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1599,7 +2200,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -1626,7 +2226,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1638,7 +2237,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1653,7 +2251,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1665,7 +2262,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1677,7 +2273,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1700,7 +2295,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1712,7 +2306,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1724,7 +2317,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1739,7 +2331,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1754,7 +2345,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -1769,7 +2359,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1784,7 +2373,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -1801,7 +2389,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1816,7 +2403,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1831,7 +2417,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.20.0", @@ -1854,7 +2439,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } @@ -1863,7 +2447,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1878,7 +2461,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1893,7 +2475,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1909,7 +2490,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1924,7 +2504,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1956,7 +2535,6 @@ "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1971,7 +2549,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", @@ -1988,7 +2565,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -2003,7 +2579,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -2018,7 +2593,6 @@ "version": "7.19.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.19.6", "@babel/helper-plugin-utils": "^7.19.0" @@ -2034,7 +2608,6 @@ "version": "7.19.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.19.6", "@babel/helper-plugin-utils": "^7.19.0", @@ -2051,7 +2624,6 @@ "version": "7.19.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.19.6", @@ -2069,7 +2641,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -2085,7 +2656,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.19.0", "@babel/helper-plugin-utils": "^7.19.0" @@ -2101,7 +2671,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -2116,7 +2685,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" @@ -2146,7 +2714,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -2161,7 +2728,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -2176,7 +2742,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", @@ -2195,7 +2760,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, "dependencies": { "@babel/plugin-transform-react-jsx": "^7.18.6" }, @@ -2210,7 +2774,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -2226,7 +2789,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" @@ -2242,7 +2804,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -2257,7 +2818,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -2272,7 +2832,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.19.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" @@ -2288,7 +2847,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -2303,7 +2861,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -2318,7 +2875,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -2333,7 +2889,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.20.2", "@babel/helper-plugin-utils": "^7.20.2", @@ -2350,7 +2905,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -2365,7 +2919,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -2381,7 +2934,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.20.1", "@babel/helper-compilation-targets": "^7.20.0", @@ -2487,7 +3039,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -2503,7 +3054,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", @@ -2523,7 +3073,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", @@ -2665,6 +3214,28 @@ "node": ">=0.1.95" } }, + "node_modules/@code-hike/mdx": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@code-hike/mdx/-/mdx-0.7.4.tgz", + "integrity": "sha512-MHnoSJ7wxJ2LJfJ/x+18jh6JOBCPwk1EMQRgVINj3yyejqsYgOQx2ChE+/n+n3AdP7J5RLKfQ6qm/jiNxD8+Lg==", + "dependencies": { + "hast-util-to-estree": "^1.4.0", + "is-plain-obj": "^3.0.0", + "node-fetch": "^2.0.0", + "remark-rehype": "^8.1.0", + "shiki": "^0.10.1", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/code-hike" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17 || ^18" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -2990,6 +3561,29 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -3316,6 +3910,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/core/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@jest/environment": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", @@ -3614,6 +4217,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@jest/source-map": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", @@ -3628,6 +4240,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@jest/test-result": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", @@ -3799,6 +4420,15 @@ "node": ">= 10.14.2" } }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@jest/types": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", @@ -3882,326 +4512,19 @@ } }, "node_modules/@mdx-js/loader": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz", - "integrity": "sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-2.1.5.tgz", + "integrity": "sha512-oXjfTa/iAcMmW8DdQ+hQFodPCLqw5VKT2yoZkLwrZfPVVpUgKrI+5/ZePYq328xxtAUStZmR3ed0PWJrwd5Pkg==", "dependencies": { - "@mdx-js/mdx": "1.6.22", - "@mdx-js/react": "1.6.22", - "loader-utils": "2.0.0" + "@mdx-js/mdx": "^2.0.0", + "source-map": "^0.7.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/loader/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/@mdx-js/loader/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mdx-js/loader/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mdx-js/loader/node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@mdx-js/loader/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/@mdx-js/loader/node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/loader/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mdx-js/loader/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "webpack": ">=4" } }, "node_modules/@mdx-js/mdx": { @@ -4232,6 +4555,11 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/@mdx-js/mdx/node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, "node_modules/@mdx-js/mdx/node_modules/bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -4241,6 +4569,62 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/@mdx-js/mdx/node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@mdx-js/mdx/node_modules/estree-util-attach-comments": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.0.tgz", + "integrity": "sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/hast-util-to-estree": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.1.0.tgz", + "integrity": "sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "estree-util-attach-comments": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.3.0", + "unist-util-position": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mdx-js/mdx/node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -4274,6 +4658,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@mdx-js/mdx/node_modules/property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/@mdx-js/mdx/node_modules/remark-parse": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", @@ -4288,6 +4681,30 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/@mdx-js/mdx/node_modules/remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/@mdx-js/mdx/node_modules/trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -4315,6 +4732,27 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-position": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -4329,6 +4767,28 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/@mdx-js/react": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.1.5.tgz", @@ -4414,9 +4874,9 @@ "dev": true }, "node_modules/@next/bundle-analyzer": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-13.0.4.tgz", - "integrity": "sha512-GFbr0HX75Fv/S+R7NOXOUX7YBtg+snE3a/4ikEfouXVHzPakluIQL8ojYJTcR5Q6mBospGaldT19AdfuqRmPqQ==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-13.0.5.tgz", + "integrity": "sha512-45q05yO6ZqS5NHHaxnU/PsVdMw5XfT6d7CptFaIr/9O2nECDjhM56G5JQx+346fkI76l1embxkLBzoQByTYGKQ==", "dependencies": { "webpack-bundle-analyzer": "4.7.0" } @@ -4462,6 +4922,21 @@ "@mdx-js/react": "*" } }, + "node_modules/@next/swc-android-arm-eabi": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.2.tgz", + "integrity": "sha512-r2rrz+DZ8YYGqzVrbRrpP6GKzwozpOrnFbErc4k36vUTSFMag9yQahZfaBe06JYdqu/e5yhm/saIDEaSVPRP4g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@next/swc-android-arm64": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.0.tgz", @@ -4507,6 +4982,21 @@ "node": ">= 10" } }, + "node_modules/@next/swc-freebsd-x64": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.2.tgz", + "integrity": "sha512-h5Mx0BKDCJ5Vu/U8e07esF6PjPv1EJgmRbYWTUZMAflu13MQpCJkKEJir7+BeRfTXRfgFf+llc7uocrpd7mcrg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@next/swc-linux-arm-gnueabihf": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.0.tgz", @@ -5096,29 +5586,6 @@ } } }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", @@ -7181,6 +7648,31 @@ "react": "^16.13.1 || ^17.0.0" } }, + "node_modules/@storybook/addon-docs/node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@storybook/addon-docs/node_modules/remark-slug": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", + "dev": true, + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@storybook/addon-essentials": { "version": "6.5.13", "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.13.tgz", @@ -7846,6 +8338,15 @@ "semver": "bin/semver" } }, + "node_modules/@storybook/builder-webpack4/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -8574,6 +9075,15 @@ "node": ">=4" } }, + "node_modules/@storybook/mdx1-csf/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@storybook/mdx1-csf/node_modules/mdast-util-to-hast": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", @@ -8710,16 +9220,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/@storybook/mdx1-csf/node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/@storybook/mdx1-csf/node_modules/unist-util-remove-position": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", @@ -9500,10 +10000,18 @@ "react-dom": "^16.13.1 || ^17.0.1" } }, + "node_modules/@swc/helpers": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", + "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@tailwindcss/forms": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz", - "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.1.tgz", + "integrity": "sha512-gS9xjCmJjUBz/eP12QlENPLnf0tCx68oYE3mri0GMP5jdtVwLbGUNSRpjsp6NzLAZzZy3ueOwrcqB78Ax6Z84A==", "dependencies": { "mini-svg-data-uri": "^1.2.3" }, @@ -10080,7 +10588,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "devOptional": true }, "node_modules/@types/parse-numeric-range": { "version": "0.0.1", @@ -10305,6 +10813,15 @@ "source-map": "^0.6.1" } }, + "node_modules/@types/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@types/unist": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", @@ -10347,13 +10864,13 @@ "source-map": "^0.7.3" } }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "node_modules/@types/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, "node_modules/@types/yargs": { @@ -10371,16 +10888,6 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/zxcvbn": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.1.tgz", @@ -10666,7 +11173,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "devOptional": true, "dependencies": { "@webassemblyjs/helper-module-context": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -10676,26 +11182,22 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "devOptional": true + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "devOptional": true + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "devOptional": true + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "node_modules/@webassemblyjs/helper-code-frame": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "devOptional": true, "dependencies": { "@webassemblyjs/wast-printer": "1.9.0" } @@ -10703,14 +11205,12 @@ "node_modules/@webassemblyjs/helper-fsm": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "devOptional": true + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "node_modules/@webassemblyjs/helper-module-context": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "devOptional": true, "dependencies": { "@webassemblyjs/ast": "1.9.0" } @@ -10718,14 +11218,12 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "devOptional": true + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "devOptional": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -10737,7 +11235,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "devOptional": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -10746,7 +11243,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "devOptional": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -10754,14 +11250,12 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "devOptional": true + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "devOptional": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -10777,7 +11271,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "devOptional": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -10790,7 +11283,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "devOptional": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -10802,7 +11294,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "devOptional": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-api-error": "1.9.0", @@ -10816,7 +11307,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "devOptional": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/floating-point-hex-parser": "1.9.0", @@ -10830,7 +11320,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "devOptional": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/wast-parser": "1.9.0", @@ -10873,14 +11362,12 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "devOptional": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "devOptional": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/abab": { "version": "2.0.6", @@ -11022,7 +11509,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "devOptional": true, "peerDependencies": { "ajv": ">=5.0.0" } @@ -11031,7 +11517,6 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "devOptional": true, "peerDependencies": { "ajv": "^6.9.1" } @@ -11308,7 +11793,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -11317,7 +11801,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -11326,7 +11809,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -11389,7 +11871,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -11491,7 +11972,6 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "devOptional": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -11502,14 +11982,12 @@ "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "devOptional": true, "dependencies": { "object-assign": "^4.1.1", "util": "0.10.3" @@ -11518,14 +11996,12 @@ "node_modules/assert/node_modules/inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "devOptional": true + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" }, "node_modules/assert/node_modules/util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "devOptional": true, "dependencies": { "inherits": "2.0.1" } @@ -11534,7 +12010,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -11582,7 +12057,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, "optional": true }, "node_modules/asynckit": { @@ -11603,7 +12077,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "devOptional": true, "bin": { "atob": "bin/atob.js" }, @@ -11878,6 +12351,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/babel-jest/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -12106,7 +12588,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, + "devOptional": true, "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -12121,7 +12603,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", @@ -12135,7 +12616,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" @@ -12148,7 +12628,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3" }, @@ -12224,7 +12703,6 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "devOptional": true, "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -12242,7 +12720,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "devOptional": true, "dependencies": { "is-descriptor": "^1.0.0" }, @@ -12332,72 +12809,20 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, "optional": true, "dependencies": { "file-uri-to-path": "1.0.0" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "devOptional": true + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "devOptional": true + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/body-parser": { "version": "1.20.1", @@ -12525,8 +12950,7 @@ "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "devOptional": true + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browser-process-hrtime": { "version": "1.0.0", @@ -12537,7 +12961,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "devOptional": true, "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -12551,7 +12974,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "devOptional": true, "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -12562,7 +12984,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "devOptional": true, "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -12574,7 +12995,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "devOptional": true, "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -12584,7 +13004,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "devOptional": true, "dependencies": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", @@ -12601,7 +13020,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12615,7 +13033,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "devOptional": true, "funding": [ { "type": "github", @@ -12635,7 +13052,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "devOptional": true, "dependencies": { "pako": "~1.0.5" } @@ -12697,22 +13113,12 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "devOptional": true, "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -12734,14 +13140,12 @@ "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "devOptional": true + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "node_modules/buffer/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "devOptional": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/bufferutil": { "version": "4.0.7", @@ -12758,8 +13162,7 @@ "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "devOptional": true + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" }, "node_modules/bytes": { "version": "3.0.0", @@ -12870,7 +13273,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "devOptional": true, "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -13033,9 +13435,9 @@ } }, "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -13126,7 +13528,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "devOptional": true, "engines": { "node": ">=6.0" } @@ -13144,7 +13545,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "devOptional": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -13160,7 +13560,6 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "devOptional": true, "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -13175,7 +13574,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "devOptional": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -13187,7 +13585,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -13199,7 +13596,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -13211,7 +13607,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -13223,7 +13618,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -13235,7 +13629,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "devOptional": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -13249,7 +13642,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -13271,6 +13663,15 @@ "node": ">= 4.0" } }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -13332,6 +13733,14 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -13413,7 +13822,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "devOptional": true, "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -13459,9 +13867,9 @@ } }, "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -13488,14 +13896,12 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "devOptional": true + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "devOptional": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "node_modules/component-type": { "version": "1.2.1", @@ -13574,6 +13980,14 @@ "source-map": "^0.6.1" } }, + "node_modules/concat-with-sourcemaps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/config": { "resolved": "packages/config", "link": true @@ -13595,8 +14009,7 @@ "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "devOptional": true + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" }, "node_modules/console-control-strings": { "version": "1.1.0", @@ -13606,8 +14019,7 @@ "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "devOptional": true + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -13687,7 +14099,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "devOptional": true, "dependencies": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -13701,7 +14112,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, "dependencies": { "glob": "^7.1.3" }, @@ -13713,7 +14123,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -13741,7 +14150,6 @@ "version": "3.26.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "dev": true, "dependencies": { "browserslist": "^4.21.4" }, @@ -13769,7 +14177,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, + "devOptional": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -14100,7 +14508,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "devOptional": true, "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -14109,14 +14516,12 @@ "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "devOptional": true, "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -14129,7 +14534,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "devOptional": true, "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -14178,7 +14582,6 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "devOptional": true, "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -14239,6 +14642,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/css-blank-pseudo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/css-box-model": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", @@ -14312,6 +14724,15 @@ "node": ">=4" } }, + "node_modules/css-has-pseudo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/css-loader": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", @@ -14426,6 +14847,15 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/css-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/css-prefers-color-scheme": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", @@ -14464,6 +14894,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/css-prefers-color-scheme/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/css-select": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", @@ -14567,8 +15006,7 @@ "node_modules/cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", - "devOptional": true + "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" }, "node_modules/d": { "version": "1.0.1", @@ -15354,11 +15792,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/decode-named-character-reference/node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "devOptional": true, "engines": { "node": ">=0.10" } @@ -15454,7 +15900,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "devOptional": true, "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -15523,7 +15968,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "devOptional": true, "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -15607,12 +16051,6 @@ "node": ">=0.8.0" } }, - "node_modules/devtools-protocol": { - "version": "0.0.1019158", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz", - "integrity": "sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==", - "peer": true - }, "node_modules/diacritics-map": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/diacritics-map/-/diacritics-map-0.1.0.tgz", @@ -15648,7 +16086,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "devOptional": true, "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -15658,8 +16095,7 @@ "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/dir-glob": { "version": "3.0.1", @@ -15758,7 +16194,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "devOptional": true, "engines": { "node": ">=0.4", "npm": ">=1.2" @@ -15862,7 +16297,6 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "devOptional": true, "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -15908,7 +16342,6 @@ "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "devOptional": true, "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -15922,8 +16355,7 @@ "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/emittery": { "version": "0.8.1", @@ -16022,7 +16454,6 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "devOptional": true, "dependencies": { "prr": "~1.0.1" }, @@ -16034,7 +16465,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, + "devOptional": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -16182,15 +16613,6 @@ "ext": "^1.1.2" } }, - "node_modules/esbuild": { - "version": "0.12.29", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", - "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -16272,6 +16694,15 @@ "node": ">= 0.8.0" } }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/escodegen/node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -16967,21 +17398,13 @@ } }, "node_modules/estree-util-attach-comments": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.0.tgz", - "integrity": "sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-attach-comments/node_modules/@types/estree": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-1.0.0.tgz", + "integrity": "sha512-sL7dTwFGqzelPlB56lRZY1CC/yDxCe365WQpxNd49ispL40Yv8Tv4SmteGbvZeFwShOOVKfMlo4jrVvwoaMosA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/estree-util-build-jsx": { "version": "2.2.0", @@ -17020,14 +17443,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/estree-util-to-js/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, "node_modules/estree-util-visit": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.0.tgz", @@ -17072,7 +17487,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "devOptional": true, "engines": { "node": ">=0.8.x" } @@ -17081,7 +17495,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "devOptional": true, "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -17134,7 +17547,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "devOptional": true, "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -17152,7 +17564,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, "dependencies": { "ms": "2.0.0" } @@ -17161,7 +17572,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "devOptional": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -17173,7 +17583,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -17185,7 +17594,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -17197,7 +17605,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -17209,7 +17616,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -17221,7 +17627,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "devOptional": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -17235,7 +17640,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -17243,8 +17647,7 @@ "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/expand-range": { "version": "1.8.2", @@ -17453,7 +17856,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "devOptional": true, "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -17472,7 +17874,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "devOptional": true, "dependencies": { "is-descriptor": "^1.0.0" }, @@ -17480,41 +17881,6 @@ "node": ">=0.10.0" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "peer": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fast-clone": { "version": "1.5.13", "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz", @@ -17601,15 +17967,6 @@ "bser": "2.1.1" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "peer": true, - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/fetch-retry": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.3.tgz", @@ -17619,8 +17976,7 @@ "node_modules/figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "devOptional": true + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "node_modules/file-entry-cache": { "version": "6.0.1", @@ -17686,7 +18042,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, "optional": true }, "node_modules/filelist": { @@ -17767,7 +18122,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "devOptional": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -17781,7 +18135,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "devOptional": true, "dependencies": { "locate-path": "^3.0.0" }, @@ -17793,7 +18146,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "devOptional": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -17806,7 +18158,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "devOptional": true, "dependencies": { "p-try": "^2.0.0" }, @@ -17821,7 +18172,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "devOptional": true, "dependencies": { "p-limit": "^2.0.0" }, @@ -17833,7 +18183,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "devOptional": true, "engines": { "node": ">=4" } @@ -17842,7 +18191,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "devOptional": true, "dependencies": { "find-up": "^3.0.0" }, @@ -17854,6 +18202,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -17893,7 +18242,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "devOptional": true, "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" @@ -18152,7 +18500,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "devOptional": true, "dependencies": { "map-cache": "^0.2.2" }, @@ -18173,7 +18520,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "devOptional": true, "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -18198,12 +18544,6 @@ } ] }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "peer": true - }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -18241,7 +18581,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "devOptional": true, "dependencies": { "graceful-fs": "^4.1.2", "iferr": "^0.1.5", @@ -18453,15 +18792,14 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "devOptional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "node_modules/glob": { "version": "7.2.3", @@ -18616,6 +18954,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/graphlib": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", @@ -18726,6 +19070,15 @@ "uglify-js": "^3.1.4" } }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -18822,7 +19175,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "devOptional": true, "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -18836,7 +19188,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "devOptional": true, "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -18849,7 +19200,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -18861,7 +19211,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -18873,7 +19222,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -18885,7 +19233,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "devOptional": true, "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -18899,7 +19246,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -18913,7 +19259,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "devOptional": true, "funding": [ { "type": "github", @@ -18933,12 +19278,34 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "devOptional": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "engines": { + "node": ">=8" + } + }, "node_modules/hast-to-hyperscript": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", @@ -18957,45 +19324,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-to-hyperscript/node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-to-hyperscript/node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-to-hyperscript/node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-to-hyperscript/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-from-parse5": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", @@ -19012,15 +19340,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-from-parse5/node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/hast-util-from-parse5/node_modules/hastscript": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", @@ -19036,27 +19355,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-from-parse5/node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-from-parse5/node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/hast-util-has-property": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.0.tgz", @@ -19169,27 +19467,6 @@ "node": ">=4" } }, - "node_modules/hast-util-raw/node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-raw/node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-raw/node_modules/unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", @@ -19239,15 +19516,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-raw/node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/hast-util-sanitize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-4.0.0.tgz", @@ -19261,35 +19529,33 @@ } }, "node_modules/hast-util-to-estree": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.1.0.tgz", - "integrity": "sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-1.4.0.tgz", + "integrity": "sha512-CiOAIESUKkSOcYbvTth9+yM28z5ArpsYqxWc7LWJxOx975WRUBDjvVuuzZR2o09BNlkf7bp8G2GlOHepBRKJ8Q==", "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "estree-util-attach-comments": "^2.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdxjs-esm": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "estree-util-attach-comments": "^1.0.0", + "estree-util-is-identifier-name": "^1.1.0", + "hast-util-whitespace": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", "style-to-object": "^0.3.0", - "unist-util-position": "^4.0.0", - "zwitch": "^2.0.0" + "unist-util-position": "^3.1.0", + "zwitch": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-estree/node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "node_modules/hast-util-to-estree/node_modules/estree-util-is-identifier-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-1.1.0.tgz", + "integrity": "sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/hast-util-to-html": { "version": "8.0.3", @@ -19321,6 +19587,51 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/hast-util-to-html/node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-html/node_modules/hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html/node_modules/property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-html/node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-html/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-parse5": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", @@ -19337,27 +19648,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-parse5/node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-parse5/node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/hast-util-to-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-2.0.0.tgz", @@ -19371,9 +19661,9 @@ } }, "node_modules/hast-util-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", - "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", + "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -19395,36 +19685,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hastscript/node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hastscript/node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hastscript/node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -19446,7 +19706,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "devOptional": true, "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -19651,8 +19910,7 @@ "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "devOptional": true + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" }, "node_modules/https-proxy-agent": { "version": "5.0.1", @@ -19721,6 +19979,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/icss-utils/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -19743,8 +20010,7 @@ "node_modules/iferr": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "devOptional": true + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" }, "node_modules/ignore": { "version": "5.2.0", @@ -19900,8 +20166,7 @@ "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "devOptional": true + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "node_modules/inflight": { "version": "1.0.6", @@ -19988,7 +20253,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "devOptional": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -20038,7 +20302,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "devOptional": true }, "node_modules/is-bigint": { "version": "1.0.4", @@ -20126,7 +20390,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "devOptional": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -20161,7 +20424,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "devOptional": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -20334,11 +20596,14 @@ } }, "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-plain-object": { @@ -20415,7 +20680,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { "node": ">=8" }, @@ -20545,7 +20809,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -20577,6 +20840,14 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, + "node_modules/isbot": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-3.6.5.tgz", + "integrity": "sha512-BchONELXt6yMad++BwGpa0oQxo/uD0keL7N15cYVf0A1oMIoNQ79OqeYdPMFWDrNhCqCbRuw9Y9F3QBjvAxZ5g==", + "engines": { + "node": ">=12" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -20668,6 +20939,15 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-reports": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", @@ -21911,6 +22191,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jest-runtime": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", @@ -22060,6 +22349,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-runtime/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jest-serializer": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", @@ -22261,6 +22559,15 @@ "node": ">=10" } }, + "node_modules/jest-snapshot/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jest-util": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", @@ -22432,6 +22739,16 @@ "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==", "dev": true }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-sha1": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", @@ -22463,6 +22780,60 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js-yaml-loader": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/js-yaml-loader/-/js-yaml-loader-1.2.2.tgz", + "integrity": "sha512-H+NeuNrG6uOs/WMjna2SjkaCw13rMWiT/D7l9+9x5n8aq88BDsh2sRmdfxckWPIHtViYHWRG6XiCKYvS1dfyLg==", + "dependencies": { + "js-yaml": "^3.13.1", + "loader-utils": "^1.2.3", + "un-eval": "^1.2.0" + } + }, + "node_modules/js-yaml-loader/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/js-yaml-loader/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/js-yaml-loader/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -22558,14 +22929,13 @@ "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "devOptional": true + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "devOptional": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -22594,6 +22964,11 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -22806,7 +23181,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "devOptional": true }, "node_modules/list-item": { "version": "1.1.1", @@ -22872,15 +23247,15 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "devOptional": true, "engines": { "node": ">=4.3.0 <5.0.0 || >=5.10" } }, "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -22902,6 +23277,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -22935,8 +23311,7 @@ "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.includes": { "version": "4.3.0", @@ -23118,7 +23493,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "devOptional": true, "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -23131,7 +23505,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "devOptional": true, "bin": { "semver": "bin/semver" } @@ -23155,7 +23528,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -23180,7 +23552,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "devOptional": true, "dependencies": { "object-visit": "^1.0.0" }, @@ -23315,7 +23686,6 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "devOptional": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -23371,6 +23741,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-from-markdown": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", @@ -23394,6 +23786,15 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-gfm": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", @@ -23560,6 +23961,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/mdast-util-mdx-jsx/node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", @@ -23687,6 +24097,27 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-to-hast/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast/node_modules/unist-util-position": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -23701,6 +24132,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-to-markdown": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", @@ -23719,6 +24163,24 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -23733,10 +24195,50 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-toc": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-5.1.0.tgz", + "integrity": "sha512-csimbRIVkiqc+PpFeKDGQ/Ck2N4f9FYH3zzBMMJzcxoKL8m+cM0n94xXm0I9eaxHnKdY9n145SGTdyJC7i273g==", + "dependencies": { + "@types/mdast": "^3.0.3", + "@types/unist": "^2.0.3", + "extend": "^3.0.2", + "github-slugger": "^1.2.1", + "mdast-util-to-string": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -23796,7 +24298,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "devOptional": true, "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -24732,7 +25233,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "devOptional": true, "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -24744,8 +25244,7 @@ "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/mime": { "version": "1.6.0", @@ -24816,14 +25315,12 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "devOptional": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "devOptional": true + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "node_modules/minimatch": { "version": "3.1.2", @@ -24909,7 +25406,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "devOptional": true, "dependencies": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -24960,12 +25456,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "peer": true - }, "node_modules/mobx": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.7.0.tgz", @@ -25014,7 +25504,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "devOptional": true, "dependencies": { "aproba": "^1.1.1", "copy-concurrently": "^1.0.0", @@ -25028,7 +25517,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, "dependencies": { "glob": "^7.1.3" }, @@ -25061,7 +25549,6 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, "optional": true }, "node_modules/nanoclone": { @@ -25084,7 +25571,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "devOptional": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -25106,7 +25592,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "devOptional": true, "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -25119,7 +25604,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "devOptional": true, "dependencies": { "is-plain-object": "^2.0.4" }, @@ -25150,8 +25634,7 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "devOptional": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/nested-error-stacks": { "version": "2.1.1", @@ -25213,57 +25696,77 @@ "resolved": "https://registry.npmjs.org/next-compose-plugins/-/next-compose-plugins-2.2.1.tgz", "integrity": "sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg==" }, - "node_modules/next-mdx-remote": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-3.0.8.tgz", - "integrity": "sha512-WFSxt0crxG5PN/0WvaunzxzqV3wh3dPBZyhkclxwyQfLSRKzsNSArzot/4gYTOOZ/GtyRfNjbI/HtDsW2S4fqQ==", + "node_modules/next-mdx": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/next-mdx/-/next-mdx-0.6.2.tgz", + "integrity": "sha512-3eX9PrzEZgLBiG1oA6Ig09Ou55WshF8hFtMZJqDQQkWGrmNfk31Rdu4c1apkkkl+Ir+hCHk7OFLZUO6PBCQTGA==", "dependencies": { - "@mdx-js/mdx": "^1.6.22", "@mdx-js/react": "^1.6.22", - "esbuild": "^0.12.9", - "pkg-dir": "^5.0.0" + "fast-glob": "^3.2.5", + "gray-matter": "^4.0.2", + "hasha": "^5.2.2", + "next-mdx-remote": "^2.1.3", + "node-cache": "^5.1.2" }, "peerDependencies": { - "react": ">=16.x <=17.x", - "react-dom": ">=16.x <=17.x" + "next": ">= 10.0.0", + "react": ">= 16.8.0" } }, - "node_modules/next-mdx-remote/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "node_modules/next-mdx-remote": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-4.2.0.tgz", + "integrity": "sha512-X5RhD7f7b78pH2abbuusObSGgII5l54OdusS/2iXljN7WN1cel6ToLlZeCZcyxx9cR4wmBGQYGongIttDYNmAA==", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "@mdx-js/mdx": "^2.0.0", + "@mdx-js/react": "^2.0.0", + "vfile": "^5.3.0", + "vfile-matter": "^3.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=14", + "npm": ">=7" + }, + "peerDependencies": { + "react": ">=16.x <=18.x", + "react-dom": ">=16.x <=18.x" + } + }, + "node_modules/next-mdx-toc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/next-mdx-toc/-/next-mdx-toc-0.1.3.tgz", + "integrity": "sha512-GJU62GSlHWOdbRUaBAjg6N398nt3+ZLHuV1gXPXup47Z/FBdsKRGSDVg5q23RVzmG0zwF5jLcxuYnuLXtUWPEA==", + "dependencies": { + "mdast-util-toc": "^5.1.0", + "next-mdx": "^0.6.2", + "remark": "^13.0.0", + "unist-util-visit": "^2.0.3" + }, + "peerDependencies": { + "next": ">= 10.0.0", + "react": ">= 16.8.0" + } + }, + "node_modules/next-mdx-toc/node_modules/remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dependencies": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/babel" + "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/@babel/helper-plugin-utils": { + "node_modules/next-mdx/node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, - "node_modules/next-mdx-remote/node_modules/@babel/plugin-proposal-object-rest-spread": { + "node_modules/next-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", @@ -25276,7 +25779,7 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/next-mdx-remote/node_modules/@babel/plugin-syntax-jsx": { + "node_modules/next-mdx/node_modules/@babel/plugin-syntax-jsx": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", @@ -25287,7 +25790,7 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/next-mdx-remote/node_modules/@mdx-js/mdx": { + "node_modules/next-mdx/node_modules/@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", @@ -25317,7 +25820,37 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/@mdx-js/react": { + "node_modules/next-mdx/node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/next-mdx/node_modules/@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", @@ -25329,7 +25862,7 @@ "react": "^16.13.1 || ^17.0.0" } }, - "node_modules/next-mdx-remote/node_modules/is-buffer": { + "node_modules/next-mdx/node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", @@ -25351,7 +25884,15 @@ "node": ">=4" } }, - "node_modules/next-mdx-remote/node_modules/mdast-util-to-hast": { + "node_modules/next-mdx/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/next-mdx/node_modules/mdast-util-to-hast": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", @@ -25370,7 +25911,24 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/remark-mdx": { + "node_modules/next-mdx/node_modules/next-mdx-remote": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-2.1.4.tgz", + "integrity": "sha512-HHJasFVgPGjWXW3tWC37NCvHcQUOjJgVUMdwxgVbshwgtDLrGmupNkist/iamDLlvVibU52B9rqM9VAWofq7cA==", + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@mdx-js/mdx": "^1.6.22", + "@mdx-js/react": "^1.6.22" + }, + "peerDependencies": { + "react": ">=16.x <=17.x", + "react-dom": ">=16.x <=17.x" + } + }, + "node_modules/next-mdx/node_modules/remark-mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", @@ -25389,7 +25947,37 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/remark-parse": { + "node_modules/next-mdx/node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/next-mdx/node_modules/remark-parse": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", @@ -25416,7 +26004,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/semver": { + "node_modules/next-mdx/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", @@ -25424,7 +26012,7 @@ "semver": "bin/semver" } }, - "node_modules/next-mdx-remote/node_modules/source-map": { + "node_modules/next-mdx/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", @@ -25432,7 +26020,7 @@ "node": ">=0.10.0" } }, - "node_modules/next-mdx-remote/node_modules/unified": { + "node_modules/next-mdx/node_modules/unified": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", @@ -25449,7 +26037,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/unist-builder": { + "node_modules/next-mdx/node_modules/unist-builder": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", @@ -25458,7 +26046,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/unist-util-generated": { + "node_modules/next-mdx/node_modules/unist-util-generated": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", @@ -25467,16 +26055,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/next-mdx-remote/node_modules/unist-util-remove-position": { + "node_modules/next-mdx/node_modules/unist-util-remove-position": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", @@ -25488,7 +26067,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/unist-util-stringify-position": { + "node_modules/next-mdx/node_modules/unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", @@ -25500,7 +26079,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/vfile": { + "node_modules/next-mdx/node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", @@ -25515,7 +26094,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/vfile-location": { + "node_modules/next-mdx/node_modules/vfile-location": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", @@ -25524,7 +26103,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/next-mdx-remote/node_modules/vfile-message": { + "node_modules/next-mdx/node_modules/vfile-message": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", @@ -25537,6 +26116,14 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/next-plugin-yaml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/next-plugin-yaml/-/next-plugin-yaml-1.0.1.tgz", + "integrity": "sha512-k13wbpN33wTgrgWUBiXPtObXO94JOEiwvYKJ3X0JrBz2yaW24EfNaVqHwA0dwhsn9PyPIKhPhgsu3bhJsNs+cQ==", + "dependencies": { + "js-yaml-loader": "^1.2.2" + } + }, "node_modules/next-seo": { "version": "5.14.1", "resolved": "https://registry.npmjs.org/next-seo/-/next-seo-5.14.1.tgz", @@ -25604,6 +26191,17 @@ "tslib": "^2.0.3" } }, + "node_modules/node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "dependencies": { + "clone": "2.x" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", @@ -25674,7 +26272,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "devOptional": true, "dependencies": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -25704,8 +26301,7 @@ "node_modules/node-libs-browser/node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "devOptional": true + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "node_modules/node-releases": { "version": "2.0.6", @@ -25991,7 +26587,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "devOptional": true, "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -26005,7 +26600,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "devOptional": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -26017,7 +26611,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -26029,7 +26622,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -26041,7 +26633,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "devOptional": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -26055,7 +26646,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -26064,7 +26654,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -26116,7 +26705,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "devOptional": true, "dependencies": { "isobject": "^3.0.0" }, @@ -26354,8 +26942,7 @@ "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "devOptional": true + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" }, "node_modules/os-homedir": { "version": "1.0.2", @@ -26436,6 +27023,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -26450,6 +27038,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -26502,7 +27091,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "devOptional": true, "engines": { "node": ">=6" } @@ -26515,8 +27103,7 @@ "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "devOptional": true + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/papaparse": { "version": "5.3.2", @@ -26527,7 +27114,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "devOptional": true, "dependencies": { "cyclist": "^1.0.1", "inherits": "^2.0.3", @@ -26559,7 +27145,6 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "devOptional": true, "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -26585,20 +27170,11 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/parse-entities/node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, + "devOptional": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -26653,7 +27229,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -26661,19 +27236,19 @@ "node_modules/path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "devOptional": true + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true + "devOptional": true }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -26716,7 +27291,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "devOptional": true, "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -26728,12 +27302,6 @@ "node": ">=0.12" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "peer": true - }, "node_modules/periscopic": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.0.4.tgz", @@ -26862,7 +27430,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "devOptional": true, "engines": { "node": ">=6" } @@ -26903,6 +27470,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, "dependencies": { "find-up": "^5.0.0" }, @@ -26938,7 +27506,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -26999,6 +27566,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-attribute-case-insensitive/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-color-functional-notation": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", @@ -27035,6 +27611,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-color-functional-notation/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-color-gray": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", @@ -27072,6 +27657,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-color-gray/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-color-hex-alpha": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", @@ -27108,6 +27702,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-color-hex-alpha/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-color-mod-function": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", @@ -27145,6 +27748,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-color-mod-function/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-color-rebeccapurple": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", @@ -27181,6 +27793,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-color-rebeccapurple/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-custom-media": { "version": "7.0.8", "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", @@ -27216,6 +27837,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-custom-media/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-custom-properties": { "version": "8.0.11", "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", @@ -27252,6 +27882,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-custom-properties/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-custom-selectors": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", @@ -27314,6 +27953,15 @@ "node": ">=4" } }, + "node_modules/postcss-custom-selectors/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-dir-pseudo-class": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", @@ -27376,6 +28024,15 @@ "node": ">=4" } }, + "node_modules/postcss-dir-pseudo-class/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-double-position-gradients": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", @@ -27412,6 +28069,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-double-position-gradients/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-env-function": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", @@ -27448,6 +28114,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-env-function/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-flexbugs-fixes": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", @@ -27480,6 +28155,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-flexbugs-fixes/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-focus-visible": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", @@ -27515,6 +28199,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-focus-visible/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-focus-within": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", @@ -27550,6 +28243,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-focus-within/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-font-variant": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", @@ -27582,6 +28284,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-font-variant/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-gap-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", @@ -27617,6 +28328,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-gap-properties/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-image-set-function": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", @@ -27653,6 +28373,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-image-set-function/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-import": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", @@ -27701,6 +28430,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-initial/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-js": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", @@ -27756,6 +28494,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-lab-function/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-load-config": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", @@ -27858,6 +28605,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-logical/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-media-minmax": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", @@ -27893,6 +28649,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-media-minmax/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-modules-extract-imports": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", @@ -27928,6 +28693,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-modules-extract-imports/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-modules-local-by-default": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", @@ -27966,6 +28740,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-modules-local-by-default/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-modules-scope": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", @@ -28002,6 +28785,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-modules-scope/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-modules-values": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", @@ -28035,6 +28827,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-modules-values/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-nested": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", @@ -28088,6 +28889,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-nesting/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-overflow-shorthand": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", @@ -28123,6 +28933,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-overflow-shorthand/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-page-break": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", @@ -28155,6 +28974,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-page-break/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-place": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", @@ -28191,6 +29019,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-place/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-preset-env": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.1.tgz", @@ -28284,6 +29121,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-preset-env/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-pseudo-class-any-link": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", @@ -28346,6 +29192,15 @@ "node": ">=4" } }, + "node_modules/postcss-pseudo-class-any-link/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-replace-overflow-wrap": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", @@ -28378,6 +29233,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-replace-overflow-wrap/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-selector-matches": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", @@ -28411,6 +29275,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-selector-matches/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-selector-not": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", @@ -28444,6 +29317,15 @@ "url": "https://opencollective.com/postcss/" } }, + "node_modules/postcss-selector-not/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss-selector-parser": { "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", @@ -28623,7 +29505,6 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "devOptional": true, "engines": { "node": ">= 0.6.0" } @@ -28644,8 +29525,7 @@ "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "devOptional": true + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" }, "node_modules/promise.allsettled": { "version": "1.0.6", @@ -28722,9 +29602,12 @@ "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==" }, "node_modules/property-information": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", - "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -28756,8 +29639,7 @@ "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "devOptional": true + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" }, "node_modules/psl": { "version": "1.9.0", @@ -28768,7 +29650,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "devOptional": true, "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -28781,8 +29662,7 @@ "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/pump": { "version": "3.0.0", @@ -28797,7 +29677,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "devOptional": true, "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -28808,7 +29687,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "devOptional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -28822,50 +29700,6 @@ "node": ">=6" } }, - "node_modules/puppeteer": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-16.2.0.tgz", - "integrity": "sha512-7Au6iC98rS6WEAD110V4Bxd0iIbqoFtzz9XzkG1BSofidS1VAJ881E1+GFR7Xn2Yea0hbj8n0ErzRyseMp1Ctg==", - "hasInstallScript": true, - "peer": true, - "dependencies": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1019158", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.8.1" - }, - "engines": { - "node": ">=14.1.0" - } - }, - "node_modules/puppeteer/node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -28886,7 +29720,6 @@ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "devOptional": true, "engines": { "node": ">=0.4.x" } @@ -28895,7 +29728,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "devOptional": true, "engines": { "node": ">=0.4.x" } @@ -28975,7 +29807,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "devOptional": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -28984,7 +29815,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "devOptional": true, "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -29437,6 +30267,24 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/react-markdown/node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-markdown/node_modules/hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/react-markdown/node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -29470,6 +30318,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/react-markdown/node_modules/property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/react-markdown/node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -29489,6 +30346,30 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/react-markdown/node_modules/remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/react-markdown/node_modules/trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -29516,6 +30397,15 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/react-markdown/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/react-markdown/node_modules/unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -29530,6 +30420,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/react-markdown/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/react-merge-refs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", @@ -30262,14 +31165,12 @@ "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, "dependencies": { "regenerate": "^1.4.2" }, @@ -30286,7 +31187,6 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" } @@ -30295,7 +31195,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "devOptional": true, "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -30308,7 +31207,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "devOptional": true, "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -30321,7 +31219,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "devOptional": true, "dependencies": { "is-plain-object": "^2.0.4" }, @@ -30360,7 +31257,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "dev": true, "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", @@ -30376,14 +31272,12 @@ "node_modules/regjsgen": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, "dependencies": { "jsesc": "~0.5.0" }, @@ -30395,7 +31289,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, "bin": { "jsesc": "bin/jsesc" } @@ -30446,6 +31339,11 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/rehype-slug/node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + }, "node_modules/rehype-slug/node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -30506,6 +31404,15 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-slug/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/rehype-slug/node_modules/unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -30520,6 +31427,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-slug/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", @@ -30576,6 +31496,14 @@ "node": ">=4" } }, + "node_modules/remark-admonitions/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, "node_modules/remark-admonitions/node_modules/unified": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", @@ -30632,6 +31560,127 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-autolink-headings": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/remark-autolink-headings/-/remark-autolink-headings-7.0.1.tgz", + "integrity": "sha512-a1BIwoJ0cSnX+sPp5u3AFULBFWHGYBt57Fo4a+7IlGiJOQxs8b7uYAE5Iu26Ocl7Y5cvinZy3FaGVruLCKg6vA==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "extend": "^3.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-autolink-headings/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-autolink-headings/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/remark-autolink-headings/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-autolink-headings/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-autolink-headings/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-autolink-headings/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-autolink-headings/node_modules/unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-autolink-headings/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-external-links": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", @@ -30649,16 +31698,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-external-links/node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/remark-footnotes": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", @@ -30878,15 +31917,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-parse/node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-parse/node_modules/micromark": { "version": "2.11.4", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", @@ -30935,21 +31965,72 @@ } }, "node_modules/remark-rehype": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", - "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-8.1.0.tgz", + "integrity": "sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==", "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" + "mdast-util-to-hast": "^10.2.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-rehype/node_modules/bail": { + "node_modules/remark-rehype/node_modules/mdast-util-to-hast": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz", + "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype/node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype/node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-7.0.1.tgz", + "integrity": "sha512-NRvYePr69LdeCkEGwL4KYAmq7kdWG5rEavCXMzUR4qndLoXHJAOLSUmPY6Qm4NJfKix7/EmgObyVaYivONAFhg==", + "dependencies": { + "@types/hast": "^2.3.2", + "@types/mdast": "^3.0.0", + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", @@ -30958,7 +32039,7 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-rehype/node_modules/is-buffer": { + "node_modules/remark-slug/node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", @@ -30980,7 +32061,7 @@ "node": ">=4" } }, - "node_modules/remark-rehype/node_modules/is-plain-obj": { + "node_modules/remark-slug/node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", @@ -30991,7 +32072,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-rehype/node_modules/trough": { + "node_modules/remark-slug/node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", @@ -31000,7 +32090,7 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-rehype/node_modules/unified": { + "node_modules/remark-slug/node_modules/unified": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", @@ -31018,32 +32108,37 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-slug": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", - "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", - "dev": true, + "node_modules/remark-slug/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", "dependencies": { - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^1.0.0", - "unist-util-visit": "^2.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-slug/node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "dev": true - }, - "node_modules/remark-slug/node_modules/mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true, + "node_modules/remark-slug/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -31099,24 +32194,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify/node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/remark/node_modules/bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -31246,7 +32323,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true + "devOptional": true }, "node_modules/remove-trailing-slash": { "version": "0.1.1", @@ -31384,8 +32461,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "devOptional": true + "deprecated": "https://github.com/lydell/resolve-url#deprecated" }, "node_modules/resolve.exports": { "version": "1.1.0", @@ -31408,7 +32484,6 @@ "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "devOptional": true, "engines": { "node": ">=0.12" } @@ -31440,7 +32515,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "devOptional": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -31486,7 +32560,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "devOptional": true, "dependencies": { "aproba": "^1.1.1" } @@ -31516,7 +32589,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "devOptional": true, "dependencies": { "ret": "~0.1.10" } @@ -32031,7 +33103,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "devOptional": true, "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -32045,8 +33116,7 @@ "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "devOptional": true + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -32058,7 +33128,6 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "devOptional": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -32111,6 +33180,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/shiki": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", + "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -32176,7 +33255,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "devOptional": true, "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", @@ -32195,7 +33273,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "devOptional": true, "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -32209,7 +33286,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "devOptional": true, "dependencies": { "is-descriptor": "^1.0.0" }, @@ -32221,7 +33297,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "devOptional": true, "dependencies": { "kind-of": "^3.2.0" }, @@ -32233,7 +33308,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -32245,7 +33319,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, "dependencies": { "ms": "2.0.0" } @@ -32254,7 +33327,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "devOptional": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -32266,7 +33338,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -32278,7 +33349,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -32290,7 +33360,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -32302,7 +33371,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -32314,7 +33382,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "devOptional": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -32328,7 +33395,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -32336,14 +33402,12 @@ "node_modules/snapdragon/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/snapdragon/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -32351,15 +33415,14 @@ "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "devOptional": true + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" }, "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, "node_modules/source-map-js": { @@ -32375,7 +33438,6 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "devOptional": true, "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -32388,23 +33450,29 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "devOptional": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "devOptional": true + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" }, "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -32446,7 +33514,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "devOptional": true, "dependencies": { "extend-shallow": "^3.0.0" }, @@ -32458,7 +33525,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "devOptional": true, "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -32471,7 +33537,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "devOptional": true, "dependencies": { "is-plain-object": "^2.0.4" }, @@ -32574,7 +33639,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "devOptional": true, "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -32587,7 +33651,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "devOptional": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -32599,7 +33662,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -32611,7 +33673,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -32623,7 +33684,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -32635,7 +33695,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -32647,7 +33706,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "devOptional": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -32661,7 +33719,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -32713,7 +33770,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "devOptional": true, "dependencies": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" @@ -32723,7 +33779,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "devOptional": true, "dependencies": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -32733,7 +33788,6 @@ "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "devOptional": true, "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -32745,8 +33799,7 @@ "node_modules/stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "devOptional": true + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, "node_modules/string_decoder": { "version": "1.1.1", @@ -33231,15 +34284,14 @@ } }, "node_modules/tailwindcss-radix": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-2.6.1.tgz", - "integrity": "sha512-ejh4BHkn/3g349l+JiEW6I4//uclU4nllEqnOK3/8zpORscIk9WbjLyYR2UzqwVRjjzgd72I/hMDJZm3+XO48w==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-1.6.0.tgz", + "integrity": "sha512-5oBgGCVGsITMiUVlc6Euj4kt03l8htLJxVT9AXbkFxcJiXLtQxJriFq/8R+3s63OKit/ynCVdkqvlnW6H7iG1g==" }, "node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "devOptional": true, "engines": { "node": ">=6" } @@ -33261,54 +34313,6 @@ "node": ">=10" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "peer": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "peer": true - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "peer": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -33366,7 +34370,6 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "devOptional": true, "dependencies": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -33534,6 +34537,15 @@ "node": ">=8" } }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/terser-webpack-plugin/node_modules/terser": { "version": "5.15.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", @@ -33555,8 +34567,15 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/test-exclude": { "version": "6.0.0", @@ -33583,12 +34602,6 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "peer": true - }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -33602,7 +34615,6 @@ "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "devOptional": true, "dependencies": { "setimmediate": "^1.0.4" }, @@ -33634,8 +34646,7 @@ "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "devOptional": true + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" }, "node_modules/to-fast-properties": { "version": "2.0.0", @@ -33671,7 +34682,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "devOptional": true, "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -33705,7 +34715,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "devOptional": true, "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -33718,7 +34727,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "devOptional": true, "dependencies": { "is-plain-object": "^2.0.4" }, @@ -34098,52 +35106,30 @@ "node_modules/tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "devOptional": true + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" }, "node_modules/turbo": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.4.7.tgz", - "integrity": "sha512-oIk7PAISPidDOkTM5M+ydEe5GDQ/+TahDgIbaYKeAAy2Qpmur4s0HybSDWHIdxLqI96OPD/mOKymRLrjh3Mdhg==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.6.3.tgz", + "integrity": "sha512-FtfhJLmEEtHveGxW4Ye/QuY85AnZ2ZNVgkTBswoap7UMHB1+oI4diHPNyqrQLG4K1UFtCkjOlVoLsllUh/9QRw==", "dev": true, "hasInstallScript": true, "bin": { "turbo": "bin/turbo" }, "optionalDependencies": { - "turbo-android-arm64": "1.4.7", - "turbo-darwin-64": "1.4.7", - "turbo-darwin-arm64": "1.4.7", - "turbo-freebsd-64": "1.4.7", - "turbo-freebsd-arm64": "1.4.7", - "turbo-linux-32": "1.4.7", - "turbo-linux-64": "1.4.7", - "turbo-linux-arm": "1.4.7", - "turbo-linux-arm64": "1.4.7", - "turbo-linux-mips64le": "1.4.7", - "turbo-linux-ppc64le": "1.4.7", - "turbo-windows-32": "1.4.7", - "turbo-windows-64": "1.4.7", - "turbo-windows-arm64": "1.4.7" + "turbo-darwin-64": "1.6.3", + "turbo-darwin-arm64": "1.6.3", + "turbo-linux-64": "1.6.3", + "turbo-linux-arm64": "1.6.3", + "turbo-windows-64": "1.6.3", + "turbo-windows-arm64": "1.6.3" } }, - "node_modules/turbo-android-arm64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-android-arm64/-/turbo-android-arm64-1.4.7.tgz", - "integrity": "sha512-BtWtH8e8w1GhtYpGQmkcDS/AUzVZhQ4ZZN+qtUFei1wZD7VAdtJ9Wcsfi3WD+mXA6vtpIpRJVfQMcShr8l8ErA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, "node_modules/turbo-darwin-64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.4.7.tgz", - "integrity": "sha512-bMvZaAz5diec9feZ0XpQosYI8U0kiOQM2tj2sv0Y2WZbe227wodVMCQMyUowmcotO8nr6NF76Xo5E+H+dnY6LQ==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.6.3.tgz", + "integrity": "sha512-QmDIX0Yh1wYQl0bUS0gGWwNxpJwrzZU2GIAYt3aOKoirWA2ecnyb3R6ludcS1znfNV2MfunP+l8E3ncxUHwtjA==", "cpu": [ "x64" ], @@ -34154,9 +35140,9 @@ ] }, "node_modules/turbo-darwin-arm64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.4.7.tgz", - "integrity": "sha512-AyfxYfKgh1EigQKjypbnDoMLuy4e/n/go+KYiWKKIpOaWXWLBokrBWzYN/aI3NMDRUJWK5ExdlWI9Nleelq8uQ==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.6.3.tgz", + "integrity": "sha512-75DXhFpwE7CinBbtxTxH08EcWrxYSPFow3NaeFwsG8aymkWXF+U2aukYHJA6I12n9/dGqf7yRXzkF0S/9UtdyQ==", "cpu": [ "arm64" ], @@ -34166,49 +35152,10 @@ "darwin" ] }, - "node_modules/turbo-freebsd-64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-freebsd-64/-/turbo-freebsd-64-1.4.7.tgz", - "integrity": "sha512-T5/osfbCh0rL53MFS5byFFfsR3vPMHIKIJ4fMMCNkoHsmFj2R0Pv53nqhEItogt0FJwCDHPyt7oBqO83H/AWQQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/turbo-freebsd-arm64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-freebsd-arm64/-/turbo-freebsd-arm64-1.4.7.tgz", - "integrity": "sha512-PL+SaO78AUCas+YKj01UiS2rpmGcxz8XPmLdFWmq6PYjPX6GL5UBAc3pkBphIm0aTLZtsikoEul+JrwAuAy6UA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/turbo-linux-32": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-32/-/turbo-linux-32-1.4.7.tgz", - "integrity": "sha512-dK94UwDzySMALoQtjBVVPbWJZP6xw3yHGuytM3q5p4kfMZPSA+rgNBn5T5Af2Rc7jxlLAsu5ODJ0SgIbWSF5Hg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/turbo-linux-64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.4.7.tgz", - "integrity": "sha512-F6IM23zgTYo9gYJaNp17gVvQBt0hMIvz52OF91DpPYSLpV2h9OSlzPJ3j5TGaWueS/bc/YCV23+VojXX/MauGQ==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.6.3.tgz", + "integrity": "sha512-O9uc6J0yoRPWdPg9THRQi69K6E2iZ98cRHNvus05lZbcPzZTxJYkYGb5iagCmCW/pq6fL4T4oLWAd6evg2LGQA==", "cpu": [ "x64" ], @@ -34218,23 +35165,10 @@ "linux" ] }, - "node_modules/turbo-linux-arm": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-arm/-/turbo-linux-arm-1.4.7.tgz", - "integrity": "sha512-FTh4itdMNZ7IxGKknFnQ6iPO9vGGKqyySkCYLR01lnw6BTnKL9KuM9XUCBRyn7dNmHhAnqu1ZtVsBkH7CE7DEw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/turbo-linux-arm64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.4.7.tgz", - "integrity": "sha512-kFe5jzj3FoY6jAEwyNEswndj1t/fPl0qyxfcQv6aNPz7Nb2Lh7mY/EEse+CG3ydIo5RZKba7ppQoBSDmHx7JsA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.6.3.tgz", + "integrity": "sha512-dCy667qqEtZIhulsRTe8hhWQNCJO0i20uHXv7KjLHuFZGCeMbWxB8rsneRoY+blf8+QNqGuXQJxak7ayjHLxiA==", "cpu": [ "arm64" ], @@ -34244,49 +35178,10 @@ "linux" ] }, - "node_modules/turbo-linux-mips64le": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-mips64le/-/turbo-linux-mips64le-1.4.7.tgz", - "integrity": "sha512-756nG8dnPQVcnl9s70S4NQ43aJjpsnc2h0toktPO+9u2ayv9XTbIPvZLFsS55bDeYhodDGvxoB96W6Xnx01hyQ==", - "cpu": [ - "mipsel" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/turbo-linux-ppc64le": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-ppc64le/-/turbo-linux-ppc64le-1.4.7.tgz", - "integrity": "sha512-VS2ofGN/XsafNGJdZ21UguURHb7KRG879yWLj59hO1d+0xXXQbx7ljsmEPOhiE4UjEdx4Ur6P44BhztTgDx9Og==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/turbo-windows-32": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-windows-32/-/turbo-windows-32-1.4.7.tgz", - "integrity": "sha512-M5GkZdA0CbJAOcR8SScM63CBV+NtX7qjhoNNOl0F99nGJ+rO3dH71CcM/rbhlz9SQzKQoX8rcuwZHe4r2HZAug==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/turbo-windows-64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.4.7.tgz", - "integrity": "sha512-ftZUtZ1BX1vi8MbxKr+a7riIkhwvGnNTtWGprVu+aDJ8PnV+lNqbkrLJGvKP7Cn22hGTfzcjNNPcJ5PBZpQEQw==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.6.3.tgz", + "integrity": "sha512-lKRqwL3mrVF09b9KySSaOwetehmGknV9EcQTF7d2dxngGYYX1WXoQLjFP9YYH8ZV07oPm+RUOAKSCQuDuMNhiA==", "cpu": [ "x64" ], @@ -34297,9 +35192,9 @@ ] }, "node_modules/turbo-windows-arm64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.4.7.tgz", - "integrity": "sha512-mZ79XeJFfaeVKdBV3w0eoGaqAxFnwxrme0jZtSWemAbeDSCF/13wcbLGwtq0+Lu0LxEGweeQ5AqsCIc9t9i6sA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.6.3.tgz", + "integrity": "sha512-BXY1sDPEA1DgPwuENvDCD8B7Hb0toscjus941WpL8CVd10hg9pk/MWn9CNgwDO5Q9ks0mw+liDv2EMnleEjeNA==", "cpu": [ "arm64" ], @@ -34400,6 +35295,11 @@ "resolved": "packages/ui", "link": true }, + "node_modules/un-eval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/un-eval/-/un-eval-1.2.0.tgz", + "integrity": "sha512-Wlj/pum6dQtGTPD/lclDtoVPkSfpjPfy1dwnnKw/sZP5DpBH9fLhBgQfsqNhe5/gS1D+vkZUuB771NRMUPA5CA==" + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -34414,40 +35314,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "peer": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/unfetch": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", @@ -34471,7 +35337,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, "engines": { "node": ">=4" } @@ -34480,7 +35345,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -34493,7 +35357,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, "engines": { "node": ">=4" } @@ -34502,7 +35365,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, "engines": { "node": ">=4" } @@ -34546,6 +35408,14 @@ "node": ">=4" } }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, "node_modules/unified/node_modules/unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", @@ -34639,7 +35509,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "devOptional": true, "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -34660,7 +35529,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "devOptional": true, "dependencies": { "unique-slug": "^2.0.0" } @@ -34669,7 +35537,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "devOptional": true, "dependencies": { "imurmurhash": "^0.1.4" } @@ -34696,9 +35563,9 @@ } }, "node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -34718,12 +35585,9 @@ } }, "node_modules/unist-util-position": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", - "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", - "dependencies": { - "@types/unist": "^2.0.0" - }, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -34766,6 +35630,15 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-remove-position/node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-remove-position/node_modules/unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -34780,10 +35653,14 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-remove/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "node_modules/unist-util-remove-position/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -34816,28 +35693,6 @@ } }, "node_modules/unist-util-visit-parents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", - "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", @@ -34886,7 +35741,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "devOptional": true, "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -34899,7 +35753,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "devOptional": true, "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -34913,7 +35766,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "devOptional": true, "dependencies": { "isarray": "1.0.0" }, @@ -34925,7 +35777,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -34933,8 +35784,7 @@ "node_modules/unset-value/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "devOptional": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/untildify": { "version": "2.1.0", @@ -34953,7 +35803,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, "optional": true, "engines": { "node": ">=4", @@ -34997,14 +35846,12 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "devOptional": true + "deprecated": "Please see https://github.com/lydell/urix#deprecated" }, "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "devOptional": true, "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -35049,14 +35896,12 @@ "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "devOptional": true + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -35175,7 +36020,6 @@ "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "devOptional": true, "dependencies": { "inherits": "2.0.3" } @@ -35198,8 +36042,7 @@ "node_modules/util/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "devOptional": true + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/utila": { "version": "0.4.0", @@ -35298,15 +36141,6 @@ "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -35433,8 +36267,17 @@ "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "devOptional": true + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "node_modules/vscode-oniguruma": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", + "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==" + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==" }, "node_modules/w3c-hr-time": { "version": "1.0.2", @@ -35490,7 +36333,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, "optional": true, "dependencies": { "chokidar": "^2.1.8" @@ -35500,7 +36342,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, "optional": true, "dependencies": { "micromatch": "^3.1.4", @@ -35511,7 +36352,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, "optional": true, "dependencies": { "remove-trailing-separator": "^1.0.1" @@ -35524,7 +36364,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -35534,7 +36373,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "optional": true, "dependencies": { "arr-flatten": "^1.1.0", @@ -35557,7 +36395,6 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, "optional": true, "dependencies": { "anymatch": "^2.0.0", @@ -35580,7 +36417,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, "optional": true, "dependencies": { "extend-shallow": "^2.0.1", @@ -35597,7 +36433,6 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -35615,7 +36450,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, "optional": true, "dependencies": { "is-glob": "^3.1.0", @@ -35626,7 +36460,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, "optional": true, "dependencies": { "is-extglob": "^2.1.0" @@ -35639,7 +36472,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, "optional": true, "dependencies": { "binary-extensions": "^1.0.0" @@ -35652,7 +36484,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "optional": true, "dependencies": { "is-plain-object": "^2.0.4" @@ -35665,7 +36496,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" @@ -35678,7 +36508,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, "optional": true, "dependencies": { "is-buffer": "^1.1.5" @@ -35691,7 +36520,6 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "optional": true, "dependencies": { "arr-diff": "^4.0.0", @@ -35716,7 +36544,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, "optional": true, "dependencies": { "assign-symbols": "^1.0.0", @@ -35730,7 +36557,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, "optional": true, "dependencies": { "graceful-fs": "^4.1.11", @@ -35745,7 +36571,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, "optional": true, "dependencies": { "is-number": "^3.0.0", @@ -35776,7 +36601,6 @@ "version": "4.46.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "devOptional": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", @@ -35980,12 +36804,19 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "devOptional": true, "dependencies": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" } }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/webpack-virtual-modules": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", @@ -36008,7 +36839,6 @@ "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "devOptional": true, "bin": { "acorn": "bin/acorn" }, @@ -36020,7 +36850,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -36036,7 +36865,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "devOptional": true, "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -36057,7 +36885,6 @@ "version": "12.0.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "devOptional": true, "dependencies": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -36079,14 +36906,12 @@ "node_modules/webpack/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "devOptional": true + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/webpack/node_modules/enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "devOptional": true, "dependencies": { "graceful-fs": "^4.1.2", "memory-fs": "^0.5.0", @@ -36100,7 +36925,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "devOptional": true, "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -36113,7 +36937,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "devOptional": true, "dependencies": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -36126,7 +36949,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "devOptional": true, "engines": { "node": ">=4.0" } @@ -36135,7 +36957,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "devOptional": true, "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -36150,7 +36971,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "devOptional": true, "dependencies": { "is-plain-object": "^2.0.4" }, @@ -36162,7 +36982,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "devOptional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -36174,7 +36993,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -36186,7 +37004,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "devOptional": true, "engines": { "node": ">=4" } @@ -36195,7 +37012,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "devOptional": true, "dependencies": { "minimist": "^1.2.0" }, @@ -36207,7 +37023,6 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "devOptional": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -36221,7 +37036,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "devOptional": true, "dependencies": { "yallist": "^3.0.2" } @@ -36230,7 +37044,6 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "devOptional": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -36254,7 +37067,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "devOptional": true, "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -36267,7 +37079,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, "dependencies": { "glob": "^7.1.3" }, @@ -36279,7 +37090,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "devOptional": true, "dependencies": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -36293,16 +37103,22 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "devOptional": true, "dependencies": { "randombytes": "^2.1.0" } }, + "node_modules/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/webpack/node_modules/ssri": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "devOptional": true, "dependencies": { "figgy-pudding": "^3.5.1" } @@ -36311,7 +37127,6 @@ "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "devOptional": true, "dependencies": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", @@ -36334,7 +37149,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "devOptional": true, "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -36347,7 +37161,6 @@ "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "devOptional": true, "dependencies": { "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" @@ -36360,14 +37173,12 @@ "node_modules/webpack/node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "devOptional": true + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "node_modules/webpack/node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "devOptional": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/websocket": { "version": "1.0.34", @@ -36526,7 +37337,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "devOptional": true, "dependencies": { "errno": "~0.1.7" } @@ -36686,16 +37496,6 @@ "node": ">=10" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "peer": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -36709,6 +37509,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, @@ -36752,9 +37553,9 @@ } }, "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -36780,6 +37581,16 @@ "typescript": "^4.5.3" } }, + "packages/common/node_modules/@types/react": { + "version": "17.0.50", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, "packages/config": { "version": "0.0.0", "license": "MIT", @@ -36796,10 +37607,19 @@ "tailwindcss-radix": "^2.0.0" } }, + "packages/config/node_modules/@tailwindcss/forms": { + "version": "0.5.3", + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" + } + }, "packages/config/node_modules/@tailwindcss/typography": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.8.tgz", - "integrity": "sha512-xGQEp8KXN8Sd8m6R4xYmwxghmswrd0cPnNI2Lc6fmrC3OojysTBJJGSIVwPV56q4t6THFUK3HJ0EaWwpglSxWw==", + "version": "0.5.7", + "license": "MIT", "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", @@ -36810,6 +37630,10 @@ "tailwindcss": ">=3.0.0 || insiders" } }, + "packages/config/node_modules/tailwindcss-radix": { + "version": "2.6.0", + "license": "MIT" + }, "packages/shared-data": { "version": "0.0.0", "license": "MIT" @@ -36962,21 +37786,9 @@ "react": "^16.8 || ^17.0" } }, - "packages/ui/node_modules/@tailwindcss/forms": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.1.tgz", - "integrity": "sha512-gS9xjCmJjUBz/eP12QlENPLnf0tCx68oYE3mri0GMP5jdtVwLbGUNSRpjsp6NzLAZzZy3ueOwrcqB78Ax6Z84A==", - "dependencies": { - "mini-svg-data-uri": "^1.2.3" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" - } - }, "packages/ui/node_modules/@tailwindcss/typography": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.8.tgz", - "integrity": "sha512-xGQEp8KXN8Sd8m6R4xYmwxghmswrd0cPnNI2Lc6fmrC3OojysTBJJGSIVwPV56q4t6THFUK3HJ0EaWwpglSxWw==", + "version": "0.5.7", + "license": "MIT", "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", @@ -36987,16 +37799,20 @@ "tailwindcss": ">=3.0.0 || insiders" } }, - "packages/ui/node_modules/tailwindcss-radix": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-1.6.0.tgz", - "integrity": "sha512-5oBgGCVGsITMiUVlc6Euj4kt03l8htLJxVT9AXbkFxcJiXLtQxJriFq/8R+3s63OKit/ynCVdkqvlnW6H7iG1g==" + "packages/ui/node_modules/@types/react": { + "version": "17.0.52", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } }, "packages/ui/node_modules/typescript": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", - "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -37044,7 +37860,7 @@ "markdown-table": "=2.0.0", "mobx": "^6.3.2", "mobx-react-lite": "^3.2.0", - "next": "12.0.9", + "next": "12.1.0", "next-compose-plugins": "^2.2.1", "next-transpile-modules": "^9.0.0", "openapi-types": "^9.1.0", @@ -37139,176 +37955,6 @@ "webpack-bundle-analyzer": "4.3.0" } }, - "studio/node_modules/@next/env": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.9.tgz", - "integrity": "sha512-oBlkyDop0Stf7MPIzETGv5r0YT/G/weBrknoPOUTaa5qwOeGjuy6gsOVc/SBtrBkOoBmRpD+fFhQJPvmo1mS+g==" - }, - "studio/node_modules/@next/swc-android-arm64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.9.tgz", - "integrity": "sha512-aVqgsEn5plmUH2X58sjzhHsH/6majucWTMaaBEs7hHO2+GCwCZc7zaLH4XCBMKPES9Yaja8/pYUbvZQE9DqgFw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "studio/node_modules/@next/swc-darwin-arm64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.9.tgz", - "integrity": "sha512-uAgRKm4a2nVdyBiPPJokvmDD1saugOvxljz9ld2ih0CCg5S9vBhqaj3kPGCQBj9hSu3q+Lng2CHnQqG3ga1jzA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "studio/node_modules/@next/swc-darwin-x64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.9.tgz", - "integrity": "sha512-fDOs2lZIyrAdU18IxMA5orBPn9qLbOdu55gXSTNZOhyRJ8ugtbUAejsK7OL0boJy0CCHPAdVRXm01Mwk8tZ9RQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "studio/node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.9.tgz", - "integrity": "sha512-/ni0p9DBvATUML9RQ1ycQuf05uOYKdzA6iI8+eRsARjpGbFVUFbge7XPzlj9g2Q9YWgoN8CSjFGnKRlyky5uHA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "studio/node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.9.tgz", - "integrity": "sha512-AphxilJDf95rUxJDHgM9Ww1DaYXZWqTvoKwXeej/0SgSvICcRZrLaFDrkojdXz0Rxr4igX2OdYR1S4/Hj1jWOQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "studio/node_modules/@next/swc-linux-arm64-musl": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.9.tgz", - "integrity": "sha512-K5jbvNNzF3mRjWmPdxP5Bg87i7FHivfBj/L0KJlxpkLSC8sffBJDmB6jtMnI7wiPj9J6vmLkbGtSosln78xAlQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "studio/node_modules/@next/swc-linux-x64-gnu": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.9.tgz", - "integrity": "sha512-bJZ9bkMkQzsY+UyWezEZ77GWQ4TzwKeXdayX3U3+aEkL8k5C6eKBXlidWdrhu0teLmaUXIyWerWrLnJzwGXdfw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "studio/node_modules/@next/swc-linux-x64-musl": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.9.tgz", - "integrity": "sha512-SR9p0R+v1T32DTXPVAXZw31pmJAkSDotC6Afy+mfC0xrEL3pp95R8sGXYAAUCEPkQp0MEeUOVy2LrToe92X7hQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "studio/node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.9.tgz", - "integrity": "sha512-mzQ1A8vfHhJrvEy5KJZGZWEByXthyKfWofvFaf+oo/5nJl/0Bz1ODP2ajSmbLG++77Eo2AROgbm9pkW1ucvG2A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "studio/node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.9.tgz", - "integrity": "sha512-MpD2vj1zjo1u3J3wiz3pEKse19Etz+P0GL6XfQkB/9a84vJQ1JWMaWBjmIdivzZv718Il2pRSSx8hymwPfguYQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "studio/node_modules/@next/swc-win32-x64-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.9.tgz", - "integrity": "sha512-1c/sxp/4Qz4F6rCxiYqAnrmghCOFt5hHZ9Kd+rXFW5Mqev4C4XDOUMHdBH55HgnJZqngYhOE0r/XNkCtsIojig==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "studio/node_modules/@tailwindcss/typography": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.8.tgz", @@ -37466,72 +38112,6 @@ "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" }, - "studio/node_modules/next": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/next/-/next-12.0.9.tgz", - "integrity": "sha512-omfYqoR/DvbdOIJ6SS1unKJ4mGIxUPs0RPa7wr/Mft22OCKgJhuG+aI9KFYi5ZJBwoFQk1vqaMKpWz5qr+dN0Q==", - "dependencies": { - "@next/env": "12.0.9", - "caniuse-lite": "^1.0.30001283", - "postcss": "8.4.5", - "styled-jsx": "5.0.0", - "use-subscription": "1.5.1" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=12.22.0" - }, - "optionalDependencies": { - "@next/swc-android-arm64": "12.0.9", - "@next/swc-darwin-arm64": "12.0.9", - "@next/swc-darwin-x64": "12.0.9", - "@next/swc-linux-arm-gnueabihf": "12.0.9", - "@next/swc-linux-arm64-gnu": "12.0.9", - "@next/swc-linux-arm64-musl": "12.0.9", - "@next/swc-linux-x64-gnu": "12.0.9", - "@next/swc-linux-x64-musl": "12.0.9", - "@next/swc-win32-arm64-msvc": "12.0.9", - "@next/swc-win32-ia32-msvc": "12.0.9", - "@next/swc-win32-x64-msvc": "12.0.9" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", - "react": "^17.0.2 || ^18.0.0-0", - "react-dom": "^17.0.2 || ^18.0.0-0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "studio/node_modules/next/node_modules/postcss": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", - "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", - "dependencies": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, "studio/node_modules/openapi-types": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-9.3.1.tgz", @@ -37678,8 +38258,9 @@ }, "tests/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -38024,7 +38605,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -38033,7 +38613,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, "requires": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -38054,7 +38633,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -38069,7 +38647,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.1.0" @@ -38079,7 +38656,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -38098,7 +38674,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -38124,7 +38699,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, "requires": { "@babel/types": "^7.18.9" } @@ -38156,7 +38730,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -38170,7 +38743,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -38182,7 +38754,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.18.9", @@ -38203,7 +38774,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dev": true, "requires": { "@babel/types": "^7.20.0" } @@ -38235,7 +38805,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "dev": true, "requires": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", @@ -38323,7 +38892,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -38332,7 +38900,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -38343,7 +38910,6 @@ "version": "7.20.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.19.0", @@ -38355,7 +38921,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -38365,7 +38930,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -38389,7 +38953,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -38409,7 +38972,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -38419,7 +38981,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -38429,7 +38990,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -38439,7 +38999,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -38449,7 +39008,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -38459,7 +39017,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "dev": true, "requires": { "@babel/compat-data": "^7.20.1", "@babel/helper-compilation-targets": "^7.20.0", @@ -38472,7 +39029,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -38482,7 +39038,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", @@ -38493,7 +39048,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -38503,7 +39057,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -38515,7 +39068,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -38525,7 +39077,6 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -38543,7 +39094,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } @@ -38552,7 +39102,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -38570,7 +39119,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -38588,7 +39136,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -38606,7 +39153,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.19.0" } @@ -38624,7 +39170,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -38633,7 +39178,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -38642,7 +39186,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -38651,7 +39194,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -38660,7 +39202,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -38677,7 +39218,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -38686,7 +39226,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -38695,7 +39234,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -38704,7 +39242,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -38713,7 +39250,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.19.0" } @@ -38722,7 +39258,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -38731,7 +39266,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, "requires": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", @@ -38742,7 +39276,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -38751,7 +39284,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.20.2" } @@ -38760,7 +39292,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.20.0", @@ -38776,8 +39307,7 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" } } }, @@ -38785,7 +39315,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -38794,7 +39323,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.20.2" } @@ -38803,7 +39331,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -38813,7 +39340,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -38822,7 +39348,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -38842,7 +39367,6 @@ "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -38851,7 +39375,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", @@ -38862,7 +39385,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -38871,7 +39393,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -38880,7 +39401,6 @@ "version": "7.19.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "dev": true, "requires": { "@babel/helper-module-transforms": "^7.19.6", "@babel/helper-plugin-utils": "^7.19.0" @@ -38890,7 +39410,6 @@ "version": "7.19.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "dev": true, "requires": { "@babel/helper-module-transforms": "^7.19.6", "@babel/helper-plugin-utils": "^7.19.0", @@ -38901,7 +39420,6 @@ "version": "7.19.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.19.6", @@ -38913,7 +39431,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, "requires": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -38923,7 +39440,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.19.0", "@babel/helper-plugin-utils": "^7.19.0" @@ -38933,7 +39449,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -38942,7 +39457,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" @@ -38960,7 +39474,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -38969,7 +39482,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -38978,7 +39490,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", @@ -38991,7 +39502,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, "requires": { "@babel/plugin-transform-react-jsx": "^7.18.6" } @@ -39000,7 +39510,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -39010,7 +39519,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" @@ -39020,7 +39528,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -39029,7 +39536,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -39038,7 +39544,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.19.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" @@ -39048,7 +39553,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -39057,7 +39561,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -39066,7 +39569,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -39075,7 +39577,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.20.2", "@babel/helper-plugin-utils": "^7.20.2", @@ -39086,7 +39587,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.9" } @@ -39095,7 +39595,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -39105,7 +39604,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dev": true, "requires": { "@babel/compat-data": "^7.20.1", "@babel/helper-compilation-targets": "^7.20.0", @@ -39199,7 +39697,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -39212,7 +39709,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", @@ -39226,7 +39722,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", @@ -39334,6 +39829,21 @@ "minimist": "^1.2.0" } }, + "@code-hike/mdx": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@code-hike/mdx/-/mdx-0.7.4.tgz", + "integrity": "sha512-MHnoSJ7wxJ2LJfJ/x+18jh6JOBCPwk1EMQRgVINj3yyejqsYgOQx2ChE+/n+n3AdP7J5RLKfQ6qm/jiNxD8+Lg==", + "requires": { + "hast-util-to-estree": "^1.4.0", + "is-plain-obj": "^3.0.0", + "node-fetch": "^2.0.0", + "remark-rehype": "^8.1.0", + "shiki": "^0.10.1", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, "@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -39595,6 +40105,18 @@ "minimatch": "^3.0.4" } }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -39860,6 +40382,12 @@ "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -40114,6 +40642,12 @@ "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -40126,6 +40660,14 @@ "callsites": "^3.0.0", "graceful-fs": "^4.2.9", "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "@jest/test-result": { @@ -40272,6 +40814,14 @@ "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "@jest/types": { @@ -40344,230 +40894,12 @@ } }, "@mdx-js/loader": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz", - "integrity": "sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-2.1.5.tgz", + "integrity": "sha512-oXjfTa/iAcMmW8DdQ+hQFodPCLqw5VKT2yoZkLwrZfPVVpUgKrI+5/ZePYq328xxtAUStZmR3ed0PWJrwd5Pkg==", "requires": { - "@mdx-js/mdx": "1.6.22", - "@mdx-js/react": "1.6.22", - "loader-utils": "2.0.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - } - }, - "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" - }, - "unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } + "@mdx-js/mdx": "^2.0.0", + "source-map": "^0.7.0" } }, "@mdx-js/mdx": { @@ -40594,11 +40926,56 @@ "vfile": "^5.0.0" }, "dependencies": { + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, "bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" }, + "comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==" + }, + "estree-util-attach-comments": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.0.tgz", + "integrity": "sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==", + "requires": { + "@types/estree": "^1.0.0" + } + }, + "hast-util-to-estree": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.1.0.tgz", + "integrity": "sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==", + "requires": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "estree-util-attach-comments": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.3.0", + "unist-util-position": "^4.0.0", + "zwitch": "^2.0.0" + } + }, + "hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==" + }, "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -40609,6 +40986,11 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" }, + "property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==" + }, "remark-parse": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", @@ -40619,6 +41001,22 @@ "unified": "^10.0.0" } }, + "remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "requires": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + } + }, + "space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==" + }, "trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -40638,6 +41036,19 @@ "vfile": "^5.0.0" } }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", + "requires": { + "@types/unist": "^2.0.0" + } + }, "unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -40647,6 +41058,20 @@ "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^5.1.1" } + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + }, + "zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" } } }, @@ -40708,9 +41133,9 @@ } }, "@next/bundle-analyzer": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-13.0.4.tgz", - "integrity": "sha512-GFbr0HX75Fv/S+R7NOXOUX7YBtg+snE3a/4ikEfouXVHzPakluIQL8ojYJTcR5Q6mBospGaldT19AdfuqRmPqQ==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-13.0.5.tgz", + "integrity": "sha512-45q05yO6ZqS5NHHaxnU/PsVdMw5XfT6d7CptFaIr/9O2nECDjhM56G5JQx+346fkI76l1embxkLBzoQByTYGKQ==", "requires": { "webpack-bundle-analyzer": "4.7.0" } @@ -40749,6 +41174,12 @@ "integrity": "sha512-YTF/ph9NMKjmrNsr8O+y3IiZee9TaxSd6051qI0Fj/du75pKRRZ1DnOX6ZS7mMgswH7VMERVV7fBZxmJr9sN7Q==", "requires": {} }, + "@next/swc-android-arm-eabi": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.2.tgz", + "integrity": "sha512-r2rrz+DZ8YYGqzVrbRrpP6GKzwozpOrnFbErc4k36vUTSFMag9yQahZfaBe06JYdqu/e5yhm/saIDEaSVPRP4g==", + "optional": true + }, "@next/swc-android-arm64": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.0.tgz", @@ -40767,6 +41198,12 @@ "integrity": "sha512-ieAz0/J0PhmbZBB8+EA/JGdhRHBogF8BWaeqR7hwveb6SYEIJaDNQy0I+ZN8gF8hLj63bEDxJAs/cEhdnTq+ug==", "optional": true }, + "@next/swc-freebsd-x64": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.2.tgz", + "integrity": "sha512-h5Mx0BKDCJ5Vu/U8e07esF6PjPv1EJgmRbYWTUZMAflu13MQpCJkKEJir7+BeRfTXRfgFf+llc7uocrpd7mcrg==", + "optional": true + }, "@next/swc-linux-arm-gnueabihf": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.0.tgz", @@ -41151,25 +41588,6 @@ "loader-utils": "^2.0.3", "schema-utils": "^3.0.0", "source-map": "^0.7.3" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } } }, "@polka/url": { @@ -42810,6 +43228,23 @@ "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", "dev": true, "requires": {} + }, + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true + }, + "remark-slug": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", + "dev": true, + "requires": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + } } } }, @@ -43243,6 +43678,12 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -43789,6 +44230,12 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "mdast-util-to-hast": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", @@ -43889,12 +44336,6 @@ "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", "dev": true }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "dev": true - }, "unist-util-remove-position": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", @@ -44473,10 +44914,18 @@ "prop-types": "^15.7.2" } }, + "@swc/helpers": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", + "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "requires": { + "tslib": "^2.4.0" + } + }, "@tailwindcss/forms": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz", - "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.1.tgz", + "integrity": "sha512-gS9xjCmJjUBz/eP12QlENPLnf0tCx68oYE3mri0GMP5jdtVwLbGUNSRpjsp6NzLAZzZy3ueOwrcqB78Ax6Z84A==", "requires": { "mini-svg-data-uri": "^1.2.3" } @@ -44988,7 +45437,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "devOptional": true }, "@types/parse-numeric-range": { "version": "0.0.1", @@ -45210,6 +45659,14 @@ "dev": true, "requires": { "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "@types/unist": { @@ -45235,6 +45692,14 @@ "@types/webpack-sources": "*", "anymatch": "^3.0.0", "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "@types/webpack-env": { @@ -45252,14 +45717,6 @@ "@types/node": "*", "@types/source-list-map": "*", "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } } }, "@types/yargs": { @@ -45277,16 +45734,6 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "optional": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, "@types/zxcvbn": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.1.tgz", @@ -45456,7 +45903,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "devOptional": true, "requires": { "@webassemblyjs/helper-module-context": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -45466,26 +45912,22 @@ "@webassemblyjs/floating-point-hex-parser": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "devOptional": true + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "devOptional": true + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "devOptional": true + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "devOptional": true, "requires": { "@webassemblyjs/wast-printer": "1.9.0" } @@ -45493,14 +45935,12 @@ "@webassemblyjs/helper-fsm": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "devOptional": true + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "devOptional": true, "requires": { "@webassemblyjs/ast": "1.9.0" } @@ -45508,14 +45948,12 @@ "@webassemblyjs/helper-wasm-bytecode": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "devOptional": true + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "devOptional": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -45527,7 +45965,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "devOptional": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -45536,7 +45973,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "devOptional": true, "requires": { "@xtuc/long": "4.2.2" } @@ -45544,14 +45980,12 @@ "@webassemblyjs/utf8": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "devOptional": true + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "devOptional": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -45567,7 +46001,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "devOptional": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -45580,7 +46013,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "devOptional": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -45592,7 +46024,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "devOptional": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-api-error": "1.9.0", @@ -45606,7 +46037,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "devOptional": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/floating-point-hex-parser": "1.9.0", @@ -45620,7 +46050,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "devOptional": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/wast-parser": "1.9.0", @@ -45654,14 +46083,12 @@ "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "devOptional": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "devOptional": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "abab": { "version": "2.0.6", @@ -45783,14 +46210,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "devOptional": true, "requires": {} }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "devOptional": true, "requires": {} }, "algoliasearch": { @@ -45992,20 +46417,17 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "devOptional": true + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "devOptional": true + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "devOptional": true + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" }, "array-find-index": { "version": "1.0.2", @@ -46046,8 +46468,7 @@ "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "devOptional": true + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" }, "array.prototype.flat": { "version": "1.3.1", @@ -46119,7 +46540,6 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "devOptional": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -46130,8 +46550,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -46139,7 +46558,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "devOptional": true, "requires": { "object-assign": "^4.1.1", "util": "0.10.3" @@ -46148,14 +46566,12 @@ "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "devOptional": true + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "devOptional": true, "requires": { "inherits": "2.0.1" } @@ -46165,8 +46581,7 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "devOptional": true + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" }, "ast-types": { "version": "0.14.2", @@ -46202,7 +46617,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, "optional": true }, "asynckit": { @@ -46219,8 +46633,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "devOptional": true + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autolinker": { "version": "0.28.1", @@ -46416,6 +46829,12 @@ "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -46588,7 +47007,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, + "devOptional": true, "requires": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -46599,7 +47018,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, "requires": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", @@ -46610,7 +47028,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" @@ -46620,7 +47037,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.3" } @@ -46680,7 +47096,6 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "devOptional": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -46695,7 +47110,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "devOptional": true, "requires": { "is-descriptor": "^1.0.0" } @@ -46754,57 +47168,20 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, "optional": true, "requires": { "file-uri-to-path": "1.0.0" } }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "peer": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "devOptional": true + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "devOptional": true + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "body-parser": { "version": "1.20.1", @@ -46914,8 +47291,7 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "devOptional": true + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "browser-process-hrtime": { "version": "1.0.0", @@ -46926,7 +47302,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "devOptional": true, "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -46940,7 +47315,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "devOptional": true, "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -46951,7 +47325,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "devOptional": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -46963,7 +47336,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "devOptional": true, "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -46973,7 +47345,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "devOptional": true, "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", @@ -46990,7 +47361,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -47000,8 +47370,7 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "devOptional": true + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -47009,7 +47378,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "devOptional": true, "requires": { "pako": "~1.0.5" } @@ -47052,7 +47420,6 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "devOptional": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -47062,17 +47429,10 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "devOptional": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" } } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "peer": true - }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -47091,8 +47451,7 @@ "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "devOptional": true + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "bufferutil": { "version": "4.0.7", @@ -47105,8 +47464,7 @@ "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "devOptional": true + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" }, "bytes": { "version": "3.0.0", @@ -47194,7 +47552,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "devOptional": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -47309,9 +47666,9 @@ "dev": true }, "character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" }, "character-entities-html4": { "version": "2.1.0", @@ -47367,8 +47724,7 @@ "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "devOptional": true + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, "ci-info": { "version": "3.6.2", @@ -47380,7 +47736,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "devOptional": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -47396,7 +47751,6 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "devOptional": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -47408,7 +47762,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "devOptional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -47417,7 +47770,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" }, @@ -47426,7 +47778,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -47437,7 +47788,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" }, @@ -47446,7 +47796,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -47457,7 +47806,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "devOptional": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -47467,8 +47815,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "devOptional": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -47484,6 +47831,14 @@ "dev": true, "requires": { "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "clean-stack": { @@ -47533,6 +47888,11 @@ "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -47589,7 +47949,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "devOptional": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -47623,9 +47982,9 @@ } }, "comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" }, "commander": { "version": "6.2.1", @@ -47642,6 +48001,17 @@ "config": "*", "tsconfig": "*", "typescript": "^4.5.3" + }, + "dependencies": { + "@types/react": { + "version": "17.0.50", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + } } }, "common-path-prefix": { @@ -47653,14 +48023,12 @@ "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "devOptional": true + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "devOptional": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "component-type": { "version": "1.2.1", @@ -47730,6 +48098,13 @@ "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", "requires": { "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "config": { @@ -47747,16 +48122,23 @@ "tailwindcss-radix": "^2.0.0" }, "dependencies": { + "@tailwindcss/forms": { + "version": "0.5.3", + "requires": { + "mini-svg-data-uri": "^1.2.3" + } + }, "@tailwindcss/typography": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.8.tgz", - "integrity": "sha512-xGQEp8KXN8Sd8m6R4xYmwxghmswrd0cPnNI2Lc6fmrC3OojysTBJJGSIVwPV56q4t6THFUK3HJ0EaWwpglSxWw==", + "version": "0.5.7", "requires": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "postcss-selector-parser": "6.0.10" } + }, + "tailwindcss-radix": { + "version": "2.6.0" } } }, @@ -47776,8 +48158,7 @@ "console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "devOptional": true + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" }, "console-control-strings": { "version": "1.1.0", @@ -47787,8 +48168,7 @@ "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "devOptional": true + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" }, "content-disposition": { "version": "0.5.4", @@ -47841,7 +48221,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "devOptional": true, "requires": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -47855,7 +48234,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, "requires": { "glob": "^7.1.3" } @@ -47865,8 +48243,7 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "devOptional": true + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" }, "copy-to-clipboard": { "version": "3.3.3", @@ -47886,7 +48263,6 @@ "version": "3.26.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "dev": true, "requires": { "browserslist": "^4.21.4" } @@ -47905,7 +48281,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, + "devOptional": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -48176,7 +48552,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "devOptional": true, "requires": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -48185,8 +48560,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -48194,7 +48568,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "devOptional": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -48207,7 +48580,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "devOptional": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -48250,7 +48622,6 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "devOptional": true, "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -48294,6 +48665,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -48347,6 +48724,12 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -48429,6 +48812,12 @@ "ajv": "^6.12.4", "ajv-keywords": "^3.5.2" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -48456,6 +48845,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -48543,8 +48938,7 @@ "cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", - "devOptional": true + "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" }, "d": { "version": "1.0.1", @@ -49192,13 +49586,19 @@ "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "requires": { "character-entities": "^2.0.0" + }, + "dependencies": { + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + } } }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "devOptional": true + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" }, "dedent": { "version": "0.7.0", @@ -49270,7 +49670,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "devOptional": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -49324,7 +49723,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "devOptional": true, "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -49384,12 +49782,6 @@ "minimist": "^1.2.6" } }, - "devtools-protocol": { - "version": "0.0.1019158", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz", - "integrity": "sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==", - "peer": true - }, "diacritics-map": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/diacritics-map/-/diacritics-map-0.1.0.tgz", @@ -49416,7 +49808,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "devOptional": true, "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -49426,8 +49817,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -49460,11 +49850,13 @@ "@algolia/autocomplete-js": "^1.7.2", "@algolia/autocomplete-plugin-recent-searches": "^1.7.2", "@apollo/client": "^3.6.6", + "@code-hike/mdx": "^0.7.4", "@docsearch/react": "^3.3.0", "@mdx-js/loader": "^1.6.22", "@mdx-js/react": "^1.6.22", "@next/mdx": "^12.0.4", "@radix-ui/react-accordion": "^1.0.1", + "@radix-ui/react-collapsible": "^1.0.1", "@tailwindcss/typography": "^0.4.1", "@types/node": "^17.0.12", "@types/react": "17.0.39", @@ -49478,14 +49870,17 @@ "globby": "^12.0.2", "graphql": "^16.5.0", "gray-matter": "^4.0.3", + "isbot": "^3.6.5", "jsrsasign": "^10.5.26", "lodash": "^4.17.21", "markdown-toc": "^1.2.0", "mdx-mermaid": "2.0.0-rc3", "minimist": "^1.2.6", - "next": "12.1.0", + "next": "12.3.2", "next-compose-plugins": "^2.2.1", - "next-mdx-remote": "^3.0.8", + "next-mdx-remote": "^4.1.0", + "next-mdx-toc": "^0.1.3", + "next-plugin-yaml": "^1.0.1", "next-seo": "^5.14.1", "next-themes": "0.0.15", "next-transpile-modules": "9.0.0", @@ -49501,22 +49896,233 @@ "react-syntax-highlighter": "^15.3.1", "remark": "^14.0.2", "remark-admonitions": "^1.2.1", + "remark-autolink-headings": "^7.0.1", + "remark-gfm": "^3.0.1", "remark-html": "^15.0.0", "remark-mdx": "^2.0.0-rc.2", "remark-prism": "^1.3.6", + "remark-slug": "^7.0.1", "sass": "^1.55.0", + "shiki": "^0.11.1", "ts-node": "^10.9.1", "tsconfig": "*", "typescript": "^4.5.3", - "ui": "*" + "ui": "*", + "valtio": "^1.7.6" }, "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@mdx-js/loader": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz", + "integrity": "sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==", + "requires": { + "@mdx-js/mdx": "1.6.22", + "@mdx-js/react": "1.6.22", + "loader-utils": "2.0.0" + } + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + } + } + } + }, "@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", "requires": {} }, + "@next/env": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.2.tgz", + "integrity": "sha512-upwtMaHxlv/udAWGq0kE+rg8huwmcxQPsKZFhS1R5iVO323mvxEBe1YrSXe1awLbg9sTIuEHbgxjLLt7JbeuAQ==" + }, + "@next/swc-android-arm64": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.2.tgz", + "integrity": "sha512-B+TINJhCf+CrY1+b3/JWQlkecv53rAGa/gA7gi5B1cnBa/2Uvoe+Ue0JeCefTjfiyl1ScsyNx+NcESY8Ye2Ngg==", + "optional": true + }, + "@next/swc-darwin-arm64": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.2.tgz", + "integrity": "sha512-PTUfe1ZrwjsiuTmr3bOM9lsoy5DCmfYsLOUF9ZVhtbi5MNJVmUTy4VZ06GfrvnCO5hGCr48z3vpFE9QZ0qLcPw==", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.2.tgz", + "integrity": "sha512-1HkjmS9awwlaeEY8Y01nRSNkSv3y+qnC/mjMPe/W66hEh3QKa/LQHqHeS7NOdEs19B2mhZ7w+EgMRXdLQ0Su8w==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.2.tgz", + "integrity": "sha512-EuRZAamoxfe/WoWRaC0zsCAoE4gs/mEhilcloNM4J5Mnb3PLY8PZV394W7t5tjBjItMCF7l2Ebwjwtm46tq2RA==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.2.tgz", + "integrity": "sha512-T9GCFyOIb4S3acA9LqflUYD+QZ94iZketHCqKdoO0Nx0OCHIgGJV5rotDe8TDXwh/goYpIfyHU4j1qqw4w4VnA==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.2.tgz", + "integrity": "sha512-hxNVZS6L3c2z3l9EH2GP0MGQ9exu6O8cohYNZyqC9WUl6C03sEn8xzDH1y+NgD3fVurvYkGU5F0PDddJJLfDIw==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.2.tgz", + "integrity": "sha512-fCPkLuwDwY8/QeXxciJJjDHG09liZym/Bhb4A+RLFQ877wUkwFsNWDUTSdUx0YXlYK/1gf67BKauqKkOKp6CYw==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.2.tgz", + "integrity": "sha512-o+GifBIQ2K+/MEFxHsxUZoU3bsuVFLXZYWd3idimFHiVdDCVYiKsY6mYMmKDlucX+9xRyOCkKL9Tjf+3tuXJpw==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.2.tgz", + "integrity": "sha512-crii66irzGGMSUR0L8r9+A06eTv7FTXqw4rgzJ33M79EwQJOdpY7RVKXLQMurUhniEeQEEOfamiEdPIi/qxisw==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.2.tgz", + "integrity": "sha512-5hRUSvn3MdQ4nVRu1rmKxq5YJzpTtZfaC/NyGw6wa4NSF1noUn/pdQGUr+I5Qz3CZkd1gZzzC0eaXQHlrk0E2g==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.2.tgz", + "integrity": "sha512-tpQJYUH+TzPMIsdVl9fH8uDg47iwiNjKY+8e9da3dXqlkztKzjSw0OwSADoqh3KrifplXeKSta+BBGLdBqg3sg==", + "optional": true + }, + "@radix-ui/react-collapsible": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.1.tgz", + "integrity": "sha512-0maX4q91iYa4gjt3PsNf7dq/yqSR+HGAE8I5p54dQ6gnveS+ETWlMoijxrhmgV1k8svxpm34mQAtqIrJt4XZmA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "dependencies": { + "@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + } + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -49572,22 +50178,216 @@ "v8-compile-cache": "^2.0.3" } }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, "mdx-mermaid": { "version": "2.0.0-rc3", "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-2.0.0-rc3.tgz", "integrity": "sha512-zshJVTyepNE8Sjrj7Hv1UyDq3UwJVnwKsHGuDBYM4jixsofrC2j9wj2sXQ3PnlryFxLm9pU9ctqiGQgbxYXLjg==", "requires": {} }, - "unist-util-visit": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", - "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", - "peer": true, + "next": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/next/-/next-12.3.2.tgz", + "integrity": "sha512-orzvvebCwOqaz1eA5ZA0R5dbKxqtJyw7yeig7kDspu6p8OrplfyelzpvMHcDTKscv/l0nn/0l0v3mSsE8w4k7A==", + "requires": { + "@next/env": "12.3.2", + "@next/swc-android-arm-eabi": "12.3.2", + "@next/swc-android-arm64": "12.3.2", + "@next/swc-darwin-arm64": "12.3.2", + "@next/swc-darwin-x64": "12.3.2", + "@next/swc-freebsd-x64": "12.3.2", + "@next/swc-linux-arm-gnueabihf": "12.3.2", + "@next/swc-linux-arm64-gnu": "12.3.2", + "@next/swc-linux-arm64-musl": "12.3.2", + "@next/swc-linux-x64-gnu": "12.3.2", + "@next/swc-linux-x64-musl": "12.3.2", + "@next/swc-win32-arm64-msvc": "12.3.2", + "@next/swc-win32-ia32-msvc": "12.3.2", + "@next/swc-win32-x64-msvc": "12.3.2", + "@swc/helpers": "0.4.11", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.0.7", + "use-sync-external-store": "1.2.0" + }, + "dependencies": { + "styled-jsx": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", + "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", + "requires": {} + } + } + }, + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "proxy-compare": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-2.3.0.tgz", + "integrity": "sha512-c3L2CcAi7f7pvlD0D7xsF+2CQIW8C3HaYx2Pfgq8eA4HAl3GAH6/dVYsyBbYF/0XJs2ziGLrzmz5fmzPm6A0pQ==" + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "shiki": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz", + "integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==", + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "^6.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + }, + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } + }, + "valtio": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/valtio/-/valtio-1.7.6.tgz", + "integrity": "sha512-zsGrCCYOIpy8egQxftduFyJusF/BMu3CganhHKUOE/I6t6V6yA1MDfZZkrYoWYCGkC3rSBYcIHEEsoYQM9lV2w==", + "requires": { + "proxy-compare": "2.3.0", + "use-sync-external-store": "1.2.0" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" } + }, + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vscode-textmate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz", + "integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==" } } }, @@ -49651,8 +50451,7 @@ "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "devOptional": true + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" }, "domelementtype": { "version": "2.3.0", @@ -49730,7 +50529,6 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "devOptional": true, "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -49770,7 +50568,6 @@ "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "devOptional": true, "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -49784,8 +50581,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -49864,7 +50660,6 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "devOptional": true, "requires": { "prr": "~1.0.1" } @@ -49873,7 +50668,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, + "devOptional": true, "requires": { "is-arrayish": "^0.2.1" } @@ -49999,11 +50794,6 @@ "ext": "^1.1.2" } }, - "esbuild": { - "version": "0.12.29", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", - "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==" - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -50058,6 +50848,12 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -50585,19 +51381,9 @@ } }, "estree-util-attach-comments": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.0.tgz", - "integrity": "sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==", - "requires": { - "@types/estree": "^1.0.0" - }, - "dependencies": { - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - } - } + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-1.0.0.tgz", + "integrity": "sha512-sL7dTwFGqzelPlB56lRZY1CC/yDxCe365WQpxNd49ispL40Yv8Tv4SmteGbvZeFwShOOVKfMlo4jrVvwoaMosA==" }, "estree-util-build-jsx": { "version": "2.2.0", @@ -50622,13 +51408,6 @@ "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - } } }, "estree-util-visit": { @@ -50664,14 +51443,12 @@ "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "devOptional": true + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "devOptional": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -50715,7 +51492,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "devOptional": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -50730,7 +51506,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, "requires": { "ms": "2.0.0" } @@ -50739,7 +51514,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "devOptional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -50748,7 +51522,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" }, @@ -50757,7 +51530,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -50768,7 +51540,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" }, @@ -50777,7 +51548,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -50788,7 +51558,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "devOptional": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -50798,14 +51567,12 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "devOptional": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -50986,7 +51753,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "devOptional": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -51002,36 +51768,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "devOptional": true, "requires": { "is-descriptor": "^1.0.0" } } } }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "peer": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "peer": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, "fast-clone": { "version": "1.5.13", "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz", @@ -51110,15 +51852,6 @@ "bser": "2.1.1" } }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "peer": true, - "requires": { - "pend": "~1.2.0" - } - }, "fetch-retry": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.3.tgz", @@ -51128,8 +51861,7 @@ "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "devOptional": true + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "file-entry-cache": { "version": "6.0.1", @@ -51181,7 +51913,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, "optional": true }, "filelist": { @@ -51257,7 +51988,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "devOptional": true, "requires": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -51268,7 +51998,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "devOptional": true, "requires": { "locate-path": "^3.0.0" } @@ -51277,7 +52006,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "devOptional": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -51287,7 +52015,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "devOptional": true, "requires": { "p-try": "^2.0.0" } @@ -51296,7 +52023,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "devOptional": true, "requires": { "p-limit": "^2.0.0" } @@ -51304,14 +52030,12 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "devOptional": true + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "devOptional": true, "requires": { "find-up": "^3.0.0" } @@ -51322,6 +52046,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -51351,7 +52076,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "devOptional": true, "requires": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" @@ -51527,7 +52251,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "devOptional": true, "requires": { "map-cache": "^0.2.2" } @@ -51542,7 +52265,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "devOptional": true, "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -51553,12 +52275,6 @@ "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==" }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "peer": true - }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -51590,7 +52306,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "devOptional": true, "requires": { "graceful-fs": "^4.1.2", "iferr": "^0.1.5", @@ -51745,13 +52460,12 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "devOptional": true + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" }, "github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "glob": { "version": "7.2.3", @@ -51864,6 +52578,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "graphlib": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", @@ -51944,6 +52664,14 @@ "source-map": "^0.6.1", "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "has": { @@ -52014,7 +52742,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "devOptional": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -52025,7 +52752,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "devOptional": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -52035,7 +52761,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" }, @@ -52044,7 +52769,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -52055,7 +52779,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -52066,7 +52789,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "devOptional": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -52077,7 +52799,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -52087,8 +52808,7 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "devOptional": true + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -52096,12 +52816,27 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "devOptional": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, "hast-to-hyperscript": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", @@ -52114,31 +52849,6 @@ "style-to-object": "^0.3.0", "unist-util-is": "^4.0.0", "web-namespaces": "^1.0.0" - }, - "dependencies": { - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" - } } }, "hast-util-from-parse5": { @@ -52153,11 +52863,6 @@ "xtend": "^4.0.1" }, "dependencies": { - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, "hastscript": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", @@ -52168,19 +52873,6 @@ "property-information": "^5.0.0", "space-separated-tokens": "^1.0.0" } - }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" } } }, @@ -52251,19 +52943,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - }, "unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", @@ -52296,11 +52975,6 @@ "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" } - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" } } }, @@ -52313,31 +52987,25 @@ } }, "hast-util-to-estree": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.1.0.tgz", - "integrity": "sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-1.4.0.tgz", + "integrity": "sha512-CiOAIESUKkSOcYbvTth9+yM28z5ArpsYqxWc7LWJxOx975WRUBDjvVuuzZR2o09BNlkf7bp8G2GlOHepBRKJ8Q==", "requires": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "estree-util-attach-comments": "^2.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdxjs-esm": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "estree-util-attach-comments": "^1.0.0", + "estree-util-is-identifier-name": "^1.1.0", + "hast-util-whitespace": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", "style-to-object": "^0.3.0", - "unist-util-position": "^4.0.0", - "zwitch": "^2.0.0" + "unist-util-position": "^3.1.0", + "zwitch": "^1.0.0" }, "dependencies": { - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "estree-util-is-identifier-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-1.1.0.tgz", + "integrity": "sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==" } } }, @@ -52362,6 +53030,31 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" + }, + "comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==" + }, + "hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==" + }, + "property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==" + }, + "space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==" + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" } } }, @@ -52375,21 +53068,6 @@ "web-namespaces": "^1.0.0", "xtend": "^4.0.0", "zwitch": "^1.0.0" - }, - "dependencies": { - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" - } } }, "hast-util-to-string": { @@ -52401,9 +53079,9 @@ } }, "hast-util-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", - "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", + "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==" }, "hastscript": { "version": "6.0.0", @@ -52415,26 +53093,6 @@ "hast-util-parse-selector": "^2.0.0", "property-information": "^5.0.0", "space-separated-tokens": "^1.0.0" - }, - "dependencies": { - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - } } }, "he": { @@ -52452,7 +53110,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "devOptional": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -52614,8 +53271,7 @@ "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "devOptional": true + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" }, "https-proxy-agent": { "version": "5.0.1", @@ -52664,6 +53320,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -52675,8 +53337,7 @@ "iferr": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "devOptional": true + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" }, "ignore": { "version": "5.2.0", @@ -52791,8 +53452,7 @@ "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "devOptional": true + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "inflight": { "version": "1.0.6", @@ -52864,7 +53524,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "devOptional": true, "requires": { "kind-of": "^6.0.0" } @@ -52897,7 +53556,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "devOptional": true }, "is-bigint": { "version": "1.0.4", @@ -52963,7 +53622,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "devOptional": true, "requires": { "kind-of": "^6.0.0" } @@ -52985,7 +53643,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "devOptional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -53099,9 +53756,9 @@ "dev": true }, "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" }, "is-plain-object": { "version": "2.0.4", @@ -53155,8 +53812,7 @@ "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { "version": "1.0.7", @@ -53242,8 +53898,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "devOptional": true + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-word-character": { "version": "1.0.4", @@ -53265,6 +53920,11 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, + "isbot": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-3.6.5.tgz", + "integrity": "sha512-BchONELXt6yMad++BwGpa0oQxo/uD0keL7N15cYVf0A1oMIoNQ79OqeYdPMFWDrNhCqCbRuw9Y9F3QBjvAxZ5g==" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -53335,6 +53995,14 @@ "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "istanbul-reports": { @@ -54373,6 +55041,12 @@ "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -54501,6 +55175,12 @@ "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -54666,6 +55346,12 @@ "requires": { "lru-cache": "^6.0.0" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -54813,6 +55499,12 @@ "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==", "dev": true }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true + }, "js-sha1": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", @@ -54838,6 +55530,53 @@ "argparse": "^2.0.1" } }, + "js-yaml-loader": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/js-yaml-loader/-/js-yaml-loader-1.2.2.tgz", + "integrity": "sha512-H+NeuNrG6uOs/WMjna2SjkaCw13rMWiT/D7l9+9x5n8aq88BDsh2sRmdfxckWPIHtViYHWRG6XiCKYvS1dfyLg==", + "requires": { + "js-yaml": "^3.13.1", + "loader-utils": "^1.2.3", + "un-eval": "^1.2.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -54898,14 +55637,13 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "devOptional": true + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "devOptional": true }, "json-schema-traverse": { "version": "0.4.1", @@ -54928,6 +55666,11 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -55097,7 +55840,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "devOptional": true }, "list-item": { "version": "1.1.1", @@ -55149,13 +55892,13 @@ "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "devOptional": true + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" }, "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -55174,6 +55917,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "requires": { "p-locate": "^5.0.0" } @@ -55201,8 +55945,7 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "lodash.includes": { "version": "4.3.0", @@ -55360,7 +56103,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "devOptional": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -55369,8 +56111,7 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "devOptional": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -55392,8 +56133,7 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "devOptional": true + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" }, "map-obj": { "version": "1.0.1", @@ -55412,7 +56152,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "devOptional": true, "requires": { "object-visit": "^1.0.0" } @@ -55514,7 +56253,6 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "devOptional": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -55551,6 +56289,20 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } } } }, @@ -55571,6 +56323,13 @@ "micromark-util-types": "^1.0.0", "unist-util-stringify-position": "^3.0.0", "uvu": "^0.5.0" + }, + "dependencies": { + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" + } } }, "mdast-util-gfm": { @@ -55695,6 +56454,11 @@ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" }, + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + }, "character-entities-legacy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", @@ -55784,6 +56548,19 @@ "unist-util-visit": "^4.0.0" } }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", + "requires": { + "@types/unist": "^2.0.0" + } + }, "unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -55793,6 +56570,15 @@ "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^5.1.1" } + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } } } }, @@ -55810,6 +56596,16 @@ "zwitch": "^2.0.0" }, "dependencies": { + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, "unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -55819,13 +56615,41 @@ "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^5.1.1" } + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + }, + "zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" } } }, "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + }, + "mdast-util-toc": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-5.1.0.tgz", + "integrity": "sha512-csimbRIVkiqc+PpFeKDGQ/Ck2N4f9FYH3zzBMMJzcxoKL8m+cM0n94xXm0I9eaxHnKdY9n145SGTdyJC7i273g==", + "requires": { + "@types/mdast": "^3.0.3", + "@types/unist": "^2.0.3", + "extend": "^3.0.2", + "github-slugger": "^1.2.1", + "mdast-util-to-string": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit": "^2.0.0" + } }, "mdurl": { "version": "1.0.1", @@ -55871,7 +56695,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "devOptional": true, "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -56480,7 +57303,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "devOptional": true, "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -56489,8 +57311,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -56542,14 +57363,12 @@ "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "devOptional": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "devOptional": true + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "minimatch": { "version": "3.1.2", @@ -56614,7 +57433,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "devOptional": true, "requires": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -56655,12 +57473,6 @@ "minimist": "^1.2.6" } }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "peer": true - }, "mobx": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.7.0.tgz", @@ -56690,7 +57502,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "devOptional": true, "requires": { "aproba": "^1.1.1", "copy-concurrently": "^1.0.0", @@ -56704,7 +57515,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, "requires": { "glob": "^7.1.3" } @@ -56730,7 +57540,6 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, "optional": true }, "nanoclone": { @@ -56747,7 +57556,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "devOptional": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -56766,7 +57574,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "devOptional": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -56776,7 +57583,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "devOptional": true, "requires": { "is-plain-object": "^2.0.4" } @@ -56803,8 +57609,7 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "devOptional": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "nested-error-stacks": { "version": "2.1.1", @@ -56852,40 +57657,19 @@ "resolved": "https://registry.npmjs.org/next-compose-plugins/-/next-compose-plugins-2.2.1.tgz", "integrity": "sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg==" }, - "next-mdx-remote": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-3.0.8.tgz", - "integrity": "sha512-WFSxt0crxG5PN/0WvaunzxzqV3wh3dPBZyhkclxwyQfLSRKzsNSArzot/4gYTOOZ/GtyRfNjbI/HtDsW2S4fqQ==", + "next-mdx": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/next-mdx/-/next-mdx-0.6.2.tgz", + "integrity": "sha512-3eX9PrzEZgLBiG1oA6Ig09Ou55WshF8hFtMZJqDQQkWGrmNfk31Rdu4c1apkkkl+Ir+hCHk7OFLZUO6PBCQTGA==", "requires": { - "@mdx-js/mdx": "^1.6.22", "@mdx-js/react": "^1.6.22", - "esbuild": "^0.12.9", - "pkg-dir": "^5.0.0" + "fast-glob": "^3.2.5", + "gray-matter": "^4.0.2", + "hasha": "^5.2.2", + "next-mdx-remote": "^2.1.3", + "node-cache": "^5.1.2" }, "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, "@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", @@ -56933,6 +57717,31 @@ "unified": "9.2.0", "unist-builder": "2.0.3", "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + } } }, "@mdx-js/react": { @@ -56946,6 +57755,11 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, "mdast-util-to-hast": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", @@ -56961,6 +57775,19 @@ "unist-util-visit": "^2.0.0" } }, + "next-mdx-remote": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-2.1.4.tgz", + "integrity": "sha512-HHJasFVgPGjWXW3tWC37NCvHcQUOjJgVUMdwxgVbshwgtDLrGmupNkist/iamDLlvVibU52B9rqM9VAWofq7cA==", + "requires": { + "@babel/core": "^7.12.10", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@mdx-js/mdx": "^1.6.22", + "@mdx-js/react": "^1.6.22" + } + }, "remark-mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", @@ -56974,6 +57801,31 @@ "is-alphabetical": "1.0.4", "remark-parse": "8.0.3", "unified": "9.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + } } }, "remark-parse": { @@ -57032,11 +57884,6 @@ "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - }, "unist-util-remove-position": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", @@ -57080,6 +57927,48 @@ } } }, + "next-mdx-remote": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-4.2.0.tgz", + "integrity": "sha512-X5RhD7f7b78pH2abbuusObSGgII5l54OdusS/2iXljN7WN1cel6ToLlZeCZcyxx9cR4wmBGQYGongIttDYNmAA==", + "requires": { + "@mdx-js/mdx": "^2.0.0", + "@mdx-js/react": "^2.0.0", + "vfile": "^5.3.0", + "vfile-matter": "^3.0.1" + } + }, + "next-mdx-toc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/next-mdx-toc/-/next-mdx-toc-0.1.3.tgz", + "integrity": "sha512-GJU62GSlHWOdbRUaBAjg6N398nt3+ZLHuV1gXPXup47Z/FBdsKRGSDVg5q23RVzmG0zwF5jLcxuYnuLXtUWPEA==", + "requires": { + "mdast-util-toc": "^5.1.0", + "next-mdx": "^0.6.2", + "remark": "^13.0.0", + "unist-util-visit": "^2.0.3" + }, + "dependencies": { + "remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "requires": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + } + } + } + }, + "next-plugin-yaml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/next-plugin-yaml/-/next-plugin-yaml-1.0.1.tgz", + "integrity": "sha512-k13wbpN33wTgrgWUBiXPtObXO94JOEiwvYKJ3X0JrBz2yaW24EfNaVqHwA0dwhsn9PyPIKhPhgsu3bhJsNs+cQ==", + "requires": { + "js-yaml-loader": "^1.2.2" + } + }, "next-seo": { "version": "5.14.1", "resolved": "https://registry.npmjs.org/next-seo/-/next-seo-5.14.1.tgz", @@ -57122,6 +58011,14 @@ "tslib": "^2.0.3" } }, + "node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "requires": { + "clone": "2.x" + } + }, "node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", @@ -57175,7 +58072,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "devOptional": true, "requires": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -57205,8 +58101,7 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "devOptional": true + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" } } }, @@ -57433,7 +58328,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "devOptional": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -57444,7 +58338,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "devOptional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -57453,7 +58346,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" } @@ -57462,7 +58354,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" } @@ -57471,7 +58362,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "devOptional": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -57481,8 +58371,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "devOptional": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -57490,7 +58379,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -57526,7 +58414,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "devOptional": true, "requires": { "isobject": "^3.0.0" } @@ -57701,8 +58588,7 @@ "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "devOptional": true + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" }, "os-homedir": { "version": "1.0.2", @@ -57763,6 +58649,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -57771,6 +58658,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "requires": { "p-limit": "^3.0.2" } @@ -57804,8 +58692,7 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "devOptional": true + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "packet-reader": { "version": "1.0.0", @@ -57815,8 +58702,7 @@ "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "devOptional": true + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "papaparse": { "version": "5.3.2", @@ -57827,7 +58713,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "devOptional": true, "requires": { "cyclist": "^1.0.1", "inherits": "^2.0.3", @@ -57856,7 +58741,6 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "devOptional": true, "requires": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -57876,20 +58760,13 @@ "is-alphanumerical": "^1.0.0", "is-decimal": "^1.0.0", "is-hexadecimal": "^1.0.0" - }, - "dependencies": { - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - } } }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, + "devOptional": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -57934,25 +58811,24 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "devOptional": true + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" }, "path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "devOptional": true + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true + "devOptional": true }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -57983,7 +58859,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "devOptional": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -57992,12 +58867,6 @@ "sha.js": "^2.4.8" } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "peer": true - }, "periscopic": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.0.4.tgz", @@ -58091,8 +58960,7 @@ "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "devOptional": true + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, "pinkie": { "version": "2.0.4", @@ -58121,6 +58989,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, "requires": { "find-up": "^5.0.0" } @@ -58146,8 +59015,7 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "devOptional": true + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==" }, "postcss": { "version": "8.4.19", @@ -58184,6 +59052,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58212,6 +59086,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58241,6 +59121,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58269,6 +59155,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58298,6 +59190,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58326,6 +59224,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58353,6 +59257,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58381,6 +59291,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58426,6 +59342,12 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58471,6 +59393,12 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58499,6 +59427,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58527,6 +59461,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58554,6 +59494,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58581,6 +59527,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58608,6 +59560,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58635,6 +59593,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58662,6 +59626,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58690,6 +59660,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58727,6 +59703,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58764,6 +59746,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58824,6 +59812,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58851,6 +59845,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58878,6 +59878,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58908,6 +59914,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58936,6 +59948,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58964,6 +59982,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -58999,6 +60023,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -59026,6 +60056,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -59053,6 +60089,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -59081,6 +60123,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -59159,6 +60207,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -59204,6 +60258,12 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -59231,6 +60291,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -59259,6 +60325,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -59287,6 +60359,12 @@ "picocolors": "^0.2.1", "source-map": "^0.6.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -59415,8 +60493,7 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "devOptional": true + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, "process-nextick-args": { "version": "2.0.1", @@ -59431,8 +60508,7 @@ "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "devOptional": true + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" }, "promise.allsettled": { "version": "1.0.6", @@ -59491,9 +60567,12 @@ "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==" }, "property-information": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", - "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "requires": { + "xtend": "^4.0.0" + } }, "proxy-addr": { "version": "2.0.7", @@ -59518,8 +60597,7 @@ "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "devOptional": true + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" }, "psl": { "version": "1.9.0", @@ -59530,7 +60608,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "devOptional": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -59543,8 +60620,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "devOptional": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -59561,7 +60637,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "devOptional": true, "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -59572,7 +60647,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "devOptional": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -59585,34 +60659,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "puppeteer": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-16.2.0.tgz", - "integrity": "sha512-7Au6iC98rS6WEAD110V4Bxd0iIbqoFtzz9XzkG1BSofidS1VAJ881E1+GFR7Xn2Yea0hbj8n0ErzRyseMp1Ctg==", - "peer": true, - "requires": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1019158", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.8.1" - }, - "dependencies": { - "ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "peer": true, - "requires": {} - } - } - }, "qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -59625,14 +60671,12 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "devOptional": true + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "devOptional": true + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==" }, "querystringify": { "version": "2.2.0", @@ -59681,7 +60725,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "devOptional": true, "requires": { "safe-buffer": "^5.1.0" } @@ -59690,7 +60733,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "devOptional": true, "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -60023,6 +61065,16 @@ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" }, + "comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==" + }, + "hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==" + }, "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -60033,6 +61085,11 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" }, + "property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==" + }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -60048,6 +61105,22 @@ "unified": "^10.0.0" } }, + "remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "requires": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + } + }, + "space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==" + }, "trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -60067,6 +61140,11 @@ "vfile": "^5.0.0" } }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, "unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -60076,6 +61154,15 @@ "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^5.1.1" } + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } } } }, @@ -60630,14 +61717,12 @@ "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, "requires": { "regenerate": "^1.4.2" } @@ -60651,7 +61736,6 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, "requires": { "@babel/runtime": "^7.8.4" } @@ -60660,7 +61744,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "devOptional": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -60670,7 +61753,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "devOptional": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -60680,7 +61762,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "devOptional": true, "requires": { "is-plain-object": "^2.0.4" } @@ -60706,7 +61787,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "dev": true, "requires": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", @@ -60719,14 +61799,12 @@ "regjsgen": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, "requires": { "jsesc": "~0.5.0" }, @@ -60734,8 +61812,7 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, @@ -60775,6 +61852,11 @@ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" }, + "github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + }, "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -60804,6 +61886,11 @@ "vfile": "^5.0.0" } }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, "unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -60813,6 +61900,15 @@ "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^5.1.1" } + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } } } }, @@ -60904,6 +62000,11 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, "unified": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", @@ -60946,6 +62047,78 @@ } } }, + "remark-autolink-headings": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/remark-autolink-headings/-/remark-autolink-headings-7.0.1.tgz", + "integrity": "sha512-a1BIwoJ0cSnX+sPp5u3AFULBFWHGYBt57Fo4a+7IlGiJOQxs8b7uYAE5Iu26Ocl7Y5cvinZy3FaGVruLCKg6vA==", + "requires": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "extend": "^3.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + } + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } + } + }, "remark-external-links": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", @@ -60957,14 +62130,6 @@ "mdast-util-definitions": "^4.0.0", "space-separated-tokens": "^1.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "dev": true - } } }, "remark-footnotes": { @@ -61096,11 +62261,6 @@ "unist-util-stringify-position": "^2.0.0" } }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" - }, "micromark": { "version": "2.11.4", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", @@ -61137,14 +62297,51 @@ } }, "remark-rehype": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", - "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-8.1.0.tgz", + "integrity": "sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==", "requires": { - "@types/hast": "^2.0.0", + "mdast-util-to-hast": "^10.2.0" + }, + "dependencies": { + "mdast-util-to-hast": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz", + "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + }, + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" + } + } + }, + "remark-slug": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-7.0.1.tgz", + "integrity": "sha512-NRvYePr69LdeCkEGwL4KYAmq7kdWG5rEavCXMzUR4qndLoXHJAOLSUmPY6Qm4NJfKix7/EmgObyVaYivONAFhg==", + "requires": { + "@types/hast": "^2.3.2", "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" }, "dependencies": { "bail": { @@ -61162,6 +62359,11 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" }, + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" + }, "trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -61180,31 +62382,30 @@ "trough": "^2.0.0", "vfile": "^5.0.0" } - } - } - }, - "remark-slug": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", - "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", - "dev": true, - "requires": { - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^1.0.0", - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "dev": true }, - "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + } + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } } } }, @@ -61241,16 +62442,6 @@ "repeat-string": "^1.0.0", "zwitch": "^1.0.0" } - }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" } } }, @@ -61282,7 +62473,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true + "devOptional": true }, "remove-trailing-slash": { "version": "0.1.1", @@ -61388,8 +62579,7 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "devOptional": true + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" }, "resolve.exports": { "version": "1.1.0", @@ -61405,8 +62595,7 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "devOptional": true + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "reusify": { "version": "1.0.4", @@ -61425,7 +62614,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "devOptional": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -61454,7 +62642,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "devOptional": true, "requires": { "aproba": "^1.1.1" } @@ -61481,7 +62668,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "devOptional": true, "requires": { "ret": "~0.1.10" } @@ -61905,7 +63091,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "devOptional": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -61916,8 +63101,7 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "devOptional": true + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "setprototypeof": { "version": "1.2.0", @@ -61929,7 +63113,6 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "devOptional": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -61966,6 +63149,16 @@ "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", "dev": true }, + "shiki": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", + "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -62016,7 +63209,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "devOptional": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -62032,7 +63224,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, "requires": { "ms": "2.0.0" } @@ -62041,7 +63232,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "devOptional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -62050,7 +63240,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" }, @@ -62059,7 +63248,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -62070,7 +63258,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" }, @@ -62079,7 +63266,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -62090,7 +63276,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "devOptional": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -62100,20 +63285,17 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "devOptional": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "devOptional": true + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" } } }, @@ -62121,7 +63303,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "devOptional": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -62132,7 +63313,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "devOptional": true, "requires": { "is-descriptor": "^1.0.0" } @@ -62143,7 +63323,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "devOptional": true, "requires": { "kind-of": "^3.2.0" }, @@ -62152,7 +63331,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -62162,13 +63340,12 @@ "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "devOptional": true + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" }, "source-map-js": { "version": "1.0.2", @@ -62179,7 +63356,6 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "devOptional": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -62192,22 +63368,27 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "devOptional": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "devOptional": true + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" }, "space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==" + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" }, "spdx-correct": { "version": "3.1.1", @@ -62245,7 +63426,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "devOptional": true, "requires": { "extend-shallow": "^3.0.0" }, @@ -62254,7 +63434,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "devOptional": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -62264,7 +63443,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "devOptional": true, "requires": { "is-plain-object": "^2.0.4" } @@ -62348,7 +63526,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "devOptional": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -62358,7 +63535,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "devOptional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -62367,7 +63543,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" }, @@ -62376,7 +63551,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -62387,7 +63561,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" }, @@ -62396,7 +63569,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -62407,7 +63579,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "devOptional": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -62417,8 +63588,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "devOptional": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -62454,7 +63624,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "devOptional": true, "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" @@ -62464,7 +63633,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "devOptional": true, "requires": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -62474,7 +63642,6 @@ "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "devOptional": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -62486,8 +63653,7 @@ "stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "devOptional": true + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, "string_decoder": { "version": "1.1.1", @@ -62721,7 +63887,7 @@ "markdown-table": "=2.0.0", "mobx": "^6.3.2", "mobx-react-lite": "^3.2.0", - "next": "12.0.9", + "next": "12.1.0", "next-compose-plugins": "^2.2.1", "next-transpile-modules": "^9.0.0", "openapi-types": "^9.1.0", @@ -62777,77 +63943,6 @@ "webpack-bundle-analyzer": "4.3.0" } }, - "@next/env": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.9.tgz", - "integrity": "sha512-oBlkyDop0Stf7MPIzETGv5r0YT/G/weBrknoPOUTaa5qwOeGjuy6gsOVc/SBtrBkOoBmRpD+fFhQJPvmo1mS+g==" - }, - "@next/swc-android-arm64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.9.tgz", - "integrity": "sha512-aVqgsEn5plmUH2X58sjzhHsH/6majucWTMaaBEs7hHO2+GCwCZc7zaLH4XCBMKPES9Yaja8/pYUbvZQE9DqgFw==", - "optional": true - }, - "@next/swc-darwin-arm64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.9.tgz", - "integrity": "sha512-uAgRKm4a2nVdyBiPPJokvmDD1saugOvxljz9ld2ih0CCg5S9vBhqaj3kPGCQBj9hSu3q+Lng2CHnQqG3ga1jzA==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.9.tgz", - "integrity": "sha512-fDOs2lZIyrAdU18IxMA5orBPn9qLbOdu55gXSTNZOhyRJ8ugtbUAejsK7OL0boJy0CCHPAdVRXm01Mwk8tZ9RQ==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.9.tgz", - "integrity": "sha512-/ni0p9DBvATUML9RQ1ycQuf05uOYKdzA6iI8+eRsARjpGbFVUFbge7XPzlj9g2Q9YWgoN8CSjFGnKRlyky5uHA==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.9.tgz", - "integrity": "sha512-AphxilJDf95rUxJDHgM9Ww1DaYXZWqTvoKwXeej/0SgSvICcRZrLaFDrkojdXz0Rxr4igX2OdYR1S4/Hj1jWOQ==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.9.tgz", - "integrity": "sha512-K5jbvNNzF3mRjWmPdxP5Bg87i7FHivfBj/L0KJlxpkLSC8sffBJDmB6jtMnI7wiPj9J6vmLkbGtSosln78xAlQ==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.9.tgz", - "integrity": "sha512-bJZ9bkMkQzsY+UyWezEZ77GWQ4TzwKeXdayX3U3+aEkL8k5C6eKBXlidWdrhu0teLmaUXIyWerWrLnJzwGXdfw==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.9.tgz", - "integrity": "sha512-SR9p0R+v1T32DTXPVAXZw31pmJAkSDotC6Afy+mfC0xrEL3pp95R8sGXYAAUCEPkQp0MEeUOVy2LrToe92X7hQ==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.9.tgz", - "integrity": "sha512-mzQ1A8vfHhJrvEy5KJZGZWEByXthyKfWofvFaf+oo/5nJl/0Bz1ODP2ajSmbLG++77Eo2AROgbm9pkW1ucvG2A==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.9.tgz", - "integrity": "sha512-MpD2vj1zjo1u3J3wiz3pEKse19Etz+P0GL6XfQkB/9a84vJQ1JWMaWBjmIdivzZv718Il2pRSSx8hymwPfguYQ==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.9.tgz", - "integrity": "sha512-1c/sxp/4Qz4F6rCxiYqAnrmghCOFt5hHZ9Kd+rXFW5Mqev4C4XDOUMHdBH55HgnJZqngYhOE0r/XNkCtsIojig==", - "optional": true - }, "@tailwindcss/typography": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.8.tgz", @@ -62980,41 +64075,6 @@ "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" }, - "next": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/next/-/next-12.0.9.tgz", - "integrity": "sha512-omfYqoR/DvbdOIJ6SS1unKJ4mGIxUPs0RPa7wr/Mft22OCKgJhuG+aI9KFYi5ZJBwoFQk1vqaMKpWz5qr+dN0Q==", - "requires": { - "@next/env": "12.0.9", - "@next/swc-android-arm64": "12.0.9", - "@next/swc-darwin-arm64": "12.0.9", - "@next/swc-darwin-x64": "12.0.9", - "@next/swc-linux-arm-gnueabihf": "12.0.9", - "@next/swc-linux-arm64-gnu": "12.0.9", - "@next/swc-linux-arm64-musl": "12.0.9", - "@next/swc-linux-x64-gnu": "12.0.9", - "@next/swc-linux-x64-musl": "12.0.9", - "@next/swc-win32-arm64-msvc": "12.0.9", - "@next/swc-win32-ia32-msvc": "12.0.9", - "@next/swc-win32-x64-msvc": "12.0.9", - "caniuse-lite": "^1.0.30001283", - "postcss": "8.4.5", - "styled-jsx": "5.0.0", - "use-subscription": "1.5.1" - }, - "dependencies": { - "postcss": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", - "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", - "requires": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" - } - } - } - }, "openapi-types": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-9.3.1.tgz", @@ -63174,6 +64234,8 @@ }, "ajv": { "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", @@ -63364,15 +64426,14 @@ } }, "tailwindcss-radix": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-2.6.1.tgz", - "integrity": "sha512-ejh4BHkn/3g349l+JiEW6I4//uclU4nllEqnOK3/8zpORscIk9WbjLyYR2UzqwVRjjzgd72I/hMDJZm3+XO48w==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-1.6.0.tgz", + "integrity": "sha512-5oBgGCVGsITMiUVlc6Euj4kt03l8htLJxVT9AXbkFxcJiXLtQxJriFq/8R+3s63OKit/ynCVdkqvlnW6H7iG1g==" }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "devOptional": true + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { "version": "6.1.12", @@ -63396,52 +64457,6 @@ } } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "peer": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "peer": true - } - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "peer": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "telejson": { "version": "6.0.8", "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz", @@ -63480,7 +64495,6 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "devOptional": true, "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -63490,8 +64504,12 @@ "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -63603,6 +64621,12 @@ "find-up": "^4.0.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, "terser": { "version": "5.15.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", @@ -63639,12 +64663,6 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "peer": true - }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -63658,7 +64676,6 @@ "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "devOptional": true, "requires": { "setimmediate": "^1.0.4" } @@ -63687,8 +64704,7 @@ "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "devOptional": true + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" }, "to-fast-properties": { "version": "2.0.0", @@ -63717,7 +64733,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "devOptional": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -63729,7 +64744,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "devOptional": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -63739,7 +64753,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "devOptional": true, "requires": { "is-plain-object": "^2.0.4" } @@ -64016,126 +65029,61 @@ "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "devOptional": true + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" }, "turbo": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.4.7.tgz", - "integrity": "sha512-oIk7PAISPidDOkTM5M+ydEe5GDQ/+TahDgIbaYKeAAy2Qpmur4s0HybSDWHIdxLqI96OPD/mOKymRLrjh3Mdhg==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.6.3.tgz", + "integrity": "sha512-FtfhJLmEEtHveGxW4Ye/QuY85AnZ2ZNVgkTBswoap7UMHB1+oI4diHPNyqrQLG4K1UFtCkjOlVoLsllUh/9QRw==", "dev": true, "requires": { - "turbo-android-arm64": "1.4.7", - "turbo-darwin-64": "1.4.7", - "turbo-darwin-arm64": "1.4.7", - "turbo-freebsd-64": "1.4.7", - "turbo-freebsd-arm64": "1.4.7", - "turbo-linux-32": "1.4.7", - "turbo-linux-64": "1.4.7", - "turbo-linux-arm": "1.4.7", - "turbo-linux-arm64": "1.4.7", - "turbo-linux-mips64le": "1.4.7", - "turbo-linux-ppc64le": "1.4.7", - "turbo-windows-32": "1.4.7", - "turbo-windows-64": "1.4.7", - "turbo-windows-arm64": "1.4.7" + "turbo-darwin-64": "1.6.3", + "turbo-darwin-arm64": "1.6.3", + "turbo-linux-64": "1.6.3", + "turbo-linux-arm64": "1.6.3", + "turbo-windows-64": "1.6.3", + "turbo-windows-arm64": "1.6.3" } }, - "turbo-android-arm64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-android-arm64/-/turbo-android-arm64-1.4.7.tgz", - "integrity": "sha512-BtWtH8e8w1GhtYpGQmkcDS/AUzVZhQ4ZZN+qtUFei1wZD7VAdtJ9Wcsfi3WD+mXA6vtpIpRJVfQMcShr8l8ErA==", - "dev": true, - "optional": true - }, "turbo-darwin-64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.4.7.tgz", - "integrity": "sha512-bMvZaAz5diec9feZ0XpQosYI8U0kiOQM2tj2sv0Y2WZbe227wodVMCQMyUowmcotO8nr6NF76Xo5E+H+dnY6LQ==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.6.3.tgz", + "integrity": "sha512-QmDIX0Yh1wYQl0bUS0gGWwNxpJwrzZU2GIAYt3aOKoirWA2ecnyb3R6ludcS1znfNV2MfunP+l8E3ncxUHwtjA==", "dev": true, "optional": true }, "turbo-darwin-arm64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.4.7.tgz", - "integrity": "sha512-AyfxYfKgh1EigQKjypbnDoMLuy4e/n/go+KYiWKKIpOaWXWLBokrBWzYN/aI3NMDRUJWK5ExdlWI9Nleelq8uQ==", - "dev": true, - "optional": true - }, - "turbo-freebsd-64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-freebsd-64/-/turbo-freebsd-64-1.4.7.tgz", - "integrity": "sha512-T5/osfbCh0rL53MFS5byFFfsR3vPMHIKIJ4fMMCNkoHsmFj2R0Pv53nqhEItogt0FJwCDHPyt7oBqO83H/AWQQ==", - "dev": true, - "optional": true - }, - "turbo-freebsd-arm64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-freebsd-arm64/-/turbo-freebsd-arm64-1.4.7.tgz", - "integrity": "sha512-PL+SaO78AUCas+YKj01UiS2rpmGcxz8XPmLdFWmq6PYjPX6GL5UBAc3pkBphIm0aTLZtsikoEul+JrwAuAy6UA==", - "dev": true, - "optional": true - }, - "turbo-linux-32": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-32/-/turbo-linux-32-1.4.7.tgz", - "integrity": "sha512-dK94UwDzySMALoQtjBVVPbWJZP6xw3yHGuytM3q5p4kfMZPSA+rgNBn5T5Af2Rc7jxlLAsu5ODJ0SgIbWSF5Hg==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.6.3.tgz", + "integrity": "sha512-75DXhFpwE7CinBbtxTxH08EcWrxYSPFow3NaeFwsG8aymkWXF+U2aukYHJA6I12n9/dGqf7yRXzkF0S/9UtdyQ==", "dev": true, "optional": true }, "turbo-linux-64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.4.7.tgz", - "integrity": "sha512-F6IM23zgTYo9gYJaNp17gVvQBt0hMIvz52OF91DpPYSLpV2h9OSlzPJ3j5TGaWueS/bc/YCV23+VojXX/MauGQ==", - "dev": true, - "optional": true - }, - "turbo-linux-arm": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-arm/-/turbo-linux-arm-1.4.7.tgz", - "integrity": "sha512-FTh4itdMNZ7IxGKknFnQ6iPO9vGGKqyySkCYLR01lnw6BTnKL9KuM9XUCBRyn7dNmHhAnqu1ZtVsBkH7CE7DEw==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.6.3.tgz", + "integrity": "sha512-O9uc6J0yoRPWdPg9THRQi69K6E2iZ98cRHNvus05lZbcPzZTxJYkYGb5iagCmCW/pq6fL4T4oLWAd6evg2LGQA==", "dev": true, "optional": true }, "turbo-linux-arm64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.4.7.tgz", - "integrity": "sha512-kFe5jzj3FoY6jAEwyNEswndj1t/fPl0qyxfcQv6aNPz7Nb2Lh7mY/EEse+CG3ydIo5RZKba7ppQoBSDmHx7JsA==", - "dev": true, - "optional": true - }, - "turbo-linux-mips64le": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-mips64le/-/turbo-linux-mips64le-1.4.7.tgz", - "integrity": "sha512-756nG8dnPQVcnl9s70S4NQ43aJjpsnc2h0toktPO+9u2ayv9XTbIPvZLFsS55bDeYhodDGvxoB96W6Xnx01hyQ==", - "dev": true, - "optional": true - }, - "turbo-linux-ppc64le": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-linux-ppc64le/-/turbo-linux-ppc64le-1.4.7.tgz", - "integrity": "sha512-VS2ofGN/XsafNGJdZ21UguURHb7KRG879yWLj59hO1d+0xXXQbx7ljsmEPOhiE4UjEdx4Ur6P44BhztTgDx9Og==", - "dev": true, - "optional": true - }, - "turbo-windows-32": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-windows-32/-/turbo-windows-32-1.4.7.tgz", - "integrity": "sha512-M5GkZdA0CbJAOcR8SScM63CBV+NtX7qjhoNNOl0F99nGJ+rO3dH71CcM/rbhlz9SQzKQoX8rcuwZHe4r2HZAug==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.6.3.tgz", + "integrity": "sha512-dCy667qqEtZIhulsRTe8hhWQNCJO0i20uHXv7KjLHuFZGCeMbWxB8rsneRoY+blf8+QNqGuXQJxak7ayjHLxiA==", "dev": true, "optional": true }, "turbo-windows-64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.4.7.tgz", - "integrity": "sha512-ftZUtZ1BX1vi8MbxKr+a7riIkhwvGnNTtWGprVu+aDJ8PnV+lNqbkrLJGvKP7Cn22hGTfzcjNNPcJ5PBZpQEQw==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.6.3.tgz", + "integrity": "sha512-lKRqwL3mrVF09b9KySSaOwetehmGknV9EcQTF7d2dxngGYYX1WXoQLjFP9YYH8ZV07oPm+RUOAKSCQuDuMNhiA==", "dev": true, "optional": true }, "turbo-windows-arm64": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.4.7.tgz", - "integrity": "sha512-mZ79XeJFfaeVKdBV3w0eoGaqAxFnwxrme0jZtSWemAbeDSCF/13wcbLGwtq0+Lu0LxEGweeQ5AqsCIc9t9i6sA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.6.3.tgz", + "integrity": "sha512-BXY1sDPEA1DgPwuENvDCD8B7Hb0toscjus941WpL8CVd10hg9pk/MWn9CNgwDO5Q9ks0mw+liDv2EMnleEjeNA==", "dev": true, "optional": true }, @@ -64316,18 +65264,8 @@ "@radix-ui/react-use-callback-ref": "0.1.0" } }, - "@tailwindcss/forms": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.1.tgz", - "integrity": "sha512-gS9xjCmJjUBz/eP12QlENPLnf0tCx68oYE3mri0GMP5jdtVwLbGUNSRpjsp6NzLAZzZy3ueOwrcqB78Ax6Z84A==", - "requires": { - "mini-svg-data-uri": "^1.2.3" - } - }, "@tailwindcss/typography": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.8.tgz", - "integrity": "sha512-xGQEp8KXN8Sd8m6R4xYmwxghmswrd0cPnNI2Lc6fmrC3OojysTBJJGSIVwPV56q4t6THFUK3HJ0EaWwpglSxWw==", + "version": "0.5.7", "requires": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", @@ -64335,19 +65273,26 @@ "postcss-selector-parser": "6.0.10" } }, - "tailwindcss-radix": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-1.6.0.tgz", - "integrity": "sha512-5oBgGCVGsITMiUVlc6Euj4kt03l8htLJxVT9AXbkFxcJiXLtQxJriFq/8R+3s63OKit/ynCVdkqvlnW6H7iG1g==" + "@types/react": { + "version": "17.0.52", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } }, "typescript": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", - "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", "dev": true } } }, + "un-eval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/un-eval/-/un-eval-1.2.0.tgz", + "integrity": "sha512-Wlj/pum6dQtGTPD/lclDtoVPkSfpjPfy1dwnnKw/sZP5DpBH9fLhBgQfsqNhe5/gS1D+vkZUuB771NRMUPA5CA==" + }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -64359,28 +65304,6 @@ "which-boxed-primitive": "^1.0.2" } }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "peer": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, "unfetch": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", @@ -64399,14 +65322,12 @@ "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" }, "unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -64415,14 +65336,12 @@ "unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" }, "unified": { "version": "9.2.2", @@ -64442,6 +65361,11 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, "unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", @@ -64510,7 +65434,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "devOptional": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -64528,7 +65451,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "devOptional": true, "requires": { "unique-slug": "^2.0.0" } @@ -64537,7 +65459,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "devOptional": true, "requires": { "imurmurhash": "^0.1.4" } @@ -64556,9 +65477,9 @@ "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==" }, "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" }, "unist-util-map": { "version": "2.0.1", @@ -64570,12 +65491,9 @@ } }, "unist-util-position": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", - "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", - "requires": { - "@types/unist": "^2.0.0" - } + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" }, "unist-util-position-from-estree": { "version": "1.1.1", @@ -64591,13 +65509,6 @@ "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", "requires": { "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" - } } }, "unist-util-remove-position": { @@ -64609,6 +65520,11 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, "unist-util-visit": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", @@ -64618,6 +65534,15 @@ "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^5.1.1" } + }, + "unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } } } }, @@ -64637,31 +65562,15 @@ "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "unist-util-visit-parents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", - "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "requires": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "unist-util-is": "^4.0.0" } }, "universal-github-app-jwt": { @@ -64694,7 +65603,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "devOptional": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -64704,7 +65612,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "devOptional": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -64715,7 +65622,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "devOptional": true, "requires": { "isarray": "1.0.0" } @@ -64725,14 +65631,12 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "devOptional": true + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "devOptional": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" } } }, @@ -64750,7 +65654,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, "optional": true }, "update-browserslist-db": { @@ -64773,14 +65676,12 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "devOptional": true + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "devOptional": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -64789,8 +65690,7 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "devOptional": true + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" } } }, @@ -64817,8 +65717,7 @@ "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "devOptional": true + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "use-callback-ref": { "version": "1.3.0", @@ -64881,7 +65780,6 @@ "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "devOptional": true, "requires": { "inherits": "2.0.3" }, @@ -64889,8 +65787,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "devOptional": true + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" } } }, @@ -64985,14 +65882,6 @@ "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } } }, "validate-npm-package-license": { @@ -65072,8 +65961,17 @@ "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "devOptional": true + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "vscode-oniguruma": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", + "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==" + }, + "vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==" }, "w3c-hr-time": { "version": "1.0.2", @@ -65122,7 +66020,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, "optional": true, "requires": { "chokidar": "^2.1.8" @@ -65132,7 +66029,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, "optional": true, "requires": { "micromatch": "^3.1.4", @@ -65143,7 +66039,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" @@ -65155,14 +66050,12 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, "optional": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "optional": true, "requires": { "arr-flatten": "^1.1.0", @@ -65181,7 +66074,6 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, "optional": true, "requires": { "anymatch": "^2.0.0", @@ -65202,7 +66094,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, "optional": true, "requires": { "extend-shallow": "^2.0.1", @@ -65215,7 +66106,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, "optional": true, "requires": { "bindings": "^1.5.0", @@ -65226,7 +66116,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, "optional": true, "requires": { "is-glob": "^3.1.0", @@ -65237,7 +66126,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, "optional": true, "requires": { "is-extglob": "^2.1.0" @@ -65249,7 +66137,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, "optional": true, "requires": { "binary-extensions": "^1.0.0" @@ -65259,7 +66146,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "optional": true, "requires": { "is-plain-object": "^2.0.4" @@ -65269,7 +66155,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" @@ -65279,7 +66164,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, "optional": true, "requires": { "is-buffer": "^1.1.5" @@ -65291,7 +66175,6 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "optional": true, "requires": { "arr-diff": "^4.0.0", @@ -65313,7 +66196,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, "optional": true, "requires": { "assign-symbols": "^1.0.0", @@ -65326,7 +66208,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, "optional": true, "requires": { "graceful-fs": "^4.1.11", @@ -65338,7 +66219,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, "optional": true, "requires": { "is-number": "^3.0.0", @@ -65361,7 +66241,6 @@ "version": "4.46.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "devOptional": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", @@ -65391,14 +66270,12 @@ "acorn": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "devOptional": true + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -65410,7 +66287,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "devOptional": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -65428,7 +66304,6 @@ "version": "12.0.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "devOptional": true, "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -65450,14 +66325,12 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "devOptional": true + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "devOptional": true, "requires": { "graceful-fs": "^4.1.2", "memory-fs": "^0.5.0", @@ -65468,7 +66341,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "devOptional": true, "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -65480,7 +66352,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "devOptional": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -65489,14 +66360,12 @@ "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "devOptional": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "devOptional": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -65508,7 +66377,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "devOptional": true, "requires": { "is-plain-object": "^2.0.4" } @@ -65517,7 +66385,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "devOptional": true, "requires": { "kind-of": "^3.0.2" }, @@ -65526,7 +66393,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "devOptional": true, "requires": { "is-buffer": "^1.1.5" } @@ -65536,14 +66402,12 @@ "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "devOptional": true + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==" }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "devOptional": true, "requires": { "minimist": "^1.2.0" } @@ -65552,7 +66416,6 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "devOptional": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -65563,7 +66426,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "devOptional": true, "requires": { "yallist": "^3.0.2" } @@ -65572,7 +66434,6 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "devOptional": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -65593,7 +66454,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "devOptional": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -65605,7 +66465,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, "requires": { "glob": "^7.1.3" } @@ -65614,7 +66473,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "devOptional": true, "requires": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -65625,16 +66483,19 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "devOptional": true, "requires": { "randombytes": "^2.1.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "ssri": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "devOptional": true, "requires": { "figgy-pudding": "^3.5.1" } @@ -65643,7 +66504,6 @@ "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "devOptional": true, "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", @@ -65660,7 +66520,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "devOptional": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -65670,7 +66529,6 @@ "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "devOptional": true, "requires": { "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", @@ -65681,14 +66539,12 @@ "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "devOptional": true + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "devOptional": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, @@ -65798,10 +66654,16 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "devOptional": true, "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "webpack-virtual-modules": { @@ -65953,7 +66815,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "devOptional": true, "requires": { "errno": "~0.1.7" } @@ -66006,10 +66867,10 @@ "version": "file:apps/www", "requires": { "@heroicons/react": "^1.0.6", - "@mdx-js/loader": "^1.6.22", - "@mdx-js/react": "^1.6.22", + "@mdx-js/loader": "^2.1.5", + "@mdx-js/react": "^2.1.5", "@next/bundle-analyzer": "^13.0.0", - "@next/mdx": "^10.0.7", + "@next/mdx": "^12.3.2", "@supabase/auth-ui-react": "^0.1.6", "@supabase/supabase-js": "^2.0.0", "@tailwindcss/typography": "^0.5.7", @@ -66042,6 +66903,7 @@ "next-seo": "^4.20.0", "next-transpile-modules": "^9.0.0", "nodemailer": "^6.7.3", + "octokit": "^2.0.10", "parse-numeric-range": "^1.3.0", "postcss": "^8.4.18", "postcss-preset-env": "^6.7.0", @@ -66083,18 +66945,6 @@ "chalk": "^3.0.0" } }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, - "@next/mdx": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-10.2.3.tgz", - "integrity": "sha512-hseekptFqOCxLbdaNDS/yelaG2Q2uaNDilnRjq8Uv/LWHuZ9F2cp7ndwTolW9acJsbDedamKRMgdw4V2Fz0pUA==", - "requires": {} - }, "@tailwindcss/typography": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.8.tgz", @@ -66137,6 +66987,7 @@ "version": "17.0.11", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz", "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==", + "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -66153,28 +67004,6 @@ "supports-color": "^7.1.0" } }, - "next-mdx-remote": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-4.2.0.tgz", - "integrity": "sha512-X5RhD7f7b78pH2abbuusObSGgII5l54OdusS/2iXljN7WN1cel6ToLlZeCZcyxx9cR4wmBGQYGongIttDYNmAA==", - "requires": { - "@mdx-js/mdx": "^2.0.0", - "@mdx-js/react": "^2.0.0", - "vfile": "^5.3.0", - "vfile-matter": "^3.0.1" - }, - "dependencies": { - "@mdx-js/react": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.1.5.tgz", - "integrity": "sha512-3Az1I6SAWA9R38rYjz5rXBrGKeZhq96CSSyQtqY+maPj8stBsoUH5pNcmIixuGkufYsh8F5+ka2CVPo2fycWZw==", - "requires": { - "@types/mdx": "^2.0.0", - "@types/react": ">=16" - } - } - } - }, "next-seo": { "version": "4.29.0", "resolved": "https://registry.npmjs.org/next-seo/-/next-seo-4.29.0.tgz", @@ -66271,16 +67100,6 @@ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "peer": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -66290,7 +67109,8 @@ "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true }, "yup": { "version": "0.32.11", @@ -66325,9 +67145,9 @@ } }, "zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" }, "zxcvbn": { "version": "4.4.2", diff --git a/package.json b/package.json index ea8eaa885db..4a605d28309 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "workspaces": [ "apps/www", "apps/docs", + "apps/new-docs", "studio", "tests", "packages/*" @@ -37,7 +38,7 @@ "json-stringify-safe": "^5.0.1", "prettier": "^2.5.1", "ts-jest": "^27.0.7", - "turbo": "1.4.7" + "turbo": "^1.4.7" }, "repository": { "type": "git", @@ -56,6 +57,7 @@ "auth" ], "dependencies": { + "@code-hike/mdx": "^0.7.4", "@mdx-js/react": "^2.1.1", "mdx-mermaid": "^1.3.2", "mermaid": "^9.2.2", diff --git a/apps/docs/components/Providers.tsx b/packages/common/Providers.tsx similarity index 100% rename from apps/docs/components/Providers.tsx rename to packages/common/Providers.tsx diff --git a/packages/common/index.tsx b/packages/common/index.tsx index eec7fc002d5..c33bdfbdfa3 100644 --- a/packages/common/index.tsx +++ b/packages/common/index.tsx @@ -3,6 +3,7 @@ import React from 'react' import SidebarLayout from './layouts/SidebarLayout' export * from './Button' +export * from './Providers' export const Layouts = { SidebarLayout, diff --git a/packages/config/tailwind.config.js b/packages/config/tailwind.config.js index 34613f92a7d..5fd41709ca8 100644 --- a/packages/config/tailwind.config.js +++ b/packages/config/tailwind.config.js @@ -21,6 +21,7 @@ module.exports = ui({ './components/**/*.tsx', './layouts/**/*.tsx', './pages/**/*.{tsx,mdx}', + './docs/**/*.{tsx,mdx}', './_blog/*.mdx', // purge styles from supabase ui theme ], @@ -93,6 +94,47 @@ module.exports = ui({ padding: 0, marginBottom: '32px', }, + ul: { + listStyleType: 'none', + paddingLeft: '1rem', + }, + 'ul li': { + position: 'relative', + }, + 'ul li::before': { + position: 'absolute', + top: '0.75rem', + left: '-1rem', + height: '0.125rem', + width: '0.5rem', + borderRadius: '0.25rem', + backgroundColor: 'var(--colors-scale7)', + content: '""', + }, + ol: { + paddingLeft: '1rem', + counterReset: 'item', + listStyleType: 'none', + }, + 'ol li': { display: 'block', position: 'relative', paddingLeft: '1rem' }, + 'ol li::before': { + position: 'absolute', + top: '0.25rem', + left: '-1rem', + height: '1.2rem', + width: '1.2rem', + borderRadius: '0.25rem', + backgroundColor: 'var(--colors-scale3)', + border: '1px solid var(--colors-scale5)', + content: 'counter(item) " "', + counterIncrement: 'item', + fontSize: '12px', + color: 'var(--colors-scale9)', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }, + 'p img': { border: '1px solid var(--colors-scale4)', borderRadius: '4px', @@ -114,14 +156,17 @@ module.exports = ui({ wordBreak: 'break-all', }, a: { - transition: 'box-shadow 0.1s ease-in-out', + position: 'relative', + transition: 'color 0.3s ease-in-out', paddingBottom: '2px', - textDecoration: 'none', - boxShadow: "theme('colors.brand[900]') 0px -3px 0px -1px inset", + color: 'var(--colors-scale12)', + textDecorationLine: 'underline', + textDecorationColor: 'var(--colors-brand7)', + textDecorationThickness: '1px', + textUnderlineOffset: '4px', }, 'a:hover': { - boxShadow: "inset 0 -30px 0 -1px theme('colors.brand[900]')", - color: 'var(--tw-prose-headings)', + textDecorationColor: 'var(--colors-brand9)', }, }, }, @@ -169,17 +214,17 @@ module.exports = ui({ }, }), screens: { - xs: '480px' - // sm: '640px', - // // => @media (min-width: 640px) { ... } - // md: '768px', - // // => @media (min-width: 768px) { ... } - // lg: '1024px', - // // => @media (min-width: 1024px) { ... } - // xl: '1280px', - // // => @media (min-width: 1280px) { ... } - // '2xl': '1536px', - // // => @media (min-width: 1536px) { ... } + xs: '480px', + // sm: '640px', + // // => @media (min-width: 640px) { ... } + // md: '768px', + // // => @media (min-width: 768px) { ... } + // lg: '1024px', + // // => @media (min-width: 1024px) { ... } + // xl: '1280px', + // // => @media (min-width: 1280px) { ... } + // '2xl': '1536px', + // // => @media (min-width: 1536px) { ... } }, // colors: { // 'gray-light': '#7B7F86', @@ -247,7 +292,7 @@ module.exports = ui({ // }, fontFamily: { sans: ['custom-font', 'Helvetica Neue', 'Helvetica', 'Arial', 'sans-serif'], - mono: ['Source Code Pro', 'Menlo', 'monospace'], + mono: ['Office Code Pro', 'Source Code Pro', 'Menlo', 'monospace'], }, // stroke: (theme) => ({ // white: theme('colors.white'), diff --git a/packages/tsconfig/react-library.json b/packages/tsconfig/react-library.json index 6d6a7fea97f..e72daf3ea1a 100644 --- a/packages/tsconfig/react-library.json +++ b/packages/tsconfig/react-library.json @@ -3,7 +3,7 @@ "display": "React Library", "extends": "./base.json", "compilerOptions": { - "lib": ["ES2015"], + "lib": ["ES2015", "dom", "dom.iterable", "esnext"], "module": "ESNext", "target": "ES6", "jsx": "react-jsx" diff --git a/packages/ui/index.tsx b/packages/ui/index.tsx index 1bf276ae8d8..772f434d345 100644 --- a/packages/ui/index.tsx +++ b/packages/ui/index.tsx @@ -1,10 +1,16 @@ import * as React from 'react' +// Providers + +export * from './src/providers' + // // GENERAL export * from './src/components/Button' export * from './src/components/Icon' export * from './src/components/Icon/IconContext' +export * from './src/components/GlassPanel' +export * from './src/components/IconPanel' // export * from './src/components/Image' // DISPLAYS @@ -35,7 +41,7 @@ export * from './src/components/Popover' export * from './src/components/Space' export * from './src/components/Loading' export * from './src/components/Divider' -export * from './src/components/ThemeProvider' +// export * from './src/components/ThemeProvider' // DATA ENTRY diff --git a/packages/ui/src/components/Accordion/Accordion.tsx b/packages/ui/src/components/Accordion/Accordion.tsx index 3b40089684a..4a802c44ed6 100644 --- a/packages/ui/src/components/Accordion/Accordion.tsx +++ b/packages/ui/src/components/Accordion/Accordion.tsx @@ -113,11 +113,12 @@ interface ItemProps { header: React.ReactNode id: string icon?: React.ReactNode + disabled?: boolean } -export function Item({ children, className, header, id, icon }: ItemProps) { +export function Item({ children, className, header, id, icon, disabled }: ItemProps) { const __styles = styleHandler('accordion') - // const [open, setOpen] = useState(false) + const [open, setOpen] = useState(false) const { type, @@ -134,12 +135,24 @@ export function Item({ children, className, header, id, icon }: ItemProps) { let chevronClasses = [__styles.chevron.base, __styles.chevron.align[chevronAlign]] // console.log('currentItems', currentItems) + if (open && !disabled) { + chevronClasses.unshift('!rotate-180') + } return ( - + { + setOpen(!open) + }} + > {header} - + {!disabled && ( + + )}
                  {children}
                  diff --git a/packages/ui/src/components/GlassPanel/GlassPanel.tsx b/packages/ui/src/components/GlassPanel/GlassPanel.tsx new file mode 100644 index 00000000000..08c2106ddf2 --- /dev/null +++ b/packages/ui/src/components/GlassPanel/GlassPanel.tsx @@ -0,0 +1,104 @@ +import { useTheme } from 'common/Providers' +import * as React from 'react' + +interface Props { + title: string + span?: string + icon?: string | React.ReactNode + children?: React.ReactNode + header?: string + background?: boolean + img?: string + hasLightIcon?: boolean + + showLink?: boolean + + showIconBg?: boolean +} + +const GlassPanel = ({ + title, + span, + icon, + children, + header, + background = true, + img, + hasLightIcon, + showLink = false, + showIconBg = false, +}: Props) => { + const { isDarkMode } = useTheme() + + const IconBackground: React.FC = (props) => ( +
                  + {props.children} +
                  + ) + + return ( +
                  + {header && ( + + )} + +
                  +
                  + {icon && typeof icon === 'string' ? ( + + + + ) : ( + icon && {icon} + )} +
                  {title}
                  +
                  + + {children && {children}} + {showLink && Learn more} +
                  +
                  + ) +} + +export default GlassPanel diff --git a/packages/ui/src/components/GlassPanel/index.tsx b/packages/ui/src/components/GlassPanel/index.tsx new file mode 100644 index 00000000000..3728536c76b --- /dev/null +++ b/packages/ui/src/components/GlassPanel/index.tsx @@ -0,0 +1 @@ +export { default as GlassPanel } from './GlassPanel' diff --git a/packages/ui/src/components/IconPanel/IconPanel.tsx b/packages/ui/src/components/IconPanel/IconPanel.tsx new file mode 100644 index 00000000000..6bf869052ff --- /dev/null +++ b/packages/ui/src/components/IconPanel/IconPanel.tsx @@ -0,0 +1,92 @@ +import { useTheme } from 'common/Providers' +import * as React from 'react' +import { ChevronRight } from 'react-feather' + +interface Props { + title: string + + icon?: string | React.ReactNode + children?: React.ReactNode + + background?: boolean + + hasLightIcon?: boolean + + showLink?: boolean +} + +const IconPanel = ({ + title, + icon, + children, + background = true, + hasLightIcon, + showLink = false, +}: Props) => { + const { isDarkMode } = useTheme() + + const IconContainer: React.FC = (props) => { + return ( +
                  + {props.children} +
                  + ) + } + + return ( +
                  +
                  +
                  + {typeof icon === 'string' ? ( + + + + ) : ( + {icon} + )} +
                  +
                  +
                  {title}
                  +
                  + +
                  +
                  + {children && {children}} + {showLink && Learn more} +
                  +
                  +
                  +
                  +
                  + ) +} + +export default IconPanel diff --git a/packages/ui/src/components/IconPanel/index.tsx b/packages/ui/src/components/IconPanel/index.tsx new file mode 100644 index 00000000000..d0ad46b1e51 --- /dev/null +++ b/packages/ui/src/components/IconPanel/index.tsx @@ -0,0 +1 @@ +export { default as IconPanel } from './IconPanel' diff --git a/packages/ui/src/components/Modal/Modal.tsx b/packages/ui/src/components/Modal/Modal.tsx index 9cf8a159a47..4c536622e39 100644 --- a/packages/ui/src/components/Modal/Modal.tsx +++ b/packages/ui/src/components/Modal/Modal.tsx @@ -115,13 +115,14 @@ const Modal = ({ customFooter ) : ( -
                  {addonUpdateDisabled ? ( + ) : currentComputeSize?.isLocked ? ( +
                  +
                  +
                  + Your project currently has the {currentComputeSize.name} included +
                  +

                  + If you would like to change your compute size, do reach out to us +

                  +
                  + +
                  ) : ( {computeSizes.map((option: any) => { @@ -75,7 +100,9 @@ const ComputeSizeSelection: FC = ({ label="Need a larger add on?" description="Reach out to us - we've got you covered!" optionalLabel={ - + diff --git a/studio/components/interfaces/Billing/AddOns/CustomDomainSelection.tsx b/studio/components/interfaces/Billing/AddOns/CustomDomainSelection.tsx index a43d9f17f34..8e5515013f9 100644 --- a/studio/components/interfaces/Billing/AddOns/CustomDomainSelection.tsx +++ b/studio/components/interfaces/Billing/AddOns/CustomDomainSelection.tsx @@ -1,14 +1,16 @@ +import Link from 'next/link' import { FC } from 'react' -import { Badge, Radio } from 'ui' +import { Badge, Button, Radio } from 'ui' -import { useStore, useFlag } from 'hooks' +import { useFlag, useParams } from 'hooks' import { getProductPrice } from '../Billing.utils' import DisabledWarningDueToIncident from 'components/ui/DisabledWarningDueToIncident' +import { SubscriptionAddon } from './AddOns.types' interface Props { - options: any[] - currentOption?: any - selectedOption: any + options: SubscriptionAddon[] + currentOption?: SubscriptionAddon + selectedOption: SubscriptionAddon onSelectOption: (option: any) => void } @@ -18,7 +20,9 @@ const CustomDomainSelection: FC = ({ selectedOption, onSelectOption, }) => { + const { ref } = useParams() const addonUpdateDisabled = useFlag('disableProjectCreationAndUpdate') + return (
                  @@ -30,6 +34,31 @@ const CustomDomainSelection: FC = ({
                  {addonUpdateDisabled ? ( + ) : currentOption?.isLocked ? ( +
                  +
                  +
                  + Your project currently has custom domains included +
                  +

                  + If you would like to disable custom domains, do reach out to us +

                  +
                  + +
                  ) : ( {options.map((option: any) => { diff --git a/studio/components/interfaces/Billing/AddOns/PITRDurationSelection.tsx b/studio/components/interfaces/Billing/AddOns/PITRDurationSelection.tsx index ec5ed6bf2a6..7f3a6f2e9ed 100644 --- a/studio/components/interfaces/Billing/AddOns/PITRDurationSelection.tsx +++ b/studio/components/interfaces/Billing/AddOns/PITRDurationSelection.tsx @@ -3,7 +3,7 @@ import { useRouter } from 'next/router' import { Badge, IconAlertCircle, Radio, Button } from 'ui' import { useFlag, useStore } from 'hooks' -import { DatabaseAddon } from './AddOns.types' +import { SubscriptionAddon } from './AddOns.types' import { getProductPrice } from '../Billing.utils' import DisabledWarningDueToIncident from 'components/ui/DisabledWarningDueToIncident' import InformationBox from 'components/ui/InformationBox' @@ -11,9 +11,9 @@ import { getSemanticVersion } from './AddOns.utils' import Link from 'next/link' interface Props { - pitrDurationOptions: DatabaseAddon[] - currentPitrDuration?: DatabaseAddon - selectedPitrDuration?: DatabaseAddon + pitrDurationOptions: SubscriptionAddon[] + currentPitrDuration?: SubscriptionAddon + selectedPitrDuration?: SubscriptionAddon onSelectOption: (option: any) => void } @@ -41,7 +41,7 @@ const PITRDurationSelection: FC = ({

                  Restore your database from a specific point in time

                  - {canUsePITR && ( + {canUsePITR && !currentPitrDuration?.isLocked && (
                  } @@ -72,6 +72,29 @@ const PITRDurationSelection: FC = ({ } icon={} /> + ) : currentPitrDuration?.isLocked ? ( +
                  +
                  +
                  + Your project currently has {currentPitrDuration.name} included +
                  +

                  + If you would like to change your PITR duration, do reach out to us +

                  +
                  + +
                  ) : ( {pitrDurationOptions.map((option: any) => { diff --git a/studio/components/interfaces/Billing/AddOns/SupportPlan.tsx b/studio/components/interfaces/Billing/AddOns/SupportPlan.tsx new file mode 100644 index 00000000000..56f22afce68 --- /dev/null +++ b/studio/components/interfaces/Billing/AddOns/SupportPlan.tsx @@ -0,0 +1,46 @@ +import { FC } from 'react' +import Link from 'next/link' +import { Button } from 'ui' +import { useParams } from 'hooks' + +interface Props { + currentOption?: any +} + +const SupportPlan: FC = ({ currentOption }) => { + const { ref } = useParams() + return ( +
                  +
                  +
                  +

                  Support Plan

                  +
                  +

                  Designated support with guaranteed response times

                  +
                  +
                  +
                  +
                  + Your project is currently on {currentOption.name} +
                  +

                  + If you would like to change your support plan, do reach out to us +

                  +
                  + +
                  +
                  + ) +} + +export default SupportPlan diff --git a/studio/components/interfaces/Billing/Billing.constants.tsx b/studio/components/interfaces/Billing/Billing.constants.tsx index 97efdae0381..49782d9f644 100644 --- a/studio/components/interfaces/Billing/Billing.constants.tsx +++ b/studio/components/interfaces/Billing/Billing.constants.tsx @@ -69,6 +69,13 @@ export const USAGE_BASED_PRODUCTS = [ units: 'bytes', costPerUnit: 0.09, }, + { + key: 'storage_image_render_count', + attribute: 'total_storage_image_render_count', + title: 'Storage Images Transformed', + units: 'absolute', + costPerUnit: 0.005, + }, ], }, { diff --git a/studio/components/interfaces/Billing/Billing.utils.ts b/studio/components/interfaces/Billing/Billing.utils.ts index d6d21a9652f..84e1e448694 100644 --- a/studio/components/interfaces/Billing/Billing.utils.ts +++ b/studio/components/interfaces/Billing/Billing.utils.ts @@ -1,4 +1,4 @@ -import { DatabaseAddon } from './AddOns/AddOns.types' +import { SubscriptionAddon } from './AddOns/AddOns.types' import { formatComputeSizes, formatCustomDomainOptions, @@ -6,6 +6,7 @@ import { } from './AddOns/AddOns.utils' import { StripeSubscription } from './Subscription/Subscription.types' +// Retrieve the price based on the default price id of the product export const getProductPrice = (product: any) => { const defaultPriceId = product.metadata?.default_price_id const price = @@ -15,10 +16,22 @@ export const getProductPrice = (product: any) => { return price } +// Products can have multiple prices, this is to get the correct one based on the subscription +const getProductPriceId = ( + currentSubscription: StripeSubscription, + product: any +): string | undefined => { + const existingAddon = currentSubscription.addons.find((addon) => addon.prod_id === product.id) + const existingAddonPriceId = product.prices.find( + (price: any) => price.unit_amount === existingAddon?.unit_amount + ) + return existingAddonPriceId?.id || getProductPrice(product)?.id +} + export const validateSubscriptionUpdatePayload = (selectedAddons: { - computeSize: DatabaseAddon - pitrDuration: DatabaseAddon - customDomains: DatabaseAddon + computeSize: SubscriptionAddon + pitrDuration: SubscriptionAddon + customDomains: SubscriptionAddon }) => { if ( selectedAddons.pitrDuration?.id !== undefined && @@ -30,74 +43,104 @@ export const validateSubscriptionUpdatePayload = (selectedAddons: { } export const formSubscriptionUpdatePayload = ( + currentSubscription: StripeSubscription, selectedTier: any, selectedAddons: { - computeSize: DatabaseAddon - pitrDuration: DatabaseAddon - customDomains: DatabaseAddon + computeSize: SubscriptionAddon + pitrDuration: SubscriptionAddon + customDomains: SubscriptionAddon }, + nonChangeableAddons: SubscriptionAddon[], selectedPaymentMethod: string, region: string ) => { const { computeSize, pitrDuration, customDomains } = selectedAddons - const defaultPrice = selectedTier ? getProductPrice(selectedTier) : undefined + + const computeSizePriceId = getProductPriceId(currentSubscription, computeSize) + const pitrAddonPriceId = getProductPriceId(currentSubscription, pitrDuration) + const customDomainPriceId = getProductPriceId(currentSubscription, customDomains) + const tierPriceId = selectedTier ? getProductPrice(selectedTier) : undefined + + const nonChangeablePriceIds = nonChangeableAddons.map((addon) => + getProductPriceId(currentSubscription, addon) + ) + const addons = region === 'af-south-1' ? [] - : [ - computeSize.prices[0].id, - pitrDuration?.prices?.[0].id, - customDomains?.prices?.[0].id, - ].filter((x) => x !== undefined) + : [computeSizePriceId, pitrAddonPriceId, customDomainPriceId] + .concat(nonChangeablePriceIds) + .filter((x) => x !== undefined) const proration_date = Math.floor(Date.now() / 1000) + return { - ...(defaultPrice && { tier: defaultPrice.id }), + ...(tierPriceId && { tier: tierPriceId.id }), addons, proration_date, payment_method: selectedPaymentMethod, } } +const findAddon = ( + subscription: StripeSubscription, + addons: SubscriptionAddon[], + key: string, + defaultKey: string +): SubscriptionAddon => { + const product = addons.find((option) => { + const subscriptionAddon = subscription.addons.find((addon) => + addon.supabase_prod_id.includes(key) + ) + return option.id === subscriptionAddon?.prod_id + }) + if (product === undefined) { + return addons.find( + (addon) => addon.metadata.supabase_prod_id === defaultKey + ) as SubscriptionAddon + } else { + const subscriptionAddon = subscription.addons.find((addon) => addon.prod_id === product.id) + return { ...product, isLocked: subscriptionAddon?.unit_amount === 0 } + } +} + export const getCurrentAddons = ( currentSubscription: StripeSubscription, - addons: DatabaseAddon[] -) => { + addons: SubscriptionAddon[] +): { + computeSize: SubscriptionAddon + pitrDuration: SubscriptionAddon + customDomains: SubscriptionAddon + supportPlan?: SubscriptionAddon +} => { const computeSizes = formatComputeSizes(addons) const pitrDurationOptions = formatPITROptions(addons) const customDomainOptions = formatCustomDomainOptions(addons) - const computeSize = - computeSizes.find((option: any) => { - const subscriptionComputeSize = currentSubscription?.addons.find((addon) => - addon.supabase_prod_id.includes('_instance_') - ) - return option.id === subscriptionComputeSize?.prod_id - }) || - (computeSizes.find( - (option: any) => option.metadata.supabase_prod_id === 'addon_instance_micro' - ) as DatabaseAddon) + const computeSize = findAddon( + currentSubscription, + computeSizes, + '_instance_', + 'addon_instance_micro' + ) + const pitrDuration = findAddon( + currentSubscription, + pitrDurationOptions, + '_pitr_', + 'addon_pitr_0days' + ) + const customDomains = findAddon( + currentSubscription, + customDomainOptions, + '_custom_domains', + 'addon_custom_domains_disabled' + ) - const pitrDuration = - pitrDurationOptions.find((option: any) => { - const subscriptionComputeSize = currentSubscription?.addons.find((addon) => - addon.supabase_prod_id.includes('_pitr_') - ) - return option.id === subscriptionComputeSize?.prod_id - }) || - (pitrDurationOptions.find( - (option: any) => option.metadata.supabase_prod_id === 'addon_pitr_0days' - ) as DatabaseAddon) + const supportPlan = addons.find((option) => { + const subscriptionSupportPlan = currentSubscription?.addons.find((addon) => + addon.supabase_prod_id.includes('_support_') + ) + return option.id === subscriptionSupportPlan?.prod_id + }) - const customDomains = - customDomainOptions.find((option: any) => { - const subscriptionComputeSize = currentSubscription?.addons.find((addon) => - addon.supabase_prod_id.includes('_custom_domains') - ) - return option.id === subscriptionComputeSize?.prod_id - }) || - (customDomainOptions.find( - (option: any) => option.metadata.supabase_prod_id === 'addon__custom_domains_disabled' - ) as DatabaseAddon) - - return { computeSize, pitrDuration, customDomains } + return { computeSize, pitrDuration, customDomains, supportPlan } } diff --git a/studio/components/interfaces/Billing/EnterpriseUpdate.tsx b/studio/components/interfaces/Billing/EnterpriseUpdate.tsx index 504d5931f8a..1755c1dc42e 100644 --- a/studio/components/interfaces/Billing/EnterpriseUpdate.tsx +++ b/studio/components/interfaces/Billing/EnterpriseUpdate.tsx @@ -8,7 +8,7 @@ import { post, patch } from 'lib/common/fetch' import { API_URL, PROJECT_STATUS } from 'lib/constants' import Divider from 'components/ui/Divider' -import { DatabaseAddon } from './AddOns/AddOns.types' +import { SubscriptionAddon } from './AddOns/AddOns.types' import { formatComputeSizes, formatCustomDomainOptions, @@ -25,9 +25,10 @@ import { } from './' import { PaymentMethod, SubscriptionPreview } from './Billing.types' import { formSubscriptionUpdatePayload, getCurrentAddons } from './Billing.utils' +import SupportPlan from './AddOns/SupportPlan' interface Props { - products: { tiers: any[]; addons: DatabaseAddon[] } + products: { tiers: any[]; addons: SubscriptionAddon[] } paymentMethods?: PaymentMethod[] currentSubscription: StripeSubscription isLoadingPaymentMethods: boolean @@ -57,15 +58,20 @@ const EnterpriseUpdate: FC = ({ // [Joshen TODO] Ideally we just have a state to hold all the add ons selection, rather than individual // Even better if we can just use the
                  component to handle all of these. Mainly to reduce the amount // of unnecessary state management on this complex page. - const [selectedComputeSize, setSelectedComputeSize] = useState( + const [selectedComputeSize, setSelectedComputeSize] = useState( currentAddons.computeSize ) - const [selectedPITRDuration, setSelectedPITRDuration] = useState( + const [selectedPITRDuration, setSelectedPITRDuration] = useState( currentAddons.pitrDuration ) - const [selectedCustomDomainOption, setSelectedCustomDomainOption] = useState( + const [selectedCustomDomainOption, setSelectedCustomDomainOption] = useState( currentAddons.customDomains ) + // [Joshen TODO] Future - We may need to also include any add ons outside of + // compute size, pitr, custom domain and support plan, although we dont have any now + const nonChangeableAddons = [currentAddons.supportPlan].filter( + (x) => x !== undefined + ) as SubscriptionAddon[] // [Joshen] Scaffolded here const selectedAddons = { @@ -86,7 +92,7 @@ const EnterpriseUpdate: FC = ({ useEffect(() => { getSubscriptionPreview() - }, [selectedComputeSize, selectedPITRDuration]) + }, [selectedComputeSize, selectedPITRDuration, selectedCustomDomainOption]) useEffect(() => { if (!isLoadingPaymentMethods && paymentMethods && paymentMethods.length > 0) { @@ -99,8 +105,10 @@ const EnterpriseUpdate: FC = ({ // Only allow add-ons changing const payload = { ...formSubscriptionUpdatePayload( + currentSubscription, null, selectedAddons, + nonChangeableAddons, selectedPaymentMethodId, projectRegion ), @@ -123,8 +131,10 @@ const EnterpriseUpdate: FC = ({ const onConfirmPayment = async () => { const payload = { ...formSubscriptionUpdatePayload( + currentSubscription, null, selectedAddons, + nonChangeableAddons, selectedPaymentMethodId, projectRegion ), @@ -199,6 +209,12 @@ const EnterpriseUpdate: FC = ({
                  {projectRegion !== 'af-south-1' && ( <> + {currentAddons.supportPlan !== undefined && ( + <> + + + + )} {isCustomDomainsEnabled && customDomainOptions.length > 0 && ( <> @@ -239,6 +255,7 @@ const EnterpriseUpdate: FC = ({ isSpendCapEnabled={true} isSubmitting={isSubmitting} isRefreshingPreview={isRefreshingPreview} + currentSubscription={currentSubscription} subscriptionPreview={subscriptionPreview} // Current subscription configuration based on DB currentPlan={currentSubscription.tier} diff --git a/studio/components/interfaces/Billing/PaymentSummaryPanel/PaymentSummaryPanel.tsx b/studio/components/interfaces/Billing/PaymentSummaryPanel/PaymentSummaryPanel.tsx index 7405534e4d2..078d2a067d2 100644 --- a/studio/components/interfaces/Billing/PaymentSummaryPanel/PaymentSummaryPanel.tsx +++ b/studio/components/interfaces/Billing/PaymentSummaryPanel/PaymentSummaryPanel.tsx @@ -3,34 +3,37 @@ import * as Tooltip from '@radix-ui/react-tooltip' import { Listbox, IconLoader, Button, IconPlus, IconAlertCircle, IconCreditCard } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { checkPermissions, useFlag, useStore } from 'hooks' +import { checkPermissions, useStore } from 'hooks' import { PRICING_TIER_PRODUCT_IDS, STRIPE_PRODUCT_IDS } from 'lib/constants' import { SubscriptionPreview } from '../Billing.types' import { getProductPrice, validateSubscriptionUpdatePayload } from '../Billing.utils' import PaymentTotal from './PaymentTotal' import InformationBox from 'components/ui/InformationBox' -import { DatabaseAddon } from '../AddOns/AddOns.types' +import { SubscriptionAddon } from '../AddOns/AddOns.types' import { getPITRDays } from './PaymentSummaryPanel.utils' import ConfirmPaymentModal from './ConfirmPaymentModal' +import { StripeSubscription } from '../Subscription/Subscription.types' // [Joshen] PITR stuff can be undefined for now until we officially launch PITR self serve interface Props { isRefreshingPreview: boolean + currentSubscription?: StripeSubscription subscriptionPreview?: SubscriptionPreview currentPlan: any currentAddons: { - computeSize: DatabaseAddon - pitrDuration: DatabaseAddon - customDomains: DatabaseAddon + computeSize: SubscriptionAddon + pitrDuration: SubscriptionAddon + customDomains: SubscriptionAddon + supportPlan?: SubscriptionAddon } selectedPlan?: any selectedAddons: { - computeSize: DatabaseAddon - pitrDuration: DatabaseAddon - customDomains: DatabaseAddon + computeSize: SubscriptionAddon + pitrDuration: SubscriptionAddon + customDomains: SubscriptionAddon } isSpendCapEnabled: boolean @@ -53,6 +56,7 @@ interface Props { const PaymentSummaryPanel: FC = ({ isRefreshingPreview, isSpendCapEnabled, + currentSubscription, subscriptionPreview, currentPlan, @@ -107,6 +111,15 @@ const PaymentSummaryPanel: FC = ({ } else return plan.name } + const getAddonPriceFromSubscription = ( + key: 'computeSize' | 'pitrDuration' | 'customDomains' | 'supportPlan' + ) => { + return ( + ((currentSubscription?.addons ?? []).find((addon) => addon.prod_id === currentAddons[key]?.id) + ?.unit_amount ?? 0) / 100 + ).toFixed(2) + } + const validateOrder = () => { const error = validateSubscriptionUpdatePayload(selectedAddons) if (error) { @@ -154,7 +167,9 @@ const PaymentSummaryPanel: FC = ({ {/* Add on details */} {projectRegion !== 'af-south-1' && (
                  -

                  Selected add-ons

                  +

                  Selected add-ons

                  + + {/* Compute size */}

                  = ({

                  - ${(getProductPrice(currentAddons.computeSize).unit_amount / 100).toFixed(2)} + ${getAddonPriceFromSubscription('computeSize')}

                  {isChangingComputeSize && ( @@ -175,6 +190,8 @@ const PaymentSummaryPanel: FC = ({

                  )} + + {/* PITR Duration */} {currentAddons.pitrDuration?.id !== undefined && (

                  = ({ isChangingPITRDuration ? 'text-scale-1100 line-through' : '' } text-sm`} > - ${(getProductPrice(currentAddons.pitrDuration).unit_amount / 100).toFixed(2)} + ${getAddonPriceFromSubscription('pitrDuration')}

                  )} @@ -201,6 +218,8 @@ const PaymentSummaryPanel: FC = ({

                  )} + + {/* Custom Domains */} {currentAddons.customDomains?.id !== undefined && (

                  = ({ isChangingCustomDomains ? 'text-scale-1100 line-through' : '' } text-sm`} > - ${(getProductPrice(currentAddons.customDomains).unit_amount / 100).toFixed(2)} + ${getAddonPriceFromSubscription('customDomains')}

                  )} @@ -228,6 +247,14 @@ const PaymentSummaryPanel: FC = ({
                  )} + {/* Support Plan */} + {currentAddons.supportPlan !== undefined && ( +
                  +

                  {currentAddons.supportPlan?.name}

                  +

                  ${getAddonPriceFromSubscription('supportPlan')}

                  +
                  + )} + {/* Show information boxes with regards to change in subscriptions */}
                  {isChangingPITRDuration && ( diff --git a/studio/components/interfaces/Billing/PaymentSummaryPanel/PaymentSummaryPanel.utils.ts b/studio/components/interfaces/Billing/PaymentSummaryPanel/PaymentSummaryPanel.utils.ts index a6088970839..dab0fd5c88f 100644 --- a/studio/components/interfaces/Billing/PaymentSummaryPanel/PaymentSummaryPanel.utils.ts +++ b/studio/components/interfaces/Billing/PaymentSummaryPanel/PaymentSummaryPanel.utils.ts @@ -1,6 +1,6 @@ -import { DatabaseAddon } from '../AddOns/AddOns.types' +import { SubscriptionAddon } from '../AddOns/AddOns.types' -export const getPITRDays = (pitrAddon: DatabaseAddon) => { +export const getPITRDays = (pitrAddon: SubscriptionAddon) => { const prodId = pitrAddon.metadata.supabase_prod_id const daysString = prodId.split('_')[2] return Number(daysString.split('days')[0]) diff --git a/studio/components/interfaces/Billing/ProUpgrade.tsx b/studio/components/interfaces/Billing/ProUpgrade.tsx index 5ff559adc1a..2a9f6134004 100644 --- a/studio/components/interfaces/Billing/ProUpgrade.tsx +++ b/studio/components/interfaces/Billing/ProUpgrade.tsx @@ -21,18 +21,19 @@ import { STRIPE_PRODUCT_IDS } from 'lib/constants' import UpdateSuccess from './UpdateSuccess' import { PaymentMethod, SubscriptionPreview } from './Billing.types' import { formSubscriptionUpdatePayload, getCurrentAddons } from './Billing.utils' -import { DatabaseAddon } from './AddOns/AddOns.types' +import { SubscriptionAddon } from './AddOns/AddOns.types' import { formatComputeSizes, formatCustomDomainOptions, formatPITROptions, } from './AddOns/AddOns.utils' import BackButton from 'components/ui/BackButton' +import SupportPlan from './AddOns/SupportPlan' // Do not allow compute size changes for af-south-1 interface Props { - products: { tiers: any[]; addons: DatabaseAddon[] } + products: { tiers: any[]; addons: SubscriptionAddon[] } paymentMethods?: PaymentMethod[] currentSubscription: StripeSubscription isLoadingPaymentMethods: boolean @@ -77,16 +78,22 @@ const ProUpgrade: FC = ({ // [Joshen TODO] Ideally we just have a state to hold all the add ons selection, rather than individual // Even better if we can just use the component to handle all of these. Mainly to reduce the amount // of unnecessary state management on this complex page. - const [selectedComputeSize, setSelectedComputeSize] = useState( + const [selectedComputeSize, setSelectedComputeSize] = useState( currentAddons.computeSize ) - const [selectedPITRDuration, setSelectedPITRDuration] = useState( + const [selectedPITRDuration, setSelectedPITRDuration] = useState( currentAddons.pitrDuration ) - const [selectedCustomDomainOption, setSelectedCustomDomainOption] = useState( + const [selectedCustomDomainOption, setSelectedCustomDomainOption] = useState( currentAddons.customDomains ) + // [Joshen TODO] Future - We may need to also include any add ons outside of + // compute size, pitr, custom domain and support plan, although we dont have any now + const nonChangeableAddons = [currentAddons.supportPlan].filter( + (x) => x !== undefined + ) as SubscriptionAddon[] + // [Joshen] Scaffolded here const selectedAddons = { computeSize: selectedComputeSize, @@ -121,8 +128,10 @@ const ProUpgrade: FC = ({ if (!selectedTier) return const payload = formSubscriptionUpdatePayload( + currentSubscription, selectedTier, selectedAddons, + nonChangeableAddons, selectedPaymentMethodId, projectRegion ) @@ -141,8 +150,10 @@ const ProUpgrade: FC = ({ const onConfirmPayment = async () => { const payload = formSubscriptionUpdatePayload( + currentSubscription, selectedTier, selectedAddons, + nonChangeableAddons, selectedPaymentMethodId, projectRegion ) @@ -242,6 +253,12 @@ const ProUpgrade: FC = ({
                  {projectRegion !== 'af-south-1' && ( <> + {currentAddons.supportPlan !== undefined && ( + <> + + + + )} {isCustomDomainsEnabled && customDomainOptions.length > 0 && ( <> @@ -289,6 +306,7 @@ const ProUpgrade: FC = ({ // Current subscription configuration based on DB currentPlan={currentSubscription.tier} currentAddons={currentAddons} + currentSubscription={currentSubscription} // Selected subscription configuration based on UI selectedPlan={selectedTier} selectedAddons={selectedAddons} diff --git a/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx b/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx index 1e871404386..46c5105d027 100644 --- a/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx +++ b/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx @@ -54,34 +54,36 @@ const EnableExtensionModal: FC = ({ visible, extension, onCancel }) => { const onSubmit = async (values: any, { setSubmitting }: any) => { setSubmitting(true) - if (values.schema === 'custom') { - const { error } = await meta.query(`create schema if not exists ${values.name}`) - if (error) { - return ui.setNotification({ - error, - category: 'error', - message: `Failed to create schema: ${error.message}`, - }) - } + + const schema = + defaultSchema !== undefined + ? defaultSchema + : values.schema === 'custom' + ? values.name + : values.schema + + const { error: createSchemaError } = await meta.query(`create schema if not exists ${schema}`) + if (createSchemaError) { + return ui.setNotification({ + error: createSchemaError, + category: 'error', + message: `Failed to create schema: ${createSchemaError.message}`, + }) } - const schema = defaultSchema - ? defaultSchema - : values.schema === 'custom' - ? values.name - : values.schema - - const { error } = await meta.extensions.create({ + const { error: createExtensionError } = await meta.extensions.create({ schema, name: extension.name, version: extension.default_version, cascade: true, }) - if (error) { + if (createExtensionError) { ui.setNotification({ - error, + error: createExtensionError, category: 'error', - message: `Failed to toggle ${extension.name.toUpperCase()}: ${error.message}`, + message: `Failed to toggle ${extension.name.toUpperCase()}: ${ + createExtensionError.message + }`, }) } else { ui.setNotification({ diff --git a/studio/components/interfaces/Database/Extensions/Extensions.constants.ts b/studio/components/interfaces/Database/Extensions/Extensions.constants.ts index 0816f74ffca..6d8dfbb1e66 100644 --- a/studio/components/interfaces/Database/Extensions/Extensions.constants.ts +++ b/studio/components/interfaces/Database/Extensions/Extensions.constants.ts @@ -11,4 +11,5 @@ export const HIDDEN_EXTENSIONS = [ 'pg_surgery', 'pg_visibility', 'pgstattuple', + 'supabase_vault', ] diff --git a/studio/components/interfaces/Database/Extensions/Extensions.tsx b/studio/components/interfaces/Database/Extensions/Extensions.tsx index 67c74ed127b..95c061d1370 100644 --- a/studio/components/interfaces/Database/Extensions/Extensions.tsx +++ b/studio/components/interfaces/Database/Extensions/Extensions.tsx @@ -1,10 +1,10 @@ -import { FC, useState } from 'react' +import { FC, useEffect, useState } from 'react' import { observer } from 'mobx-react-lite' import { partition, isNull } from 'lodash' import { Input, IconSearch, IconAlertCircle } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useStore, useFlag, checkPermissions } from 'hooks' +import { useStore, checkPermissions, useParams } from 'hooks' import ExtensionCard from './ExtensionCard' import { HIDDEN_EXTENSIONS } from './Extensions.constants' import NoSearchResults from 'components/to-be-cleaned/NoSearchResults' @@ -14,19 +14,15 @@ interface Props {} const Extensions: FC = ({}) => { const { meta } = useStore() + const { filter } = useParams() const [filterString, setFilterString] = useState('') - const enableVaultExtension = useFlag('vaultExtension') - const hiddenExtensions = enableVaultExtension - ? HIDDEN_EXTENSIONS - : HIDDEN_EXTENSIONS.concat(['vault']) - const extensions = filterString.length === 0 ? meta.extensions.list() : meta.extensions.list((ext: any) => ext.name.includes(filterString)) const extensionsWithoutHidden = extensions.filter( - (ext: any) => !hiddenExtensions.includes(ext.name) + (ext: any) => !HIDDEN_EXTENSIONS.includes(ext.name) ) const [enabledExtensions, disabledExtensions] = partition( extensionsWithoutHidden, @@ -38,6 +34,10 @@ const Extensions: FC = ({}) => { 'extensions' ) + useEffect(() => { + if (filter !== undefined) setFilterString(filter as string) + }, [filter]) + return (
                  diff --git a/studio/components/interfaces/Database/Tables/ColumnList.tsx b/studio/components/interfaces/Database/Tables/ColumnList.tsx index 17e2a6f20c3..add64c1ac20 100644 --- a/studio/components/interfaces/Database/Tables/ColumnList.tsx +++ b/studio/components/interfaces/Database/Tables/ColumnList.tsx @@ -96,10 +96,10 @@ const ColumnList: FC = ({ )} - {x.data_type} + {x.data_type} - {x.format} + {x.format}
                  diff --git a/studio/components/interfaces/Reports/Reports.tsx b/studio/components/interfaces/Reports/Reports.tsx index 5fb1630fa29..c5b02f5b596 100644 --- a/studio/components/interfaces/Reports/Reports.tsx +++ b/studio/components/interfaces/Reports/Reports.tsx @@ -17,7 +17,7 @@ import { } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { checkPermissions, useStore } from 'hooks' +import { checkPermissions, useFlag, useStore } from 'hooks' import { uuidv4 } from 'lib/helpers' import { METRIC_CATEGORIES, METRICS, TIME_PERIODS_REPORTS } from 'lib/constants' import { useProjectContentStore } from 'stores/projectContentStore' @@ -263,6 +263,10 @@ const Reports = () => { }) } + // Filter out total_storage_image_render_count if feature flag is not enabled + const storageImageResizeEnabled = useFlag('storageImageResize') + let metrics = METRICS.filter(it => it.key !== 'total_storage_image_render_count' || storageImageResizeEnabled); + const MetricOptions = () => { return ( <> @@ -273,7 +277,7 @@ const Reports = () => { isNested overlay={ <> - {METRICS.filter((metric) => metric?.category?.key === cat.key).map((metric) => { + {metrics.filter((metric) => metric?.category?.key === cat.key).map((metric) => { return ( = ({ projectRef }) => { const apiConfig = apiService?.app_config return ( - <> -
                  -

                  API Settings

                  -
                  - Project URL}> - - {isError ? ( -
                  - -

                  Failed to retrieve project URL

                  -
                  - ) : ( - - )} -
                  -
                  -
                  +
                  +

                  API Settings

                  +
                  + Project URL}> + + {isError ? ( +
                  + +

                  Failed to retrieve project URL

                  +
                  + ) : ( + + )} +
                  +
                  +
                  -
                  - -
                  +
                  + +
                  -
                  - -
                  +
                  + +
                  -
                  - -
                  -
                  - +
                  + +
                  +
                  ) } diff --git a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx index 57d837e4252..fc5916d3596 100644 --- a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx +++ b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx @@ -1,13 +1,14 @@ import { FC, useEffect } from 'react' -import { Badge, IconAlertCircle, Loading } from 'ui' +import { Badge, Button, IconAlertCircle, Loading } from 'ui' -import { useStore, useProjectUsage } from 'hooks' +import { useStore, useProjectUsage, useFlag } from 'hooks' import { formatBytes } from 'lib/helpers' import { PRICING_TIER_PRODUCT_IDS, USAGE_APPROACHING_THRESHOLD } from 'lib/constants' import SparkBar from 'components/ui/SparkBar' import ShimmeringLoader from 'components/ui/ShimmeringLoader' import InformationBox from 'components/ui/InformationBox' import { USAGE_BASED_PRODUCTS } from 'components/interfaces/Billing/Billing.constants' +import { useRouter } from 'next/router' interface Props { projectRef?: string @@ -16,13 +17,24 @@ interface Props { const ProjectUsage: FC = ({ projectRef }) => { const { ui } = useStore() const { usage, error, isLoading } = useProjectUsage(projectRef) + const router = useRouter() + + const subscriptionTier = ui.selectedProject?.subscription_tier const projectHasNoLimits = - ui.selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.PAYG || - ui.selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.ENTERPRISE + subscriptionTier === PRICING_TIER_PRODUCT_IDS.PAYG || + subscriptionTier === PRICING_TIER_PRODUCT_IDS.ENTERPRISE - const showUsageExceedMessage = - ui.selectedProject?.subscription_tier !== undefined && !projectHasNoLimits + const showUsageExceedMessage = subscriptionTier !== undefined && !projectHasNoLimits + + const planNames = { + [PRICING_TIER_PRODUCT_IDS.FREE]: 'Free', + [PRICING_TIER_PRODUCT_IDS.PRO]: 'Pro', + [PRICING_TIER_PRODUCT_IDS.PAYG]: 'Pro', + [PRICING_TIER_PRODUCT_IDS.ENTERPRISE]: 'Enterprise', + } + + const planName = subscriptionTier ? planNames[subscriptionTier] || 'current' : 'current' useEffect(() => { if (error) { @@ -44,11 +56,21 @@ const ProjectUsage: FC = ({ projectRef }) => { ) } + const storageImageResizeEnabled = useFlag('storageImageResize') + + // Filter out storage_image_render_count if feature flag is not enabled + const usageBasedProducts = USAGE_BASED_PRODUCTS.map((usageBasedProduct) => ({ + ...usageBasedProduct, + features: usageBasedProduct.features.filter( + (it) => it.key !== 'storage_image_render_count' || storageImageResizeEnabled + ), + })) + return ( {usage && (
                  - {USAGE_BASED_PRODUCTS.map((product) => { + {usageBasedProducts.map((product) => { const isExceededUsage = showUsageExceedMessage && product.features @@ -57,6 +79,7 @@ const ProjectUsage: FC = ({ projectRef }) => { return featureUsage.usage / featureUsage.limit > 1 }) .some((x) => x === true) + return (
                  = ({ projectRef }) => { const usageRatio = usageValue / featureUsage.limit const isApproaching = usageRatio >= USAGE_APPROACHING_THRESHOLD const isExceeded = showUsageExceedMessage && usageRatio >= 1 + const isAvailableInPlan = featureUsage.available_in_plan + + let usageElement + if (!isAvailableInPlan) { + usageElement = ( +
                  + Not included in {planName} tier + +
                  + ) + } else if (showUsageExceedMessage) { + usageElement = ( + + ) + } else { + usageElement = ( + + {feature.units === 'bytes' ? formatBytes(usageValue) : usageValue} + + ) + } return ( = ({ projectRef }) => { <> {showUsageExceedMessage && ( - {(usageRatio * 100).toFixed(2)} % + {isAvailableInPlan ? ( + <>{(usageRatio * 100).toFixed(2)} % + ) : ( + <>- + )} )} - {showUsageExceedMessage ? ( - - ) : ( - - {feature.units === 'bytes' - ? formatBytes(usageValue) - : usageValue} - - )} + {usageElement} )} diff --git a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.types.ts b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.types.ts index 542264ebca6..4a4d96fd7df 100644 --- a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.types.ts +++ b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.types.ts @@ -2,6 +2,7 @@ export interface ResourceUsage { usage: number limit: number cost: number + available_in_plan: boolean } export interface UsageStats { diff --git a/studio/components/interfaces/Settings/Vault/Keys/EncryptionKeySelector.tsx b/studio/components/interfaces/Settings/Vault/Keys/EncryptionKeySelector.tsx new file mode 100644 index 00000000000..ab630a29074 --- /dev/null +++ b/studio/components/interfaces/Settings/Vault/Keys/EncryptionKeySelector.tsx @@ -0,0 +1,77 @@ +import { FC } from 'react' +import { Input, Listbox, Modal, IconPlus } from 'ui' +import { useStore } from 'hooks' + +interface Props { + id?: string + nameId?: string + label?: string + labelOptional?: string + selectedKeyId?: any + error?: string + onSelectKey: (keyId: string) => void + onUpdateDescription?: (desc: string) => void +} + +const EncryptionKeySelector: FC = ({ + id = 'keyId', + nameId = 'keyName', + label = 'Encryption key', + labelOptional, + selectedKeyId, + error, + onSelectKey = () => {}, + onUpdateDescription = () => {}, +}) => { + const { vault } = useStore() + const keys = vault.listKeys() + + return ( + <> + + } + > + Create a new Encryption Key + + {keys.length > 0 && } + {keys.map((key) => ( + +
                  +

                  {key.name || 'No name provided'}

                  +

                  + ID: {key.id} +

                  +
                  +
                  + ))} +
                  + {selectedKeyId === 'create-new' && ( + onUpdateDescription(event.target.value)} + /> + )} + + ) +} + +export default EncryptionKeySelector diff --git a/studio/components/interfaces/Settings/Vault/Keys/EncryptionKeysManagement.tsx b/studio/components/interfaces/Settings/Vault/Keys/EncryptionKeysManagement.tsx new file mode 100644 index 00000000000..423cfcb3775 --- /dev/null +++ b/studio/components/interfaces/Settings/Vault/Keys/EncryptionKeysManagement.tsx @@ -0,0 +1,325 @@ +import dayjs from 'dayjs' +import { observer } from 'mobx-react-lite' +import * as Tooltip from '@radix-ui/react-tooltip' +import { FC, Fragment, useEffect, useState } from 'react' +import { + Alert, + Input, + IconSearch, + Listbox, + Button, + Modal, + Form, + IconTrash, + Badge, + IconKey, + IconLoader, + IconX, +} from 'ui' +import { useParams, useStore } from 'hooks' +import Divider from 'components/ui/Divider' + +const DEFAULT_KEY_NAME = 'No description provided' + +interface Props {} + +const EncryptionKeysManagement: FC = ({}) => { + const { vault, ui } = useStore() + const { id } = useParams() + + const [searchValue, setSearchValue] = useState('') + const [selectedSort, setSelectedSort] = useState<'name' | 'created'>('created') + const [showAddKeyModal, setShowAddKeyModal] = useState(false) + const [selectedKeyToRemove, setSelectedKeyToRemove] = useState() + const [isDeletingKey, setIsDeletingKey] = useState(false) + + useEffect(() => { + if (id !== undefined) setSearchValue(id) + }, [id]) + + const keys = ( + searchValue + ? vault.listKeys( + (key: any) => + (key?.name ?? '').toLowerCase().includes(searchValue.toLowerCase()) || + key.id.toLowerCase().includes(searchValue.toLowerCase()) + ) + : vault.listKeys() + ).sort((a: any, b: any) => { + if (selectedSort === 'created') { + return Number(new Date(a.created)) - Number(new Date(b.created)) + } else { + return a[selectedSort] > b[selectedSort] ? 1 : -1 + } + }) + + const addKey = async (values: any, { setSubmitting }: any) => { + setSubmitting(true) + const res = await vault.addKey(values.name) + if (!res.error) { + ui.setNotification({ category: 'success', message: 'Successfully added new key' }) + setShowAddKeyModal(false) + } else { + ui.setNotification({ + error: res.error, + category: 'error', + message: `Failed to add new key: ${res.error.message}`, + }) + } + setSubmitting(false) + } + + const confirmDeleteKey = async () => { + if (!selectedKeyToRemove) return + + setIsDeletingKey(true) + const res = await vault.deleteKey(selectedKeyToRemove.id) + if (!res.error) { + ui.setNotification({ category: 'success', message: `Successfully deleted encryption key` }) + setSelectedKeyToRemove(undefined) + } else { + ui.setNotification({ + error: res.error, + category: 'error', + message: `Failed to delete encryption key: ${res.error.message}`, + }) + } + setIsDeletingKey(false) + } + + return ( + <> +
                  +
                  +
                  + setSearchValue(event.target.value)} + icon={} + actions={ + searchValue.length > 0 + ? [ +
                  + +
                  + + {/* Table of keys */} +
                  + {!vault.isLoaded ? ( +
                  + +

                  Loading keys from the Vault

                  +
                  + ) : ( + <> + {keys.map((key, idx) => { + return ( + +
                  + +
                  +

                  + {key.name || DEFAULT_KEY_NAME} +

                  +

                  + ID: {key.id} +

                  +
                  +
                  + {key.name === 'default_vault_key' && Default} +
                  +
                  +

                  + Added on {dayjs(key.created).format('MMM D, YYYY')} +

                  + + +
                  +
                  + {idx !== keys.length - 1 && } +
                  + ) + })} + {keys.length === 0 && ( + <> + {searchValue.length === 0 ? ( +
                  +

                  No encryption keys added yet

                  +

                  + Encryption keys are created by the pgsodium extension and can be used to + encrypt your columns and secrets +

                  +
                  + ) : ( +
                  +

                  No results found

                  +

                  + Your search for "{searchValue}" did not return any results +

                  +
                  + )} + + )} + + )} +
                  +
                  + + setSelectedKeyToRemove(undefined)} + onConfirm={confirmDeleteKey} + loading={isDeletingKey} + header={
                  Confirm to delete key
                  } + > +
                  + +
                  + + Do ensure that the key is not currently in use to prevent any issues. + +

                  + The following key will be permanently removed and cannot be recovered. +

                  +
                  +

                  + {selectedKeyToRemove?.name ?? DEFAULT_KEY_NAME} +

                  +

                  + ID: {selectedKeyToRemove?.id} +

                  +
                  +
                  +
                  +
                  +
                  + + setShowAddKeyModal(false)} + header={
                  Add a new key
                  } + > + { + const errors: any = {} + if (values.name.length === 0) errors.name = 'Please provide a name for your key' + return errors + }} + onSubmit={addKey} + > + {({ isSubmitting }: any) => { + return ( +
                  + +

                  + Provide a name for your key for easier identification. +

                  +
                  + +
                  +
                  + + +
                  + + +
                  +
                  +
                  + ) + }} + +
                  + + ) +} + +export default observer(EncryptionKeysManagement) diff --git a/studio/components/interfaces/Settings/Vault/Secrets/AddNewSecretModal.tsx b/studio/components/interfaces/Settings/Vault/Secrets/AddNewSecretModal.tsx new file mode 100644 index 00000000000..f43299a8672 --- /dev/null +++ b/studio/components/interfaces/Settings/Vault/Secrets/AddNewSecretModal.tsx @@ -0,0 +1,164 @@ +import { FC, useState, useEffect } from 'react' +import { Modal, Form, Input, IconHelpCircle, Button, IconEyeOff, IconEye } from 'ui' + +import { useStore } from 'hooks' +import EncryptionKeySelector from '../Keys/EncryptionKeySelector' +import InformationBox from 'components/ui/InformationBox' + +interface Props { + visible: boolean + onClose: () => void +} + +const AddNewSecretModal: FC = ({ visible, onClose }) => { + const { vault, ui } = useStore() + const [showSecretValue, setShowSecretValue] = useState(false) + const [selectedKeyId, setSelectedKeyId] = useState() + + const keys = vault.listKeys() + const defaultKey = keys.find((key) => key.name === 'default_vault_key') || keys[0] + + useEffect(() => { + if (visible) setSelectedKeyId(defaultKey?.id) + }, [visible]) + + const validate = (values: any) => { + const errors: any = {} + if (values.name.length === 0) errors.name = 'Please provide a name for your secret' + if (values.secret.length === 0) errors.secret = 'Please enter your secret value' + if (selectedKeyId === 'create-new' && values.keyName.length === 0) + errors.keyName = 'Please provide a name for your new key' + return errors + } + + const onAddNewSecret = async (values: any, { setSubmitting }: any) => { + setSubmitting(true) + let encryptionKeyId = selectedKeyId + + if (values.keyId === 'create-new') { + const addKeyRes = await vault.addKey(values.keyName || undefined) + if (addKeyRes.error) { + return ui.setNotification({ + error: addKeyRes.error, + category: 'error', + message: `Failed to create new key: ${addKeyRes.error.message}`, + }) + } else { + encryptionKeyId = addKeyRes[0].id + } + } + + const res = await vault.addSecret({ + name: values.name, + description: values.description, + secret: values.secret, + key_id: encryptionKeyId, + }) + + if (!res.error) { + ui.setNotification({ + category: 'success', + message: `Successfully added new secret ${values.name}`, + }) + onClose() + setSubmitting(false) + } else { + ui.setNotification({ + error: res.error, + category: 'error', + message: `Failed to add secret ${values.name}: ${res.error.message}`, + }) + setSubmitting(false) + } + } + + return ( + Add new secret} + > +
                  + {({ isSubmitting }: any) => { + return ( +
                  + +
                  + + + +
                  + } + /> +
                  + + + +
                  + + } + url="asd" + urlLabel="Vault documentation" + title="What is a key?" + description={ +
                  +

                  + Every secret in the Vault is encrypted with a key. The Vault comes with a + default value for this key which is sufficient for simple purposes. +

                  +

                  + However, you may also use a custom key for more advanced use cases, such + as having different secrets visible to different users +

                  +
                  + } + /> +
                  +
                  + + +
                  + + +
                  +
                  +
                  + ) + }} + + + ) +} + +export default AddNewSecretModal diff --git a/studio/components/interfaces/Settings/Vault/Secrets/DeleteSecretModal.tsx b/studio/components/interfaces/Settings/Vault/Secrets/DeleteSecretModal.tsx new file mode 100644 index 00000000000..54c30e7c3bc --- /dev/null +++ b/studio/components/interfaces/Settings/Vault/Secrets/DeleteSecretModal.tsx @@ -0,0 +1,66 @@ +import { FC, useState } from 'react' +import { Modal } from 'ui' +import { VaultSecret } from 'types' +import { useStore } from 'hooks' + +interface Props { + selectedSecret: VaultSecret + onClose: () => void +} + +const DeleteSecretModal: FC = ({ selectedSecret, onClose }) => { + const { vault, ui } = useStore() + + const [isDeleting, setIsDeleting] = useState(false) + + const onConfirmDeleteSecret = async () => { + setIsDeleting(true) + const res = await vault.deleteSecret(selectedSecret.id) + if (res.error) { + ui.setNotification({ + error: res.error, + category: 'error', + message: `Failed to delete secret: ${res.error.message}`, + }) + } else { + ui.setNotification({ + category: 'success', + message: `Successfully deleted secret ${selectedSecret.name}`, + }) + onClose() + } + setIsDeleting(false) + } + + return ( + Confirm to delete secret} + > +
                  + +
                  +

                  + The following secret will be permanently removed and cannot be recovered. Are you + sure? +

                  +
                  +

                  {selectedSecret?.description}

                  +

                  + ID: {selectedSecret?.key_id} +

                  +
                  +
                  +
                  +
                  +
                  + ) +} + +export default DeleteSecretModal diff --git a/studio/components/interfaces/Settings/Vault/Secrets/EditSecretModal.tsx b/studio/components/interfaces/Settings/Vault/Secrets/EditSecretModal.tsx new file mode 100644 index 00000000000..d089a2f4a33 --- /dev/null +++ b/studio/components/interfaces/Settings/Vault/Secrets/EditSecretModal.tsx @@ -0,0 +1,180 @@ +import { isEmpty } from 'lodash' +import { FC, useState, useEffect } from 'react' +import { Modal, Form, Input, Button, IconEyeOff, IconEye } from 'ui' + +import { useStore } from 'hooks' +import { VaultSecret } from 'types' +import EncryptionKeySelector from '../Keys/EncryptionKeySelector' +import ShimmeringLoader from 'components/ui/ShimmeringLoader' + +interface Props { + selectedSecret: VaultSecret + onClose: () => void +} + +const EditSecretModal: FC = ({ selectedSecret, onClose }) => { + const { ui, vault } = useStore() + const [selectedKeyId, setSelectedKeyId] = useState() + const [showSecretValue, setShowSecretValue] = useState(false) + const [isLoadingSecretValue, setIsLoadingSecretValue] = useState(false) + + let INITIAL_VALUES = { + name: selectedSecret?.name ?? '', + description: selectedSecret?.description ?? '', + secret: selectedSecret?.decryptedSecret ?? '', + } + + useEffect(() => { + if (selectedSecret !== undefined) { + setShowSecretValue(false) + setSelectedKeyId(selectedSecret.key_id) + } + }, [selectedSecret]) + + const validate = (values: any) => { + const errors: any = {} + if (values.name.length === 0) errors.name = 'Please provide a name for your secret' + if (values.secret.length === 0) errors.secret = 'Please enter your secret value' + return errors + } + + const onUpdateSecret = async (values: any, { setSubmitting }: any) => { + const payload: Partial = {} + if (values.name !== selectedSecret.name) payload.name = values.name + if (values.description !== selectedSecret.description) payload.description = values.description + if (selectedKeyId !== selectedSecret.key_id) { + let encryptionKeyId = selectedKeyId + if (values.keyId === 'create-new') { + const addKeyRes = await vault.addKey(values.keyName || undefined) + if (addKeyRes.error) { + return ui.setNotification({ + error: addKeyRes.error, + category: 'error', + message: `Failed to create new key: ${addKeyRes.error.message}`, + }) + } else { + encryptionKeyId = addKeyRes[0].id + } + } + + payload.key_id = encryptionKeyId + } + payload.secret = values.secret + + if (!isEmpty(payload)) { + setSubmitting(true) + const res = await vault.updateSecret(selectedSecret.id, payload) + if (!res.error) { + ui.setNotification({ category: 'success', message: 'Successfully updated secret' }) + setSubmitting(false) + onClose() + } else { + ui.setNotification({ + error: res.error, + category: 'error', + message: `Failed to update secret: ${res.error.message}`, + }) + setSubmitting(false) + } + } + } + + return ( + Edit secret} + > +
                  + {({ isSubmitting, resetForm }: any) => { + useEffect(() => { + if (selectedSecret !== undefined && selectedSecret.decryptedSecret === undefined) { + fetchSecretValue() + } + }, [selectedSecret]) + + const fetchSecretValue = async () => { + if (selectedSecret === undefined) return + setIsLoadingSecretValue(true) + const res = await vault.fetchSecretValue(selectedSecret.id) + resetForm({ + values: { ...INITIAL_VALUES, secret: res }, + initialValues: { ...INITIAL_VALUES, secret: res }, + }) + setIsLoadingSecretValue(false) + } + + return isLoadingSecretValue ? ( +
                  + +
                  + +
                  +
                  + +
                  +
                  + ) : ( +
                  + +
                  + + + +
                  + } + /> +
                  + + + +
                  + +
                  +
                  + + +
                  + + +
                  +
                  +
                  + ) + }} + + + ) +} + +export default EditSecretModal diff --git a/studio/components/interfaces/Settings/Vault/Secrets/SecretRow.tsx b/studio/components/interfaces/Settings/Vault/Secrets/SecretRow.tsx new file mode 100644 index 00000000000..412435028c3 --- /dev/null +++ b/studio/components/interfaces/Settings/Vault/Secrets/SecretRow.tsx @@ -0,0 +1,128 @@ +import dayjs from 'dayjs' +import { FC, useState } from 'react' +import { + Button, + IconEye, + IconEyeOff, + IconTrash, + Input, + Dropdown, + IconEdit3, + IconKey, + IconMoreVertical, + IconLoader, +} from 'ui' +import { VaultSecret } from 'types' +import { useParams, useStore } from 'hooks' +import Link from 'next/link' + +interface Props { + secret: VaultSecret + onSelectEdit: (secret: any) => void + onSelectRemove: (secret: any) => void +} + +const SecretRow: FC = ({ secret, onSelectEdit, onSelectRemove }) => { + const { vault } = useStore() + const { ref } = useParams() + + const [isLoading, setIsLoading] = useState(false) + const [revealedValue, setRevealedValue] = useState() + const name = secret?.name ?? 'No name provided' + + const revealSecret = async () => { + setIsLoading(true) + if (revealedValue === undefined) { + setRevealedValue( + secret.decryptedSecret !== undefined + ? secret.decryptedSecret + : await vault.fetchSecretValue(secret.id) + ) + } else { + setRevealedValue(undefined) + } + setIsLoading(false) + } + + return ( +
                  +
                  +
                  +

                  + {name} +

                  + {secret.description !== undefined && ( +

                  + {secret.description} +

                  + )} +
                  + +
                  +
                  +
                  +
                  +

                  + {secret.updated_at === secret.created_at ? 'Added' : 'Updated'} on{' '} + {dayjs(secret.updated_at).format('MMM D, YYYY')} +

                  + + } onClick={() => onSelectEdit(secret)}> + Edit + + } + onClick={() => onSelectRemove(secret)} + > + Delete + + + } + > +
                  +
                  + ) +} + +export default SecretRow diff --git a/studio/components/interfaces/Settings/Vault/Secrets/SecretsManagement.tsx b/studio/components/interfaces/Settings/Vault/Secrets/SecretsManagement.tsx new file mode 100644 index 00000000000..de6ab42ae2e --- /dev/null +++ b/studio/components/interfaces/Settings/Vault/Secrets/SecretsManagement.tsx @@ -0,0 +1,146 @@ +import { observer } from 'mobx-react-lite' +import { FC, Fragment, useState } from 'react' +import { IconSearch, Input, Button, Listbox, IconLoader } from 'ui' + +import SecretRow from './SecretRow' +import EditSecretModal from './EditSecretModal' +import DeleteSecretModal from './DeleteSecretModal' +import AddNewSecretModal from './AddNewSecretModal' +import Divider from 'components/ui/Divider' +import { useStore } from 'hooks' + +interface Props {} + +const SecretsManagement: FC = ({}) => { + const { vault } = useStore() + const [searchValue, setSearchValue] = useState('') + const [selectedSort, setSelectedSort] = useState<'updated_at' | 'name'>('updated_at') + const [showAddSecretModal, setShowAddSecretModal] = useState(false) + const [selectedSecretToEdit, setSelectedSecretToEdit] = useState() + const [selectedSecretToRemove, setSelectedSecretToRemove] = useState() + + const secrets = ( + searchValue.length > 0 + ? vault.listSecrets( + (secret: any) => + (secret?.name ?? '').toLowerCase().includes(searchValue.toLowerCase()) || + secret.key_id.toLowerCase().includes(searchValue.toLowerCase()) + ) + : vault.listSecrets() + ).sort((a: any, b: any) => { + if (selectedSort === 'updated_at') { + return Number(new Date(a.updated_at)) - Number(new Date(b.updated_at)) + } else { + return a[selectedSort] > b[selectedSort] ? 1 : -1 + } + }) + + return ( + <> +
                  +
                  +
                  + setSearchValue(event.target.value)} + icon={} + /> +
                  + + + Updated at + + + Name + + + Key ID + + +
                  +
                  + +
                  + + {/* Table of secrets */} +
                  + {!vault.isLoaded ? ( +
                  + +

                  Loading secrets from the Vault

                  +
                  + ) : ( + <> + {secrets.map((secret, idx) => { + return ( + + + {idx !== secrets.length - 1 && } + + ) + })} + {secrets.length === 0 && ( + <> + {searchValue.length === 0 ? ( +
                  +

                  No secrets added yet

                  +

                  + The Vault allows you to store sensitive information like API keys +

                  +
                  + ) : ( +
                  +

                  No results found

                  +

                  + Your search for "{searchValue}" did not return any results +

                  +
                  + )} + + )} + + )} +
                  +
                  + + setSelectedSecretToEdit(undefined)} + /> + setSelectedSecretToRemove(undefined)} + /> + setShowAddSecretModal(false)} + /> + + ) +} + +export default observer(SecretsManagement) diff --git a/studio/components/interfaces/Settings/Vault/VaultToggle.tsx b/studio/components/interfaces/Settings/Vault/VaultToggle.tsx new file mode 100644 index 00000000000..1fdd70b2156 --- /dev/null +++ b/studio/components/interfaces/Settings/Vault/VaultToggle.tsx @@ -0,0 +1,153 @@ +import Link from 'next/link' +import { observer } from 'mobx-react-lite' +import { FC, useState } from 'react' +import * as Tooltip from '@radix-ui/react-tooltip' +import { Button, IconAlertCircle, IconExternalLink } from 'ui' + +import { PermissionAction } from '@supabase/shared-types/out/constants' +import { checkPermissions, useParams, useStore } from 'hooks' +import InformationBox from 'components/ui/InformationBox' + +interface Props {} + +const VaultToggle: FC = () => { + const { meta, ui } = useStore() + const { ref } = useParams() + const [isEnabling, setIsEnabling] = useState(false) + const canToggleVault = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'extensions') + + const vaultExtension = meta.extensions.byId('supabase_vault') + const isNotAvailable = vaultExtension === undefined + + const onEnableVault = async () => { + if (vaultExtension === undefined) return + setIsEnabling(true) + + const { error: createSchemaError } = await meta.query( + `create schema if not exists ${vaultExtension.schema ?? 'vault'};` + ) + if (createSchemaError) { + setIsEnabling(false) + return ui.setNotification({ + error: createSchemaError, + category: 'error', + message: `Failed to create schema: ${createSchemaError.message}`, + }) + } + + const { error: createExtensionError } = await meta.extensions.create({ + schema: vaultExtension.schema ?? 'vault', + name: vaultExtension.name, + version: vaultExtension.default_version, + cascade: true, + }) + if (createExtensionError) { + ui.setNotification({ + error: createExtensionError, + category: 'error', + message: `Failed to enable Vault for your project: ${createExtensionError.message}`, + }) + setIsEnabling(false) + } else { + ui.setNotification({ + category: 'success', + message: 'Vault is now enabled for your project!', + }) + } + } + + return ( +
                  +
                  +
                  +
                  +

                  Enable Vault today

                  +

                  + Supabase Vault is a Postgres extension for managing secrets and encryption inside your + database without leaking any sensitive information. +

                  +
                  + {isNotAvailable ? ( + } + title="Vault is not available for your project" + description={ + <> +

                  + Do reach out to us if you're interested in having Vault for this project! +

                  + + + } + /> + ) : ( +
                  + + + + + + + + + + {!canToggleVault && ( + + +
                  + + You need additional permissions to enable Vault for this project + +
                  +
                  + )} +
                  +
                  + )} +
                  +
                  +
                  + ) +} + +export default observer(VaultToggle) diff --git a/studio/components/interfaces/Settings/Vault/index.ts b/studio/components/interfaces/Settings/Vault/index.ts new file mode 100644 index 00000000000..41f32a26d17 --- /dev/null +++ b/studio/components/interfaces/Settings/Vault/index.ts @@ -0,0 +1,6 @@ +import VaultToggle from './VaultToggle' +import SecretsManagement from './Secrets/SecretsManagement' +import EncryptionKeySelector from './Keys/EncryptionKeySelector' +import EncryptionKeysManagement from './Keys/EncryptionKeysManagement' + +export { VaultToggle, SecretsManagement, EncryptionKeySelector, EncryptionKeysManagement } diff --git a/studio/components/interfaces/Support/SupportForm.utils.ts b/studio/components/interfaces/Support/SupportForm.utils.ts index 46f3ca577e5..cc080f2ce22 100644 --- a/studio/components/interfaces/Support/SupportForm.utils.ts +++ b/studio/components/interfaces/Support/SupportForm.utils.ts @@ -4,22 +4,23 @@ import { uuidv4 } from 'lib/helpers' const SUPPORT_API_URL = process.env.NEXT_PUBLIC_SUPPORT_API_URL || '' const SUPPORT_API_KEY = process.env.NEXT_PUBLIC_SUPPORT_ANON_KEY || '' -const supportSupabaseClient = createClient(SUPPORT_API_URL, SUPPORT_API_KEY, { - auth: { - persistSession: false, - autoRefreshToken: false, - // @ts-ignore - multiTab: false, - detectSessionInUrl: false, - localStorage: { - getItem: (key: string) => undefined, - setItem: (key: string, value: string) => {}, - removeItem: (key: string) => {}, - }, - }, -}) export const uploadAttachments = async (ref: string, files: File[]) => { + const supportSupabaseClient = createClient(SUPPORT_API_URL, SUPPORT_API_KEY, { + auth: { + persistSession: false, + autoRefreshToken: false, + // @ts-ignore + multiTab: false, + detectSessionInUrl: false, + localStorage: { + getItem: (key: string) => undefined, + setItem: (key: string, value: string) => {}, + removeItem: (key: string) => {}, + }, + }, + }) + const filesToUpload = Array.from(files) const uploadedFiles = await Promise.all( filesToUpload.map(async (file) => { diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ActionBar.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ActionBar.tsx index 03f8b01dc8d..fd0cbe367be 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ActionBar.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ActionBar.tsx @@ -33,8 +33,8 @@ const ActionBar: FC = ({ } return ( -
                  - diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnDefaultValue.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnDefaultValue.tsx index e8f039ce254..ca2f6095a86 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnDefaultValue.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnDefaultValue.tsx @@ -51,7 +51,7 @@ const ColumnDefaultValue: FC = ({ return ( void saveChanges: ( payload: CreateColumnPayload | UpdateColumnPayload, foreignKey: Partial | undefined, isNewRecord: boolean, - configuration: { columnId: string | undefined }, + configuration: { + columnId: string | undefined + isEncrypted: boolean + keyId?: string + keyName?: string + }, resolve: any ) => void updateEditorDirty: () => void @@ -48,24 +56,37 @@ const ColumnEditor: FC = ({ column, selectedTable, tables = [], - enumTypes = [], visible = false, closePanel = () => {}, saveChanges = () => {}, updateEditorDirty = () => {}, }) => { + const { ref } = useParams() + const { meta, vault } = useStore() + const isTCEEnabled = useFlag('transparentColumnEncryption') + const isNewRecord = isUndefined(column) const originalForeignKey = column ? getColumnForeignKey(column, selectedTable) : undefined + const keys = vault.listKeys() + const enumTypes = meta.types.list( + (type: PostgresType) => !meta.excludedSchemas.includes(type.schema) + ) + const [errors, setErrors] = useState>({}) const [columnFields, setColumnFields] = useState() const [isEditingRelation, setIsEditingRelation] = useState(false) + const [pgsodiumExtension] = meta.extensions.list( + (ext: PostgresExtension) => ext.name.toLowerCase() === 'pgsodium' + ) + const isPgSodiumInstalled = pgsodiumExtension?.installed_version !== null + useEffect(() => { if (visible) { setErrors({}) const columnFields = isNewRecord - ? generateColumnField() + ? { ...generateColumnField(), keyId: keys.length > 0 ? keys[0].id : 'create-new' } : generateColumnFieldFromPostgresColumn(column!, selectedTable) setColumnFields(columnFields) } @@ -126,7 +147,12 @@ const ColumnEditor: FC = ({ const foreignKey = columnFields.foreignKey ? { ...columnFields.foreignKey, source_column_name: columnFields.name } : undefined - const configuration = { columnId: column?.id } + const configuration = { + columnId: column?.id, + isEncrypted: columnFields.isEncrypted, + keyId: columnFields.keyId, + keyName: columnFields.keyName, + } saveChanges(payload, foreignKey, isNewRecord, configuration, resolve) } else { resolve() @@ -136,7 +162,7 @@ const ColumnEditor: FC = ({ return ( = ({ } }} > - -
                  + General}> + = ({ /> onUpdateField({ comment: event.target.value })} /> -
                  -
                  - onUpdateField({ isPrimaryKey: !columnFields?.isPrimaryKey })} - /> -
                  + + + + Foreign Key Relation + } + > + +
                  + setIsEditingRelation(true)} + onSelectRemoveRelation={() => onUpdateField({ foreignKey: undefined })} + />
                  -
                  - - +
                  +
                  - - -
                  - setIsEditingRelation(true)} - onSelectRemoveRelation={() => onUpdateField({ foreignKey: undefined })} - /> -
                  -
                  - - -
                  + Data Type} + > + = ({ } onOptionSelect={(format: string) => onUpdateField({ format, defaultValue: null })} /> - {isUndefined(columnFields.foreignKey) && ( -
                  +
                  {columnFields.format.includes('int') && ( -
                  +
                  = ({
                  )} {!columnFields.isPrimaryKey && ( -
                  +
                  = ({ enumTypes={enumTypes} onUpdateField={onUpdateField} /> - {!columnFields.isPrimaryKey && ( - <> -
                  -
                  - onUpdateField({ isNullable: !columnFields.isNullable })} - /> -
                  -
                  - onUpdateField({ isUnique: !columnFields.isUnique })} - /> -
                  -
                  - - )} - - setIsEditingRelation(false)} - saveChanges={saveColumnForeignKey} + + + + Configuration} + > + + onUpdateField({ isPrimaryKey: !columnFields?.isPrimaryKey })} /> -
                  - + onUpdateField({ isNullable: !columnFields.isNullable })} + /> + onUpdateField({ isUnique: !columnFields.isUnique })} + /> + + + {isNewRecord && isTCEEnabled && ( + <> + + Security} + > + + +

                  + Encrypt the column's data with pgsodium's Transparent Column Encryption (TCE). + Decrypted values will be stored within the "decrypted_{selectedTable.name}" + view. +

                  + {!isPgSodiumInstalled ? ( +

                  + You will need to{' '} + + install + {' '} + the extension pgsodium first before being + able to encrypt your column. +

                  + ) : ( +

                  + Note: Only columns of text type can be + encrypted. +

                  + )} +
                  + } + checked={columnFields.isEncrypted} + onChange={() => onUpdateField({ isEncrypted: !columnFields.isEncrypted })} + /> + {columnFields.isEncrypted && ( + onUpdateField({ keyId: id })} + onUpdateDescription={(name) => onUpdateField({ keyName: name })} + /> + )} + + + + )} + + setIsEditingRelation(false)} + saveChanges={saveColumnForeignKey} + /> ) } diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.utils.ts b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.utils.ts index 299dbfad1d8..63a8436cae5 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.utils.ts +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.utils.ts @@ -43,6 +43,7 @@ export const generateColumnField = (field: any = {}): ColumnField => { isPrimaryKey: false, isIdentity: false, isNewColumn: true, + isEncrypted: false, } } @@ -69,6 +70,7 @@ export const generateColumnFieldFromPostgresColumn = ( isUnique: column.is_unique, isNewColumn: false, + isEncrypted: false, isPrimaryKey: primaryKeyColumns.includes(column.name), } } @@ -163,6 +165,12 @@ export const validateFields = (field: ColumnField) => { if (field.format.length === 0) { errors['format'] = `Please select a type for your column` } + if (field.isEncrypted && field.keyId === 'create-new' && (field?.keyName ?? '').length === 0) { + errors['keyName'] = 'Please provide a name for your new key' + } + if (field.isEncrypted && field.format !== 'text') { + errors['isEncrypted'] = 'Only columns of type text can be encrypted' + } return errors } diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnForeignKey.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnForeignKey.tsx index cd3a32e6ca0..45a09d5a3cd 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnForeignKey.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnForeignKey.tsx @@ -1,6 +1,6 @@ import { FC } from 'react' import { isUndefined } from 'lodash' -import { Button, IconArrowRight, IconLink } from 'ui' +import { Button, IconArrowRight } from 'ui' import { ColumnField } from '../SidePanelEditor.types' import InformationBox from 'components/ui/InformationBox' @@ -86,9 +86,8 @@ const ColumnForeignKeyInformation: FC<{ return ( } title={ -
                  +
                  This column has the following foreign key relation:
                  @@ -123,20 +122,23 @@ const ColumnForeignKeyAdded: FC<{ return ( } title={ -
                  +
                  The following foreign key relation will be{' '} added:
                  - 0 ? 'text-code' : ''} max-w-xs truncate`}> + 0 ? 'text-code font-mono text-xs' : '' + } max-w-xs truncate`} + > {columnName || 'This column'} - + {foreignKey?.target_table_schema}.{foreignKey?.target_table_name}. {foreignKey?.target_column_name} @@ -164,9 +166,8 @@ const ColumnForeignKeyRemoved: FC<{ return ( } title={ -
                  +

                  The following foreign key relation will be{' '} @@ -208,9 +209,8 @@ const ColumnForeignKeyUpdated: FC<{ return ( } title={ -

                  +

                  The foreign key relation will be updated as diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx index a31f97e92ac..3cfdb838a50 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx @@ -8,6 +8,7 @@ interface Props { value: string enumTypes: PostgresType[] size?: 'tiny' | 'small' | 'medium' | 'large' | 'xlarge' + layout?: 'vertical' | 'horizontal' className?: string error?: any disabled?: boolean @@ -21,6 +22,7 @@ const ColumnType: FC = ({ enumTypes = [], className, size = 'medium', + layout, error, disabled = false, showLabel = true, @@ -74,7 +76,7 @@ const ColumnType: FC = ({ return ( = ({ // @ts-ignore header={ - Edit foreign key relation for{' '} - {get(column, ['name'], '')} + Edit foreign key relation{' '} + {column?.name && ( + <> + for {get(column, ['name'], '')} + + )} } customFooter={ @@ -125,7 +129,7 @@ const ForeignKeySelector: FC = ({ } > -

                  +
                  } title="What are foreign keys?" diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx index 8a0d3ee57d3..7e410f7d2ab 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx @@ -2,12 +2,7 @@ import { FC, useState } from 'react' import { find, isEmpty, isUndefined } from 'lodash' import { Query, Dictionary } from 'components/grid' import { Modal } from 'ui' -import { - PostgresRelationship, - PostgresTable, - PostgresColumn, - PostgresType, -} from '@supabase/postgres-meta' +import { PostgresRelationship, PostgresTable, PostgresColumn } from '@supabase/postgres-meta' import { useStore } from 'hooks' import { RowEditor, ColumnEditor, TableEditor } from '.' @@ -30,7 +25,7 @@ interface Props { // Because the panel is shared between grid editor and database pages // Both require different responses upon success of these events onTableCreated?: (table: PostgresTable) => void - onColumnSaved?: () => void + onColumnSaved?: (hasEncryptedColumns?: boolean) => void } const SidePanelEditor: FC = ({ @@ -53,9 +48,6 @@ const SidePanelEditor: FC = ({ const [isClosingPanel, setIsClosingPanel] = useState(false) const tables = meta.tables.list() - const enumTypes = meta.types.list( - (type: PostgresType) => !meta.excludedSchemas.includes(type.schema) - ) const saveRow = async ( payload: any, @@ -125,17 +117,19 @@ const SidePanelEditor: FC = ({ payload: CreateColumnPayload | UpdateColumnPayload, foreignKey: Partial | undefined, isNewRecord: boolean, - configuration: { columnId?: string }, + configuration: { columnId?: string; isEncrypted: boolean; keyId?: string; keyName?: string }, resolve: any ) => { + const { columnId, ...securityConfig } = configuration const response = isNewRecord ? await meta.createColumn( payload as CreateColumnPayload, selectedTable as PostgresTable, - foreignKey + foreignKey, + securityConfig ) : await meta.updateColumn( - configuration.columnId as string, + columnId as string, payload as UpdateColumnPayload, selectedTable as PostgresTable, foreignKey @@ -145,11 +139,15 @@ const SidePanelEditor: FC = ({ ui.setNotification({ category: 'error', message: response.error.message }) } else { await meta.tables.loadById(selectedTable!.id) - onColumnSaved() + onColumnSaved(configuration.isEncrypted) setIsEdited(false) closePanel() } + if (configuration.isEncrypted) { + await meta.schemas.loadViews(selectedTable?.schema ?? '') + } + resolve() } @@ -271,7 +269,6 @@ const SidePanelEditor: FC = ({ )} {!isUndefined(selectedTable) && ( { [Key: string]: T diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.constants.ts b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.constants.ts index 7a20ab648ab..7a5a4fc9b47 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.constants.ts +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.constants.ts @@ -14,6 +14,7 @@ export const DEFAULT_COLUMNS: ColumnField[] = [ isPrimaryKey: true, isIdentity: true, isNewColumn: true, + isEncrypted: false, }, { id: uuidv4(), @@ -27,5 +28,6 @@ export const DEFAULT_COLUMNS: ColumnField[] = [ isPrimaryKey: false, isIdentity: false, isNewColumn: true, + isEncrypted: false, }, ] diff --git a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx index 0905149b791..818f0d97832 100644 --- a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx @@ -1,4 +1,4 @@ -import { FC, useRef } from 'react' +import { FC, useRef, useEffect, useState } from 'react' import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' import { find, isUndefined } from 'lodash' @@ -54,11 +54,24 @@ const TableGridEditor: FC = ({ onDeleteColumn = () => {}, onClosePanel = () => {}, }) => { - const { meta, ui } = useStore() + const { meta, ui, vault } = useStore() const router = useRouter() const gridRef = useRef(null) const projectRef = ui.selectedProject?.ref + const [encryptedColumns, setEncryptedColumns] = useState([]) + + const getEncryptedColumns = async (table: any) => { + const columns = await vault.listEncryptedColumns(table.name) + setEncryptedColumns(columns) + } + + useEffect(() => { + if (selectedTable !== undefined && selectedTable.id !== undefined) { + getEncryptedColumns(selectedTable) + } + }, [selectedTable?.id]) + if (isUndefined(selectedTable)) { return } @@ -72,12 +85,15 @@ const TableGridEditor: FC = ({ const canUpdateTables = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') const gridTable = !isViewSelected - ? parseSupaTable({ - table: selectedTable as PostgresTable, - columns: (selectedTable as PostgresTable).columns, - primaryKeys: (selectedTable as PostgresTable).primary_keys, - relationships: (selectedTable as PostgresTable).relationships, - }) + ? parseSupaTable( + { + table: selectedTable as PostgresTable, + columns: (selectedTable as PostgresTable).columns, + primaryKeys: (selectedTable as PostgresTable).primary_keys, + relationships: (selectedTable as PostgresTable).relationships, + }, + encryptedColumns + ) : (selectedTable as SchemaView).name const gridKey = `${selectedTable.schema}_${selectedTable.name}` @@ -90,6 +106,10 @@ const TableGridEditor: FC = ({ if (gridRef.current) gridRef.current.rowEdited(row, idx) } + const onColumnSaved = (hasEncryptedColumns = false) => { + if (hasEncryptedColumns) getEncryptedColumns(selectedTable) + } + const onTableCreated = (table: PostgresTable) => { router.push(`/project/${projectRef}/editor/${table.id}`) } @@ -169,6 +189,7 @@ const TableGridEditor: FC = ({ sidePanelKey={sidePanelKey} onRowCreated={onRowCreated} onRowUpdated={onRowUpdated} + onColumnSaved={onColumnSaved} onTableCreated={onTableCreated} closePanel={onClosePanel} /> diff --git a/studio/components/layouts/SettingsLayout/SettingsLayout.tsx b/studio/components/layouts/SettingsLayout/SettingsLayout.tsx index 4f98e620b59..d60013f47b0 100644 --- a/studio/components/layouts/SettingsLayout/SettingsLayout.tsx +++ b/studio/components/layouts/SettingsLayout/SettingsLayout.tsx @@ -1,4 +1,4 @@ -import { FC, ReactNode } from 'react' +import { FC, ReactNode, useEffect } from 'react' import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' import { useStore, withAuth } from 'hooks' @@ -13,7 +13,7 @@ interface Props { } const SettingsLayout: FC = ({ title, children }) => { - const { ui } = useStore() + const { ui, meta } = useStore() const projectRef = ui.selectedProjectRef as string const projectBaseInfo = ui.selectedProjectBaseInfo @@ -26,6 +26,12 @@ const SettingsLayout: FC = ({ title, children }) => { const menuRoutes = generateSettingsMenu(projectRef, projectBaseInfo) + useEffect(() => { + if (ui.selectedProject?.ref) { + meta.extensions.load() + } + }, [ui.selectedProject?.ref]) + return ( { + const isVaultEnabled = useFlag('vaultExtension') + const isProjectBuilding = project?.status !== PROJECT_STATUS.ACTIVE_HEALTHY const buildingUrl = `/project/${ref}/building` - const canReadStorage = checkPermissions(PermissionAction.STORAGE_ADMIN_READ, '*') - const canReadInvoices = checkPermissions(PermissionAction.BILLING_READ, 'stripe.invoices') - const canReadSubscriptions = checkPermissions( - PermissionAction.BILLING_READ, - 'stripe.subscriptions' - ) - return [ { title: 'Project Settings', @@ -58,6 +51,16 @@ export const generateSettingsMenu = (ref: string, project?: ProjectBase): Produc }, ] : []), + ...(isVaultEnabled + ? [ + { + name: 'Vault', + key: 'vault', + url: isProjectBuilding ? buildingUrl : `/project/${ref}/settings/vault/secrets`, + items: [], + }, + ] + : []), ], }, ...(IS_PLATFORM diff --git a/studio/components/layouts/SignInLayout/SignInLayout.tsx b/studio/components/layouts/SignInLayout/SignInLayout.tsx index 51c50ec6287..1b520c22ce1 100644 --- a/studio/components/layouts/SignInLayout/SignInLayout.tsx +++ b/studio/components/layouts/SignInLayout/SignInLayout.tsx @@ -130,11 +130,11 @@ const SignInLayout = ({

                  By continuing, you agree to Supabase's{' '} - + Terms of Service {' '} and{' '} - + Privacy Policy , and to receive periodic emails with updates. diff --git a/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx b/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx index a6cc5be9196..8816485b1a9 100644 --- a/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx +++ b/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx @@ -29,7 +29,7 @@ const TableEditorLayout: FC = ({ onDuplicateTable = () => {}, children, }) => { - const { meta, ui } = useStore() + const { vault, meta, ui } = useStore() const { isInitialized, isLoading, error } = meta.tables const [loaded, setLoaded] = useState(isInitialized) @@ -42,6 +42,8 @@ const TableEditorLayout: FC = ({ meta.types.load() meta.policies.load() meta.publications.load() + meta.extensions.load() + vault.load() } }, [ui.selectedProject?.ref]) diff --git a/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx b/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx index 23ef339fd5c..2c846abf96a 100644 --- a/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx +++ b/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx @@ -2,9 +2,8 @@ import { FC, useEffect, useState } from 'react' import { useRouter } from 'next/router' import Link from 'next/link' import { partition } from 'lodash' -// import { Button } from 'ui' +import { observer } from 'mobx-react-lite' import { - Alert, Button, Dropdown, IconChevronDown, @@ -60,7 +59,6 @@ const TableEditorMenu: FC = ({ const canCreateTables = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') const [searchText, setSearchText] = useState('') - const [schemaViews, setSchemaViews] = useState([]) const [isRefreshing, setIsRefreshing] = useState(false) // We may need to shift this to the schema store and do something like meta.schema.loadViews() @@ -68,12 +66,10 @@ const TableEditorMenu: FC = ({ useEffect(() => { let cancel = false const fetchViews = async (selectedSchema: string) => { - const views: SchemaView[] = await meta.schemas.getViews(selectedSchema) - if (!cancel) setSchemaViews(views) - } - if (selectedSchema) { - fetchViews(selectedSchema) + await meta.schemas.loadViews(selectedSchema) } + if (selectedSchema) fetchViews(selectedSchema) + return () => { cancel = true } @@ -82,6 +78,7 @@ const TableEditorMenu: FC = ({ const refreshTables = async () => { setIsRefreshing(true) await meta.tables.load() + if (selectedSchema) await meta.schemas.loadViews(selectedSchema) setIsRefreshing(false) } @@ -93,8 +90,8 @@ const TableEditorMenu: FC = ({ const filteredSchemaViews = searchText.length === 0 - ? schemaViews - : schemaViews.filter((view) => view.name.includes(searchText)) + ? meta.schemas.views || [] + : (meta.schemas.views || []).filter((view) => view.name.includes(searchText)) const [protectedSchemas, openSchemas] = partition(schemas, (schema) => meta.excludedSchemas.includes(schema?.name ?? '') @@ -117,7 +114,6 @@ const TableEditorMenu: FC = ({ // @ts-ignore onChange={(name: string) => { setSearchText('') - setSchemaViews([]) onSelectSchema(name) }} > @@ -296,24 +292,24 @@ const TableEditorMenu: FC = ({ -

                  - All views -
                  - +
                  + All views +
                  } /> - {schemaViews.map((view: SchemaView) => { + {meta.schemas.views.map((view: SchemaView) => { const viewId = Base64.encode(JSON.stringify(view)) const isActive = id === viewId return ( - -
                  -

                  {view.name}

                  -
                  -
                  + + +
                  +

                  {view.name}

                  +
                  +
                  +
                  ) })} @@ -339,4 +335,4 @@ const TableEditorMenu: FC = ({ ) } -export default TableEditorMenu +export default observer(TableEditorMenu) diff --git a/studio/components/to-be-cleaned/forms/SchemaFormPanel.js b/studio/components/to-be-cleaned/forms/SchemaFormPanel.js index 6f86522c66a..c92731055e1 100644 --- a/studio/components/to-be-cleaned/forms/SchemaFormPanel.js +++ b/studio/components/to-be-cleaned/forms/SchemaFormPanel.js @@ -32,7 +32,7 @@ export default function SchemaFormPanel({ setSubmitButtonLoading(true) }) .catch((error) => { - console.log('Error on submitting', error) + console.error('Error on submitting', error) }) } diff --git a/studio/components/ui/ConfirmationModal.tsx b/studio/components/ui/ConfirmationModal.tsx index 3bc7905aa0b..9d9e799a6ae 100644 --- a/studio/components/ui/ConfirmationModal.tsx +++ b/studio/components/ui/ConfirmationModal.tsx @@ -52,10 +52,16 @@ const ConfirmationModal: FC = ({ onCancel={onSelectCancel} customFooter={
                  - -
                  diff --git a/studio/components/ui/DatePicker/TimeSplitInput.tsx b/studio/components/ui/DatePicker/TimeSplitInput.tsx index 7c437936e9a..ea93dbbe9c4 100644 --- a/studio/components/ui/DatePicker/TimeSplitInput.tsx +++ b/studio/components/ui/DatePicker/TimeSplitInput.tsx @@ -38,13 +38,10 @@ const TimeSplitInput = ({ // Only run time conflicts if // startDate and endDate are the same date - // console.log(startDate) - // console.log(endDate) if (format(new Date(startDate), 'dd/mm/yyyy') == format(new Date(endDate), 'dd/mm/yyyy')) { // checks if start time is ahead of end time if (type === 'start') { - // console.log('HH in start switch') if (_time.HH && Number(_time.HH) > Number(endTime.HH)) { endTimePayload.HH = _time.HH endTimeChanges = true @@ -79,8 +76,6 @@ const TimeSplitInput = ({ } if (type === 'end') { - // console.log('HH in start switch') - if (_time.HH && Number(_time.HH) < Number(startTime.HH)) { startTimePayload.HH = _time.HH startTimeChanges = true @@ -128,8 +123,6 @@ const TimeSplitInput = ({ } function handleOnChange(value: string, valueType: TimeType) { - // console.log('handleOnChange') - const payload = { HH: time.HH, mm: time.mm, @@ -151,14 +144,8 @@ const TimeSplitInput = ({ break } - // console.log('got here') - payload[valueType] = value setTime({ ...payload }) - - // if (endTimeChanges) { - // setEndTime(endTimePayload) - // } } const handleFocus = (event: React.FocusEvent) => { diff --git a/studio/components/ui/Forms/FormSection.tsx b/studio/components/ui/Forms/FormSection.tsx index 1d1f0fec835..7d98c189c5c 100644 --- a/studio/components/ui/Forms/FormSection.tsx +++ b/studio/components/ui/Forms/FormSection.tsx @@ -28,8 +28,18 @@ const FormSection = ({ ) } -const FormSectionLabel = ({ children }: { children: React.ReactNode | string }) => { - return +const FormSectionLabel = ({ + className = '', + children, +}: { + className?: string + children: React.ReactNode | string +}) => { + return ( + + ) } const Shimmer = () => ( diff --git a/studio/components/ui/InformationBox.tsx b/studio/components/ui/InformationBox.tsx index d5e824a1e86..3d560569866 100644 --- a/studio/components/ui/InformationBox.tsx +++ b/studio/components/ui/InformationBox.tsx @@ -1,5 +1,6 @@ +import Link from 'next/link' import { FC, ReactNode, useState } from 'react' -import { IconMaximize2, IconMinimize2 } from 'ui' +import { Button, IconExternalLink, IconMaximize2, IconMinimize2 } from 'ui' interface Props { icon?: ReactNode @@ -64,13 +65,13 @@ const InformationBox: FC = ({
                  {description}
                  {url && ( - - {urlLabel} - + + + + + )} {button &&
                  {button}
                  } diff --git a/studio/jest.config.js b/studio/jest.config.js index cb7f3c95b01..03b07573f70 100644 --- a/studio/jest.config.js +++ b/studio/jest.config.js @@ -3,6 +3,7 @@ module.exports = { moduleDirectories: ['', 'node_modules'], setupFiles: ['jest-canvas-mock', './tests/setup/radix'], testEnvironment: 'jsdom', + testTimeout: 20000, testRegex: '(.*\\.test.(js|jsx|ts|tsx)$)', transform: { '^.+\\.(t|j)sx?$': 'ts-jest' }, globals: { diff --git a/studio/lib/constants/metrics.tsx b/studio/lib/constants/metrics.tsx index 796925abace..3c1044e536c 100644 --- a/studio/lib/constants/metrics.tsx +++ b/studio/lib/constants/metrics.tsx @@ -209,6 +209,12 @@ export const METRICS = [ provider: 'daily-stats', category: METRIC_CATEGORIES.API_STORAGE, }, + { + key: 'total_storage_image_render_count', + label: 'Storage Images Transformed', + provider: 'daily-stats', + category: METRIC_CATEGORIES.API_STORAGE, + }, { key: 'total_storage_requests', label: 'Storage Requests', diff --git a/studio/lib/gotrue.ts b/studio/lib/gotrue.ts index 4bd03f121ab..e4c6383a150 100644 --- a/studio/lib/gotrue.ts +++ b/studio/lib/gotrue.ts @@ -18,7 +18,7 @@ export const getAuthUser = async (token: String): Promise => { return { user, error: null } } catch (err) { - console.log(err) + console.error(err) return { user: null, error: err } } } diff --git a/studio/package.json b/studio/package.json index f127a053018..ac126783233 100644 --- a/studio/package.json +++ b/studio/package.json @@ -50,7 +50,7 @@ "markdown-table": "=2.0.0", "mobx": "^6.3.2", "mobx-react-lite": "^3.2.0", - "next": "12.0.9", + "next": "12.1.0", "next-compose-plugins": "^2.2.1", "next-transpile-modules": "^9.0.0", "openapi-types": "^9.1.0", diff --git a/studio/pages/project/[ref]/editor/[id].tsx b/studio/pages/project/[ref]/editor/[id].tsx index 6dc45feb8fb..a93f9815ef7 100644 --- a/studio/pages/project/[ref]/editor/[id].tsx +++ b/studio/pages/project/[ref]/editor/[id].tsx @@ -3,7 +3,7 @@ import { NextPage } from 'next' import { useRouter } from 'next/router' import { observer } from 'mobx-react-lite' import { isUndefined, isNaN } from 'lodash' -import { Modal } from 'ui' +import { Checkbox, Modal } from 'ui' import { PostgresTable, PostgresColumn } from '@supabase/postgres-meta' import Base64 from 'lib/base64' @@ -24,6 +24,8 @@ const TableEditorPage: NextPage = () => { const [isDeleting, setIsDeleting] = useState(false) const [isDuplicating, setIsDuplicating] = useState(false) + const [isDeleteWithCascade, setIsDeleteWithCascade] = useState(false) + const [selectedColumnToDelete, setSelectedColumnToDelete] = useState() const [selectedTableToDelete, setSelectedTableToDelete] = useState() @@ -70,6 +72,7 @@ const TableEditorPage: NextPage = () => { const onDeleteColumn = (column: PostgresColumn) => { setIsDeleting(true) setSelectedColumnToDelete(column) + setIsDeleteWithCascade(false) } const onAddTable = () => { @@ -87,6 +90,7 @@ const TableEditorPage: NextPage = () => { const onDeleteTable = (table: PostgresTable) => { setIsDeleting(true) setSelectedTableToDelete(table) + setIsDeleteWithCascade(false) } const onDuplicateTable = (table: PostgresTable) => { @@ -141,7 +145,7 @@ const TableEditorPage: NextPage = () => { try { if (isUndefined(selectedTableToDelete)) return - const response: any = await meta.tables.del(selectedTableToDelete.id) + const response: any = await meta.tables.del(selectedTableToDelete.id, isDeleteWithCascade) if (response.error) throw response.error const tables = meta.tables.list((table: PostgresTable) => table.schema === selectedSchema) @@ -156,6 +160,7 @@ const TableEditorPage: NextPage = () => { category: 'success', message: `Successfully deleted ${selectedTableToDelete.name}`, }) + if (selectedSchema) await meta.schemas.loadViews(selectedSchema) } catch (error: any) { ui.setNotification({ error, @@ -217,9 +222,17 @@ const TableEditorPage: NextPage = () => { } children={ -

                  - Are you sure you want to delete the selected table? This action cannot be undone. -

                  +
                  +

                  + Are you sure you want to delete the selected table? This action cannot be undone. +

                  + setIsDeleteWithCascade(!isDeleteWithCascade)} + /> +
                  } buttonLabel="Delete" diff --git a/studio/pages/project/[ref]/editor/index.tsx b/studio/pages/project/[ref]/editor/index.tsx index 481c332e059..7532dd7fc3c 100644 --- a/studio/pages/project/[ref]/editor/index.tsx +++ b/studio/pages/project/[ref]/editor/index.tsx @@ -55,6 +55,7 @@ const Editor: NextPage = () => { category: 'success', message: `Successfully deleted ${selectedTableToDelete!.name}`, }) + await meta.schemas.loadViews(selectedSchema) } catch (error: any) { ui.setNotification({ category: 'error', diff --git a/studio/pages/project/[ref]/settings/api.tsx b/studio/pages/project/[ref]/settings/api.tsx index 63af221d05f..e3e6b2e887e 100644 --- a/studio/pages/project/[ref]/settings/api.tsx +++ b/studio/pages/project/[ref]/settings/api.tsx @@ -37,7 +37,7 @@ const ApiSettings: NextPageWithLayout = () => { return ( -
                  +
                  diff --git a/studio/pages/project/[ref]/settings/auth.tsx b/studio/pages/project/[ref]/settings/auth.tsx index 4ac0f372b80..cd090a2af79 100644 --- a/studio/pages/project/[ref]/settings/auth.tsx +++ b/studio/pages/project/[ref]/settings/auth.tsx @@ -4,11 +4,9 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { NextPageWithLayout } from 'types' import { checkPermissions, useStore } from 'hooks' -import AutoSchemaForm from 'components/interfaces/Auth/AutoSchemaForm' import { SettingsLayout } from 'components/layouts' -import { FormsContainer } from 'components/ui/Forms' import NoPermission from 'components/ui/NoPermission' -import { SmtpForm } from 'components/interfaces' +import { SmtpForm, AutoSchemaForm } from 'components/interfaces/Auth' const PageLayout: NextPageWithLayout = () => { const { ui, authConfig } = useStore() @@ -23,7 +21,7 @@ const PageLayout: NextPageWithLayout = () => { return } else if (authConfig) { return ( -
                  +
                  diff --git a/studio/pages/project/[ref]/settings/billing/update/pro.tsx b/studio/pages/project/[ref]/settings/billing/update/pro.tsx index 180e4f2ddc8..fb6db5a4c29 100644 --- a/studio/pages/project/[ref]/settings/billing/update/pro.tsx +++ b/studio/pages/project/[ref]/settings/billing/update/pro.tsx @@ -12,7 +12,7 @@ import Connecting from 'components/ui/Loading/Loading' import { StripeSubscription } from 'components/interfaces/Billing' import { ProUpgrade } from 'components/interfaces/Billing' import { PaymentMethod } from 'components/interfaces/Billing/Billing.types' -import { DatabaseAddon } from 'components/interfaces/Billing/AddOns/AddOns.types' +import { SubscriptionAddon } from 'components/interfaces/Billing/AddOns/AddOns.types' const BillingUpdatePro: NextPageWithLayout = () => { const { ui } = useStore() @@ -24,7 +24,7 @@ const BillingUpdatePro: NextPageWithLayout = () => { const projectUpdateDisabled = useFlag('disableProjectCreationAndUpdate') const [subscription, setSubscription] = useState() - const [products, setProducts] = useState<{ tiers: any[]; addons: DatabaseAddon[] }>() + const [products, setProducts] = useState<{ tiers: any[]; addons: SubscriptionAddon[] }>() const [paymentMethods, setPaymentMethods] = useState() const [isLoadingPaymentMethods, setIsLoadingPaymentMethods] = useState(false) diff --git a/studio/pages/project/[ref]/settings/vault/keys.tsx b/studio/pages/project/[ref]/settings/vault/keys.tsx new file mode 100644 index 00000000000..3fed0798173 --- /dev/null +++ b/studio/pages/project/[ref]/settings/vault/keys.tsx @@ -0,0 +1,49 @@ +import { useEffect } from 'react' +import { useRouter } from 'next/router' +import { observer } from 'mobx-react-lite' +import { Tabs } from 'ui' + +import { useParams, useStore } from 'hooks' +import { NextPageWithLayout } from 'types' +import { SettingsLayout } from 'components/layouts' +import { VaultToggle, EncryptionKeysManagement } from 'components/interfaces/Settings/Vault' +import { FormHeader } from 'components/ui/Forms' + +const VaultSettingsSecrets: NextPageWithLayout = () => { + const router = useRouter() + const { meta, vault } = useStore() + const { ref } = useParams() + + const vaultExtension = meta.extensions.byId('supabase_vault') + const isEnabled = vaultExtension !== undefined && vaultExtension?.installed_version !== null + + useEffect(() => { + vault.load() + }, []) + + return ( +
                  + + {!isEnabled ? ( + + ) : ( + { + if (id === 'secrets') router.push(`/project/${ref}/settings/vault/secrets`) + }} + > + + + + + + )} +
                  + ) +} + +VaultSettingsSecrets.getLayout = (page) => {page} +export default observer(VaultSettingsSecrets) diff --git a/studio/pages/project/[ref]/settings/vault/secrets.tsx b/studio/pages/project/[ref]/settings/vault/secrets.tsx new file mode 100644 index 00000000000..995cdd0b9de --- /dev/null +++ b/studio/pages/project/[ref]/settings/vault/secrets.tsx @@ -0,0 +1,49 @@ +import { useEffect } from 'react' +import { useRouter } from 'next/router' +import { observer } from 'mobx-react-lite' +import { Tabs } from 'ui' + +import { useParams, useStore } from 'hooks' +import { NextPageWithLayout } from 'types' +import { SettingsLayout } from 'components/layouts' +import { VaultToggle, SecretsManagement } from 'components/interfaces/Settings/Vault' +import { FormHeader } from 'components/ui/Forms' + +const VaultSettingsSecrets: NextPageWithLayout = () => { + const router = useRouter() + const { meta, vault } = useStore() + const { ref } = useParams() + + const vaultExtension = meta.extensions.byId('supabase_vault') + const isEnabled = vaultExtension !== undefined && vaultExtension?.installed_version !== null + + useEffect(() => { + vault.load() + }, []) + + return ( +
                  + + {!isEnabled ? ( + + ) : ( + { + if (id === 'keys') router.push(`/project/${ref}/settings/vault/keys`) + }} + > + + + + + + )} +
                  + ) +} + +VaultSettingsSecrets.getLayout = (page) => {page} +export default observer(VaultSettingsSecrets) diff --git a/studio/public/img/vault-dark.png b/studio/public/img/vault-dark.png new file mode 100644 index 00000000000..9b7c9e3e0c1 Binary files /dev/null and b/studio/public/img/vault-dark.png differ diff --git a/studio/public/img/vault-light.png b/studio/public/img/vault-light.png new file mode 100644 index 00000000000..54f0c9c8eae Binary files /dev/null and b/studio/public/img/vault-light.png differ diff --git a/studio/public/img/vault.png b/studio/public/img/vault.png new file mode 100644 index 00000000000..9a3f456952d Binary files /dev/null and b/studio/public/img/vault.png differ diff --git a/studio/stores/RootStore.ts b/studio/stores/RootStore.ts index eadb3754d51..6520c228b2e 100644 --- a/studio/stores/RootStore.ts +++ b/studio/stores/RootStore.ts @@ -1,4 +1,4 @@ -import { configure, reaction } from 'mobx' +import { configure } from 'mobx' import { Project } from 'types' import AppStore, { IAppStore } from './app/AppStore' import MetaStore, { IMetaStore } from './pgmeta/MetaStore' @@ -9,6 +9,7 @@ import ProjectBackupsStore, { IProjectBackupsStore } from './project/ProjectBack import ProjectAuthConfigStore, { IProjectAuthConfigStore, } from './authConfig/ProjectAuthConfigStore' +import VaultStore, { IVaultStore } from './project/VaultStore' // Temporary disable mobx warnings // TODO: need to remove this after refactoring old stores. @@ -24,6 +25,7 @@ export interface IRootStore { functions: IProjectFunctionsStore backups: IProjectBackupsStore authConfig: IProjectAuthConfigStore + vault: IVaultStore selectedProjectRef?: string @@ -38,6 +40,7 @@ export class RootStore implements IRootStore { functions: IProjectFunctionsStore backups: IProjectBackupsStore authConfig: IProjectAuthConfigStore + vault: IVaultStore selectedProjectRef: string | undefined @@ -50,6 +53,7 @@ export class RootStore implements IRootStore { this.functions = new ProjectFunctionsStore(this, { projectRef: '' }) this.backups = new ProjectBackupsStore(this, { projectRef: '' }) this.authConfig = new ProjectAuthConfigStore(this, { projectRef: '' }) + this.vault = new VaultStore(this) } /** diff --git a/studio/stores/common/PostgresMetaInterface.ts b/studio/stores/common/PostgresMetaInterface.ts index 674946802e1..5345022f277 100644 --- a/studio/stores/common/PostgresMetaInterface.ts +++ b/studio/stores/common/PostgresMetaInterface.ts @@ -17,7 +17,7 @@ export interface IPostgresMetaInterface { load: () => void create: (payload: any) => Promise update: (id: number | string, updates: any) => Promise - del: (id: number | string) => Promise + del: (id: number | string, cascade?: boolean) => Promise list: (filter?: any) => T[] find: (filter?: any) => T | undefined byId: (id: number | string) => T | undefined @@ -187,10 +187,10 @@ export default class PostgresMetaInterface implements IPostgresMetaInterface< } } - async del(id: number | string) { + async del(id: number | string, cascade: boolean = false) { try { const headers = { 'Content-Type': 'application/json', ...this.headers } - const url = `${this.url}?id=${id}` + const url = cascade ? `${this.url}?id=${id}&cascade=${cascade}` : `${this.url}?id=${id}` const response = await delete_(url, {}, { headers }) if (response.error) throw response.error diff --git a/studio/stores/pgmeta/MetaStore.ts b/studio/stores/pgmeta/MetaStore.ts index 0e3e1bc3057..1f3cac332bb 100644 --- a/studio/stores/pgmeta/MetaStore.ts +++ b/studio/stores/pgmeta/MetaStore.ts @@ -1,6 +1,6 @@ import Papa from 'papaparse' import { makeObservable, observable } from 'mobx' -import { find, isUndefined, isEqual, isEmpty, chunk } from 'lodash' +import { find, isUndefined, isEqual, isEmpty, chunk, values } from 'lodash' import { Query } from 'components/grid/query/Query' import { @@ -87,7 +87,8 @@ export interface IMetaStore { createColumn: ( payload: CreateColumnPayload, selectedTable: PostgresTable, - foreignKey?: Partial + foreignKey?: Partial, + securityConfiguration?: { isEncrypted: boolean; keyId?: string; keyName?: string } ) => any updateColumn: ( id: string, @@ -157,6 +158,7 @@ export default class MetaStore implements IMetaStore { 'realtime', 'storage', 'supabase_functions', + 'vault', 'graphql', 'graphql_public', ] @@ -299,7 +301,7 @@ export default class MetaStore implements IMetaStore { publish_insert: true, publish_update: true, publish_delete: true, - tables: [] + tables: [], }) if (publicationCreateError) throw publicationCreateError realtimePublication = publication @@ -315,7 +317,7 @@ export default class MetaStore implements IMetaStore { : publicTables .filter((t: any) => t.id !== table.id) .map((t: any) => `${t.schema}.${t.name}`) - const { error } = await this.publications.update(id, { tables: realtimeTables }) + const { error } = await this.publications.update(id, { tables: realtimeTables }) publicationUpdateError = error } else { const isAlreadyEnabled = publicationTables.some((x: any) => x.id == table.id) @@ -346,8 +348,13 @@ export default class MetaStore implements IMetaStore { async createColumn( payload: CreateColumnPayload, selectedTable: PostgresTable, - foreignKey?: Partial + foreignKey?: Partial, + securityConfiguration?: { isEncrypted: boolean; keyId?: string; keyName?: string } ) { + const toastId = this.rootStore.ui.setNotification({ + category: 'loading', + message: `Creating column "${payload.name}"...`, + }) try { // Once pg-meta supports composite keys, we can remove this logic const { isPrimaryKey, ...formattedPayload } = payload @@ -357,6 +364,11 @@ export default class MetaStore implements IMetaStore { // Firing createColumn in createTable will bypass this block if (isPrimaryKey) { + this.rootStore.ui.setNotification({ + id: toastId, + category: 'loading', + message: 'Assigning primary key to column...', + }) // Same logic in createTable: Remove any primary key constraints first (we'll add it back later) // @ts-ignore const existingPrimaryKeys = selectedTable.primary_keys.map((x) => x.name) @@ -372,10 +384,46 @@ export default class MetaStore implements IMetaStore { } if (!isUndefined(foreignKey)) { + this.rootStore.ui.setNotification({ + id: toastId, + category: 'loading', + message: 'Adding foreign key to column...', + }) const relation: any = await this.addForeignKey(foreignKey) if (relation.error) throw relation.error } + + const { isEncrypted, keyId, keyName } = securityConfiguration || {} + if (isEncrypted) { + this.rootStore.ui.setNotification({ + id: toastId, + category: 'loading', + message: 'Encrypting column...', + }) + let encryptionKey = keyId + if (keyId === 'create-new') { + const addKeyRes = await this.rootStore.vault.addKey(keyName) + if (addKeyRes.error) throw addKeyRes.error + else encryptionKey = addKeyRes[0].id + } + if (encryptionKey !== undefined) { + const encryptColumnRes = await this.rootStore.vault.encryptColumn(column, encryptionKey) + if (encryptColumnRes.error) throw encryptColumnRes.error + } + } + this.rootStore.ui.setNotification({ + id: toastId, + category: 'success', + message: `Successfully created column "${column.name}"`, + }) } catch (error: any) { + this.rootStore.ui.setNotification({ + id: toastId, + category: 'error', + message: `An error occured while creating the column "${payload.name}"`, + }) + const query = `alter table "${selectedTable.name}" drop column if exists "${payload.name}";` + await this.rootStore.meta.query(query) return { error } } } diff --git a/studio/stores/pgmeta/SchemaStore.ts b/studio/stores/pgmeta/SchemaStore.ts index b8762efec64..7a0082db225 100644 --- a/studio/stores/pgmeta/SchemaStore.ts +++ b/studio/stores/pgmeta/SchemaStore.ts @@ -1,13 +1,17 @@ +import { observable, makeObservable } from 'mobx' import { PostgresSchema } from '@supabase/postgres-meta' import PostgresMetaInterface, { IPostgresMetaInterface } from '../common/PostgresMetaInterface' import { IRootStore } from '../RootStore' -import { ResponseError } from 'types' +import { SchemaView, ResponseError } from 'types' export interface ISchemaStore extends IPostgresMetaInterface { - getViews: (schema: string) => Promise + views: SchemaView[] + loadViews: (schema: string) => Promise } export default class SchemaStore extends PostgresMetaInterface { + views: SchemaView[] = [] + constructor( rootStore: IRootStore, dataUrl: string, @@ -17,14 +21,20 @@ export default class SchemaStore extends PostgresMetaInterface { options?: { identifier: string } ) { super(rootStore, dataUrl, headers, options) + makeObservable(this, { + views: observable, + }) + this.views = [] } - async getViews(schema: string) { + async loadViews(schema: string) { const query = ` select schemaname as schema, viewname as name from pg_catalog.pg_views where schemaname = '${schema}' order by schemaname, viewname; ` - return await this.rootStore.meta.query(query) + const views = await this.rootStore.meta.query(query) + this.views = views + return views } } diff --git a/studio/stores/project/VaultStore.ts b/studio/stores/project/VaultStore.ts new file mode 100644 index 00000000000..a8c6f220171 --- /dev/null +++ b/studio/stores/project/VaultStore.ts @@ -0,0 +1,229 @@ +import { PostgresColumn } from '@supabase/postgres-meta' +import { Query } from 'components/grid' +import { makeAutoObservable } from 'mobx' +import { VaultSecret } from 'types' +import { IRootStore } from '../RootStore' + +export interface IVaultStore { + isLoading: boolean + isInitialized: boolean + isLoaded: boolean + error: any + + load: () => void + listKeys: (filter?: any) => EncryptionKey[] + addKey: (name?: string) => any + deleteKey: (id: string) => any + encryptColumn: (column: PostgresColumn, keyId: string) => any + + listSecrets: (filter?: any) => VaultSecret[] + addSecret: (secret: Partial) => any + updateSecret: (id: string, payload: Partial) => any + deleteSecret: (id: string) => any + fetchSecretValue: (id: string) => any + listEncryptedColumns: (table: string) => any +} + +interface EncryptionKey { + id: string + key_id: number + name: string + comment: string + created: string + status: string +} + +export default class VaultStore implements IVaultStore { + rootStore: IRootStore + + STATES = { + INITIAL: 'initial', + LOADING: 'loading', + ERROR: 'error', + LOADED: 'loaded', + } + + data: { keys: EncryptionKey[]; secrets: VaultSecret[] } = { keys: [], secrets: [] } + state = this.STATES.INITIAL + error = null + + constructor(rootStore: IRootStore) { + this.rootStore = rootStore + makeAutoObservable(this) + } + + get isLoading() { + return this.state === this.STATES.INITIAL || this.state === this.STATES.LOADING + } + + get isInitialized() { + return this.state !== this.STATES.INITIAL + } + + get isLoaded() { + return this.state === this.STATES.LOADED + } + + async fetchData() { + const vault = { keys: [], secrets: [] } + + const keysQuery = new Query() + .from('key', 'pgsodium') + .select('id,key_id,name,comment,created,status') + .toSql() + const keys = await this.rootStore.meta.query(keysQuery) + if (!keys.error) vault.keys = keys + + const secretsQuery = new Query() + .from('secrets', 'vault') + .select('id,name,description,secret,key_id,created_at,updated_at') + .toSql() + const secrets = await this.rootStore.meta.query(secretsQuery) + if (!secrets.error) vault.secrets = secrets + + this.data = vault + return vault + } + + async load() { + let { LOADING, ERROR, LOADED } = this.STATES + try { + this.error = null + if (this.state !== LOADED) this.state = LOADING + await this.fetchData() + this.state = LOADED + return this.data + } catch (e: any) { + console.error('Failed to load vault data', e.message) + this.error = e + this.state = ERROR + } + } + + listKeys(filter?: any) { + const arr = this.data.keys.slice() + + if (!!filter) { + return arr + .filter(filter) + .sort((a: any, b: any) => Number(new Date(a.created)) - Number(new Date(b.created))) + } else { + return arr.sort((a: any, b: any) => Number(new Date(a.created)) - Number(new Date(b.created))) + } + } + + async addKey(name?: string) { + const res = + name !== undefined + ? await this.rootStore.meta.query(`select * from pgsodium.create_key(name := '${name}')`) + : await this.rootStore.meta.query(`select * from pgsodium.create_key()`) + if (!res.error) { + this.data.keys = this.data.keys.concat(res) + } + return res + } + + async deleteKey(id: string) { + const query = new Query().from('key', 'pgsodium').delete().match({ id }).toSql() + const res = await this.rootStore.meta.query(query) + if (!res.error) { + this.data.keys = this.data.keys.filter((key) => key.id !== id) + } + return res + } + + async encryptColumn(column: PostgresColumn, keyId: string) { + const query = `security label for pgsodium on column "${column.table}"."${column.name}" is 'ENCRYPT WITH KEY ID ${keyId}';` + return await this.rootStore.meta.query(query) + } + + listSecrets(filter?: any) { + const arr = this.data.secrets.slice() + + if (!!filter) { + return arr + .filter(filter) + .sort((a: any, b: any) => Number(new Date(a.created_at)) - Number(new Date(b.created_at))) + } else { + return arr.sort( + (a: any, b: any) => Number(new Date(a.created_at)) - Number(new Date(b.created_at)) + ) + } + } + + async addSecret(newSecret: Partial) { + const { name, description, secret, key_id } = newSecret + const query = new Query() + .from('secrets', 'vault') + .insert([{ name, description, secret, key_id }], { returning: true }) + .toSql() + const res = await this.rootStore.meta.query(query) + if (!res.error) { + this.data.secrets = this.data.secrets.concat(res) + } + return res + } + + async updateSecret(id: string, payload: Partial) { + const query = new Query() + .from('decrypted_secrets', 'vault') + .update({ ...payload, updated_at: new Date().toISOString() }, { returning: true }) + .match({ id }) + .toSql() + const res = await this.rootStore.meta.query(query) + if (!res.error) { + this.data.secrets = this.data.secrets.map((secret) => { + if (secret.id === res[0].id) return res[0] + else return secret + }) + } + return res + } + + async deleteSecret(id: string) { + const query = new Query().from('secrets', 'vault').delete().match({ id }).toSql() + const res = await this.rootStore.meta.query(query) + if (!res.error) { + this.data.secrets = this.data.secrets.filter((secret) => secret.id !== id) + } + return res + } + + async fetchSecretValue(id: string) { + const query = new Query() + .from('decrypted_secrets', 'vault') + .select('decrypted_secret') + .match({ id }) + .toSql() + const res = await this.rootStore.meta.query(query) + if (!res.error) { + this.data.secrets = this.data.secrets.map((secret) => { + if (secret.id === id) { + return { ...secret, decryptedSecret: res[0].decrypted_secret } + } else { + return secret + } + }) + } + return res[0].decrypted_secret + } + + async listEncryptedColumns(table: string) { + if (!table) return [] + + const decryptedView = this.rootStore.meta.schemas.views.find( + (view) => view.name === `decrypted_${table}` + ) + if (!decryptedView) return [] + + const encryptedColumns = await this.rootStore.meta.query( + `SELECT column_name as name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'decrypted_${table}' and column_name like 'decrypted_%'` + ) + if (!encryptedColumns.error) { + return encryptedColumns.map((column: any) => column.name.split('decrypted_')[1]) + } else { + console.error('Error fetching encrypted columns', encryptedColumns.error) + return [] + } + } +} diff --git a/studio/styles/main.scss b/studio/styles/main.scss index fff104ca410..b1ba9f4d06d 100644 --- a/studio/styles/main.scss +++ b/studio/styles/main.scss @@ -218,4 +218,10 @@ div.fixed.inset-0 { .capitalize-sentence:first-letter { text-transform: capitalize; +} + +.input-clear { + input { + @apply pr-7; + } } \ No newline at end of file diff --git a/studio/tests/pages/projects/LogsPreviewer.test.js b/studio/tests/pages/projects/LogsPreviewer.test.js index d6a6147ec6a..0b8420e9c14 100644 --- a/studio/tests/pages/projects/LogsPreviewer.test.js +++ b/studio/tests/pages/projects/LogsPreviewer.test.js @@ -391,10 +391,11 @@ test('filters alter generated query', async () => { await waitFor(() => { // counts are adjusted - expect(get).not.toHaveBeenCalledWith(expect.stringMatching(/count.+\*.+as.count.+where.+500.+599/)) + expect(get).not.toHaveBeenCalledWith( + expect.stringMatching(/count.+\*.+as.count.+where.+500.+599/) + ) expect(get).toHaveBeenCalledWith(expect.stringMatching(/count.+\*.+as.count.+where.+400.+499/)) - expect(get).not.toHaveBeenCalledWith(expect.stringContaining('500')) expect(get).not.toHaveBeenCalledWith(expect.stringContaining('599')) expect(get).not.toHaveBeenCalledWith(expect.stringContaining('200')) diff --git a/studio/types/ui.ts b/studio/types/ui.ts index e14c8948e7e..b3e5b4befb9 100644 --- a/studio/types/ui.ts +++ b/studio/types/ui.ts @@ -19,3 +19,19 @@ export interface ChartIntervals { startUnit: 'hour' | 'day' format: 'MMM D, h:mma' | 'MMM D, ha' | 'MMM D' } + +export interface VaultSecret { + id: string + name: string + description: string + secret: string + decryptedSecret?: string + key_id: string + created_at: string + updated_at: string +} + +export interface SchemaView { + name: string + schema: string +}