diff --git a/apps/docs/.env.example b/apps/docs/.env.example deleted file mode 100644 index 81e97461ea0df..0000000000000 --- a/apps/docs/.env.example +++ /dev/null @@ -1,14 +0,0 @@ -# PUBLIC -NEXT_PUBLIC_SUPABASE_URL=http://localhost:54321 -NEXT_PUBLIC_SUPABASE_ANON_KEY= - -# PRIVATE -OPENAI_KEY= -SUPABASE_SERVICE_ROLE_KEY= -SEARCH_GITHUB_APP_ID= -SEARCH_GITHUB_APP_INSTALLATION_ID= -SEARCH_GITHUB_APP_PRIVATE_KEY= - -# Set IS_PLATFORM to true if you have the api keys and urls -NEXT_PUBLIC_IS_PLATFORM=false -NEXT_PUBLIC_LOCAL_SUPABASE=false diff --git a/apps/docs/.eslintrc.js b/apps/docs/.eslintrc.js deleted file mode 100644 index e0b422e408e7b..0000000000000 --- a/apps/docs/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('config/eslint-preset') diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore deleted file mode 100644 index b18b47afe4b8c..0000000000000 --- a/apps/docs/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# Dependencies -/node_modules - -# Production -/build - -# Generated files -.cache-loader - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.staging.local -.env.production.local -*.swp - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -**/*/generated/**/* -!**/*/generated/.gitkeep -!**/*/generated/**/.gitkeep diff --git a/apps/docs/DEVELOPERS.md b/apps/docs/DEVELOPERS.md deleted file mode 100644 index a998eaba7d255..0000000000000 --- a/apps/docs/DEVELOPERS.md +++ /dev/null @@ -1,101 +0,0 @@ -# Developing Supabase Docs - -## Getting started - -Thanks for your interest in [Supabase docs](https://supabase.com/docs) and for wanting to contribute! Before you begin, read the -[code of conduct](https://github.com/supabase/.github/blob/main/CODE_OF_CONDUCT.md) and check out the -[existing issues](https://github.com/supabase/supabase/issues). -This document describes how to set up your development environment to contribute to [Supabase docs](https://supabase.com/docs). - -For a complete run-down on how all of our tools work together, see the main DEVELOPERS.md. That readme describes how to get set up locally in lots of detail, including minimum requirements, our Turborepo setup, installing packages, sharing components across projects, and more. This readme deals specifically with the docs site. - -## Local setup - -[supabase.com/docs](https://supabase.com/docs) is a Next.JS site. You can get setup by following the same steps for all of our other Next.JS projects: - -1. Follow the steps outlined in the Local Development section of the main [DEVELOPERS.md](https://github.com/supabase/supabase/blob/master/DEVELOPERS.md) -2. If you work at Supabase, run `dev:secrets:pull` to pull down the internal environment variables. If you're a community member, create a `.env` file and add this line to it: `NEXT_PUBLIC_IS_PLATFORM=false` -3. Start the local docs site by navigating to `/apps/docs` and running `npm run dev` -4. Visit http://localhost:3001/docs in your browser - don't forget to append the `/docs` to the end -5. Your local site should look exactly like [https://supabase.com/docs](https://supabase.com/docs) - -## Types of documentation - -[https://supabase.com/docs](https://supabase.com/docs) has several different kinds of documentation, all coming from different sources. - -### Guides - -The primary, instructional type of content. Basically anything that lives on the `https://supabase.com/docs/guides` route. This includes Guides for Auth, Database, Storage, Realtime, Edge Functions, as well as general resources, self-hosting instructions, and integrations. These are all [`.mdx`](https://mdxjs.com/) files — a combination of Markdown and Javascript. - -#### Things to know - -Here's a simple [example](https://supabase.com/docs/guides/functions) `.mdx` Guide, and here is [the source on Github](https://raw.githubusercontent.com/supabase/supabase/master/apps/docs/pages/guides/functions.mdx). - -Some things to note: - -1. The files need to import a Layout at the top -2. The files need to export a `Page` at the bottom with the `` component -3. The files frontmatter is stored in `const meta = {}`. You should always include `title` and `description`. -4. You can write Markdown as you normally would, but you can also write regular Javascript and JSX. Note the `examples` array that we iterate over. -5. Any Javascript variables you use in these files need to be exported in order to be used (i.e., `export const examples = []`). - -##### Using components - -You can use any standard React components in these `.mdx` files without having to explicitly import them in each file. All components get imported in a [common components](https://github.com/supabase/supabase/blob/master/apps/docs/components/index.tsx) file and can be used in any `.mdx` file. Components can also be "intercepted" and modified via this file. Note how we're intercepting the `h2`, `h3` and `code` tags and modifying them before converting the `mdx` to `html`. - -### Reference docs for client libraries - -We maintain client libraries for [JavaScript](https://supabase.com/docs/reference/javascript) and [Flutter/Dart](https://supabase.com/docs/reference/dart) (with more to come). These reference docs document every object and method available for developers to use. They are assembled from different sources and work much differently than the `.mdx` Guides we just looked at. - -The client libraries are essentially wrappers around the clients for the various tools we use — GoTrue, PostgREST, Storage, Functions, and Realtime. The easiest way to describe how the things fit together is to look at an example and trace where the various pieces of information are coming from. - -#### Example - -Let's look at the `updateUser()` function in the `supabase-js` library. - -#### Common file - -Several pieces of information for this function come from a [common file](https://github.com/supabase/supabase/blob/3d774b3b7bcdcb410e25726d832467584ebea686/spec/common-client-libs-sections.json#L548) where we store information shared by all libraries. - -1. id — used to identify this function -2. title - the human-readable title -3. slug — the url slug -4. product - the Supabase tool or product that "owns" this function. Since `updateUser()` is an auth function, its product is `auth` -5. type — `updateUser()` is a function and marked as such, but we can also have sections of markdown interspersed with these function definitions. - -When a new function is added, this info would need to be manually added to the common file. - -#### Function Parameters - -The `updateUser()` function takes one parameter: `attributes`. The details for this parameter live in the GoTrue client library, referenced via a `$ref` property in the `supabase-js` [spec file](https://github.com/supabase/supabase/blob/cb04d85262db6a371539dda7df9b00ba5a901e87/spec/supabase_js_v2.yml#L357). Here, the `$ref` property is pointing to the [actual function definition](https://github.com/supabase/gotrue-js/blob/2d60e79073b96ae8c97a6ce18e2601ed1e2a2712/src/GoTrueClient.ts#L590) in the `gotrue-js` library. The accepted values for the `attributes` parameter come from the [type definition](https://github.com/supabase/gotrue-js/blob/16d3deb822097e8640a3a15b94a5690b3beaf11b/src/lib/types.ts#L233). - -These individual library spec files are fetched via this [Makefile](https://github.com/supabase/supabase/blob/master/spec/Makefile), and get [transformed](https://github.com/supabase/supabase/blob/master/spec/enrichments/tsdoc_v2/supabase_dereferenced.json) to combine the information we need (params, types, etc). Unless you're a library maintainer, you shouldn't need to worry about this part of the process. - -If you are a library maintainer, the last important note about these library files is that the [Makefile](https://github.com/supabase/supabase/blob/master/spec/Makefile) pulls from the `gh-pages` branch of the client library repo. Here's an example of the [`realtime-js` spec file](https://github.com/supabase/realtime-js/blob/gh-pages/v2/spec.json). Updating something like function params or returns, the process is: - -1. Get your changes merged to `master` in your library -2. This will kick off an action that automatically updates the spec file in the library's `gh-pages` branch -3. Run `make` in `/spec` of the `supabase/supabase` repo. This will regenerate all of the `tsdoc` files that the docs site uses -4. You should now see the changes you've made in the docs site locally - -#### Function Examples - -The `updateUser()` function has three examples listed with it. The examples are stored along with the `$ref` property in the [supabase_js_v2 spec file](https://github.com/supabase/supabase/blob/master/spec/supabase_js_v2.yml). - -#### Rendering in Next.JS - -These reference docs are rendered by Next.JS via a dynamic route using a [`[...slug.tsx]`](https://github.com/supabase/supabase/blob/master/apps/docs/pages/reference/javascript/%5B...slug%5D.tsx). Here, we use the library [spec file](https://github.com/supabase/supabase/blob/bd0514553c627db8f1e8d0b3ae440ccb6759d228/apps/docs/pages/reference/javascript/%5B...slug%5D.tsx#L4) and the [common file](https://github.com/supabase/supabase/blob/bd0514553c627db8f1e8d0b3ae440ccb6759d228/apps/docs/pages/reference/javascript/%5B...slug%5D.tsx#L1) to output the info you see on the page. - -### Other reference docs - -The reference docs for the [Supabase Management API](https://supabase.com/docs/reference/api) and the [Supabase CLI](https://supabase.com/docs/reference/cli) are a little more straightforward than the client libraries. Both files also have a [common file](https://github.com/supabase/supabase/blob/master/spec/common-cli-sections.json) which handles things like `title`, `id` and `slug`. Both also have a spec file detailing things like parameters, descriptions, and responses ([Management API](https://github.com/supabase/supabase/blob/master/spec/api_v0_openapi.json) / [CLI](https://github.com/supabase/supabase/blob/master/spec/cli_v1_commands.yaml)) - -On the Next.JS side of things, these work almost exactly the same as the client libaries with a dynamic [`[...slug.tsx]`](https://github.com/supabase/supabase/blob/master/apps/docs/pages/reference/cli/%5B...slug%5D.tsx). - -### Misc - -#### Search - -Search is handled using a Supabase instance. During CI, [a script](https://github.com/supabase/supabase/blob/master/apps/docs/scripts/search/generate-embeddings.ts) aggregates all content sources (eg. guides, reference docs, etc), indexes them using OpenAI embeddings, and stores them in a Supabase database. - -At runtime, an [Edge Function](https://github.com/supabase/supabase/blob/master/supabase/functions) is executed that performs a similarity search between the user's query and the above content sources using [`pgvector`](https://github.com/pgvector/pgvector) embeddings. diff --git a/apps/docs/README.md b/apps/docs/README.md deleted file mode 100644 index 7ae88ade7d078..0000000000000 --- a/apps/docs/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# Reference Docs - -Supabase Reference Docs - -## Maintainers - -If you are a maintainer of any tools in the Supabase ecosystem, you can use this site to provide documentation for the tools & libraries that you maintain. - -## Types of docs - -There are many types of docs: - -1. Guides: teach developers how to use a product. "I have XX problem, how do I solve it?" -2. Tutorials: walk-throughs, have a large outcome. "Build a React application with Supabase". -3. Explanations: teach developers about a broad topic. "What is a database?" -4. Reference: technical descriptions of tools and how to use them. "What errors does the API return?" - -In these docs, you should focus only on the fourth type: "Reference Docs". - -## Versioning - -All tools have versioned docs, which are kept in separate folders. For example, the CLI has the following folders and files: - -- `cli`: the "next" release. -- `cli_spec`: contains the DocSpec for the "next" release (see below). -- `cli_versioned_docs`: a version of the documentation for every release (including the most current version). -- `cli_versioned_sidebars`: a version of the sidebar for every release (including the most current version). - -When you release a new version of a tool, you should also release a new version of the docs. You can do this via the command line. For example, if you just released the CLI version `1.0.1`: - -``` -npm run cli:version 1.0.1 -``` - -## DocSpec - -We use documentation specifications which can be used to generate human-readable docs. - -- OpenAPI: for documenting API endpoints. -- SDKSpec (custom to Supabase): for SDKs and client libraries. -- ConfigSpec (custom to Supabase): for configuration options. -- CLISpec (custom to Supabase): for CLI commands and usage. - -The benefit of using custom specifications is that we can generate many other types from a strict schema (eg, HTML and manpages). -It also means that we can switch any documentation system we want. On this site we use Next.JS, but in Supabase's official website we use a custom React site and expose only a subset of the available API for each tool. diff --git a/apps/docs/components/AppleSecretGenerator.tsx b/apps/docs/components/AppleSecretGenerator.tsx deleted file mode 100644 index 4029b1d87708c..0000000000000 --- a/apps/docs/components/AppleSecretGenerator.tsx +++ /dev/null @@ -1,192 +0,0 @@ -import { useState } from 'react' -import { Admonition, Button, Input } from 'ui' - -function base64URL(value: string) { - return globalThis.btoa(value).replace(/[=]/g, '').replace(/[+]/g, '-').replace(/[\/]/g, '_') -} - -/* -Convert a string into an ArrayBuffer -from https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String -*/ -function stringToArrayBuffer(value: string) { - const buf = new ArrayBuffer(value.length) - const bufView = new Uint8Array(buf) - for (let i = 0; i < value.length; i++) { - bufView[i] = value.charCodeAt(i) - } - return buf -} - -function arrayBufferToString(buf) { - return String.fromCharCode.apply(null, new Uint8Array(buf)) -} - -const generateAppleSecretKey = async ( - kid: string, - iss: string, - sub: string, - file: File -): Promise<{ kid: string; jwt: string; exp: number }> => { - if (!kid) { - const match = file.name.match(/AuthKey_([^.]+)[.].*$/i) - if (match && match[1]) { - kid = match[1] - } - } - - if (!kid) { - throw new Error( - `No Key ID provided. The file "${file.name}" does not follow the AuthKey_XXXXXXXXXX.p8 pattern. Please provide a Key ID manually.` - ) - } - - const contents = await file.text() - - if (!contents.match(/^\s*-+BEGIN PRIVATE KEY-+[^-]+-+END PRIVATE KEY-+\s*$/i)) { - throw new Error(`Chosen file does not appear to be a PEM encoded PKCS8 private key file.`) - } - - // remove PEM headers and spaces - const pkcs8 = stringToArrayBuffer( - globalThis.atob(contents.replace(/-+[^-]+-+/g, '').replace(/\s+/g, '')) - ) - - const privateKey = await globalThis.crypto.subtle.importKey( - 'pkcs8', - pkcs8, - { - name: 'ECDSA', - namedCurve: 'P-256', - }, - true, - ['sign'] - ) - - const iat = Math.floor(Date.now() / 1000) - const exp = iat + 180 * 24 * 60 * 60 - - const jwt = [ - base64URL(JSON.stringify({ typ: 'JWT', kid, alg: 'ES256' })), - base64URL( - JSON.stringify({ - iss, - sub, - iat, - exp, - aud: 'https://appleid.apple.com', - }) - ), - ] - - const signature = await globalThis.crypto.subtle.sign( - { - name: 'ECDSA', - hash: 'SHA-256', - }, - privateKey, - stringToArrayBuffer(jwt.join('.')) - ) - - jwt.push(base64URL(arrayBufferToString(signature))) - - return { kid, jwt: jwt.join('.'), exp } -} - -const AppleSecretGenerator = () => { - const [file, setFile] = useState({ file: null as File | null }) - const [teamID, setTeamID] = useState('') - const [serviceID, setServiceID] = useState('') - const [keyID, setKeyID] = useState('') - const [secretKey, setSecretKey] = useState('') - const [expiresAt, setExpiresAt] = useState('') - const [error, setError] = useState('') - - return ( - <> - setTeamID(e.target.value.trim())} - /> - setServiceID(e.target.value.trim())} - /> - setKeyID(e.target.value.trim())} - /> -
- { - setFile({ file: e.target.files[0] }) - }} - /> -
-
- - - - {error && {error}} - - {secretKey && ( - <> -
- - - )} - - ) -} - -export default AppleSecretGenerator diff --git a/apps/docs/components/AuthProviders.tsx b/apps/docs/components/AuthProviders.tsx deleted file mode 100644 index 82a57180a4bfa..0000000000000 --- a/apps/docs/components/AuthProviders.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import providers from '../data/authProviders' -import { IconPanel } from 'ui' -import Link from 'next/link' - -export default function AuthProviders({ type }: { type: string }) { - const filterProviders = providers.filter((item) => item.authType === type) - - return ( - <> -
- {filterProviders.map((x) => ( - - - - - - ))} -
- - ) -} diff --git a/apps/docs/components/ButtonCard.tsx b/apps/docs/components/ButtonCard.tsx deleted file mode 100644 index f1aa4caefbcc0..0000000000000 --- a/apps/docs/components/ButtonCard.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React, { FC, ReactNode } from 'react' -import Link from 'next/link' -import Image from 'next/image' - -interface Props { - title: string - description?: string - to: string - icon?: string | any - children?: any - layout?: 'vertical' | 'horizontal' -} - -const ButtonCard: FC = ({ - children = undefined, - icon = undefined, - title, - description = '', - to, - layout = 'vertical', -}) => { - return ( - - - {children ? ( - children - ) : ( -
- {icon && typeof icon == 'string' ? ( -
- {title} -
- ) : ( - icon - )} -

{title}

-

{description}

-
- )} -
- - ) -} - -export default ButtonCard diff --git a/apps/docs/components/ComesFrom.tsx b/apps/docs/components/ComesFrom.tsx deleted file mode 100644 index 052b50d409955..0000000000000 --- a/apps/docs/components/ComesFrom.tsx +++ /dev/null @@ -1,22 +0,0 @@ -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.test.ts b/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.test.ts deleted file mode 100644 index 2d2d1285229b4..0000000000000 --- a/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.test.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { getAnchor, removeAnchor } from './CustomHTMLElements.utils' - -describe('CustomHTMLElementsUtils', () => { - describe('getAnchor', () => { - describe('when value is an object', () => { - it('returns slugified version of props.children', () => { - const value = { - props: { - children: 'Full Text Search', - }, - } - - const result = getAnchor(value) - - expect(result).toStrictEqual('full-text-search') - }) - }) - - describe('when value is an array', () => { - describe('when custom anchor exists', () => { - it('returns inner slug', () => { - const value = ['Proximity: <->', '[#proximity]'] - - const result = getAnchor(value) - - expect(result).toStrictEqual('proximity') - }) - - it('trims whitespace', () => { - const value = ['Proximity: <->', ' [#proximity] '] - - const result = getAnchor(value) - - expect(result).toStrictEqual('proximity') - }) - }) - - it('returns concatenated slug of elements', () => { - const value = ['Full', 'Text', 'Search'] - - const result = getAnchor(value) - - expect(result).toStrictEqual('full-text-search') - }) - - it('trims whitespace', () => { - const value = [' Full ', ' Text ', ' Search '] - - const result = getAnchor(value) - - expect(result).toStrictEqual('full-text-search') - }) - - it('removes special characters', () => { - const value = ['function()'] - - const result = getAnchor(value) - - expect(result).toStrictEqual('function') - }) - }) - - describe('when value is a string', () => { - it('returns slugified version of string', () => { - const value = 'My (Very) Awesome Heading' - - const result = getAnchor(value) - - expect(result).toStrictEqual('my-very-awesome-heading') - }) - }) - }) - - describe('removeAnchor', () => { - describe('when value is an array', () => { - it('filters out custom anchor elements', () => { - const value = ['My (Very) Awesome Heading', '[#my-custom-heading]'] - - const result = removeAnchor(value) - - expect(result).toStrictEqual(['My (Very) Awesome Heading']) - }) - }) - - describe('when value is a string', () => { - it('strips out custom anchor string', () => { - const value = 'My (Very) Awesome Heading [#my-custom-heading]' - - const result = removeAnchor(value) - - // Original implementation didn't trim the resulting string - not sure if it really matters - expect(result).toStrictEqual('My (Very) Awesome Heading ') - }) - }) - }) -}) diff --git a/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts b/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts deleted file mode 100644 index 337f48b2bbfd3..0000000000000 --- a/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts +++ /dev/null @@ -1,101 +0,0 @@ -// Check if heading has custom anchor first, before forming the anchor based on the title -export const getAnchor = (text: any): string | undefined => { - if (typeof text === 'object') { - if (Array.isArray(text)) { - const customAnchor = text.find((x) => typeof x === 'string' && hasCustomAnchor(x)) - if (customAnchor !== undefined) { - return parseCustomAnchor(customAnchor) - } - - const formattedText = text - .map((x) => { - if (typeof x !== 'string') { - return x.props.children - } - - return x.trim() - }) - .map((x) => { - if (typeof x !== 'string') { - return x - } - - return slugify(x) - }) - - return formattedText.join('-').toLowerCase() - } else { - const anchor = text.props.children - if (typeof anchor === 'string') { - return slugify(anchor) - } - return anchor - } - } else if (typeof text === 'string') { - if (hasCustomAnchor(text)) { - return parseCustomAnchor(text) - } - return slugify(text) - } else { - return undefined - } -} - -const hasCustomAnchor = (value: string): boolean => value.includes('[#') && value.includes(']') - -const parseCustomAnchor = (value: string): string => - value.slice(value.indexOf('[#') + 2, value.indexOf(']')) - -const slugify = (value: string): string => - value - .toLowerCase() - .trim() - .replace(/[^a-z0-9- ]/g, '') - .replace(/[ ]/g, '-') - -export const removeAnchor = (text: any) => { - if (typeof text === 'object' && Array.isArray(text)) { - return text.filter((x) => !(typeof x === 'string' && hasCustomAnchor(x))) - } else if (typeof text === 'string') { - if (text.indexOf('[#') > 0) return text.slice(0, text.indexOf('[#')) - else return text - } - return text -} - -export const highlightSelectedTocItem = (id: string) => { - const tocMenuItems = document.querySelectorAll('.toc-menu a') - - // find any currently active items and remove them - const currentActiveItem = document.querySelector('.toc-menu .toc__menu-item--active') - currentActiveItem?.classList.remove('toc__menu-item--active') - - // Add active class to the current item - tocMenuItems.forEach((item) => { - // @ts-ignore - if (item.href.split('#')[1] === id) { - item.classList.add('toc__menu-item--active') - } - }) -} - -// find any currently active items and remove them on route change -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') - currentActiveItems.forEach((item) => item.classList.remove('text-brand')) - - // Add active class to the current item - navMenuItems.forEach((item) => { - if (item.href.split('/').at(-1) === id) { - item.classList.add('text-brand') - } - }) -} diff --git a/apps/docs/components/CustomHTMLElements/Heading.tsx b/apps/docs/components/CustomHTMLElements/Heading.tsx deleted file mode 100644 index 336dba4d0f7e4..0000000000000 --- a/apps/docs/components/CustomHTMLElements/Heading.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { - getAnchor, - removeAnchor, - highlightSelectedTocItem, - unHighlightSelectedTocItems, -} from './CustomHTMLElements.utils' -import { useInView } from 'react-intersection-observer' - -/** - * [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 - parseAnchors?: boolean - customAnchor?: string -} - -/** - * This TOC is used in .mdx files and in .tsx files. - * In mdx files, we need to parse the content and format them to match the - * expected tocList format (text, link,level). - * - * In tsx files, we can generate this tocList directly. For these files, we don't - * need to parse the and generate anchors. Custom anchors are used in tsx files. - * (see: /pages/guides/cli/config.tsx) - */ -const Heading: React.FC = ({ tag, customAnchor, children }) => { - const HeadingTag = `${tag}` as any - const anchor = customAnchor ? customAnchor : getAnchor(children) - const link = `#${anchor}` - - const { ref } = useInView({ - threshold: 1, - rootMargin: '-20% 0% -35% 0px', - onChange: (inView, entry) => { - if (window.scrollY === 0) unHighlightSelectedTocItems() - if (inView) highlightSelectedTocItem(entry.target.id) - }, - }) - - return ( - - {removeAnchor(children)} - {anchor && ( - - # - - )} - - ) -} -export default Heading diff --git a/apps/docs/components/CustomHTMLElements/InlineCode.tsx b/apps/docs/components/CustomHTMLElements/InlineCode.tsx deleted file mode 100644 index 5ee5811c2f455..0000000000000 --- a/apps/docs/components/CustomHTMLElements/InlineCode.tsx +++ /dev/null @@ -1,13 +0,0 @@ -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 className = children.length < 70 ? 'short-inline-codeblock' : '' - - return HELLO WORLD {children} -} -export default InlineCodeTag diff --git a/apps/docs/components/CustomHTMLElements/index.tsx b/apps/docs/components/CustomHTMLElements/index.tsx deleted file mode 100644 index 56ded7aefd170..0000000000000 --- a/apps/docs/components/CustomHTMLElements/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import Heading from './Heading' - -export { Heading } diff --git a/apps/docs/components/DocsCoverLogo.tsx b/apps/docs/components/DocsCoverLogo.tsx deleted file mode 100644 index b7065feb555f9..0000000000000 --- a/apps/docs/components/DocsCoverLogo.tsx +++ /dev/null @@ -1,497 +0,0 @@ -import React from 'react' -import { LazyMotion, domAnimation, m } from 'framer-motion' - -const DocsCoverLogo = () => { - const pathMotionConfig = { - initial: { pathLength: 0 }, - animate: { pathLength: 1 }, - transition: { - duration: 1, - delay: 0.2, - ease: [0.5, 0.11, 0.13, 1], - }, - } - const logoMotionConfig = { - initial: { fillOpacity: 0 }, - animate: { fillOpacity: 1 }, - transition: { - duration: 1, - delay: 0.5, - ease: [0.25, 0.25, 0, 1], - }, - } - - return ( -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- ) -} - -export default DocsCoverLogo diff --git a/apps/docs/components/Extensions.tsx b/apps/docs/components/Extensions.tsx deleted file mode 100644 index b49c5ad83d34d..0000000000000 --- a/apps/docs/components/Extensions.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import Link from 'next/link' -import React, { useState } from 'react' -import { GlassPanel, IconLink, IconX, Input } from 'ui' -import extensions from '../data/extensions.json' - -type Extension = { - name: string - comment: string - tags: string[] - link: string -} - -type LinkTarget = React.ComponentProps<'a'>['target'] - -function getLinkTarget(link: string): LinkTarget { - // Link is relative, open in the same tab - if (link.startsWith('/')) { - return '_self' - } - // Link is external, open in a new tab - return '_blank' -} - -function getUniqueTags(json: Extension[]): string[] { - const tags = [] - for (const item of json) { - if (item.tags) { - tags.push(...item.tags) - } - } - return [...new Set(tags)] -} - -export default function Extensions() { - const [searchTerm, setSearchTerm] = useState('') - const [filters, setFilters] = useState([]) - - const tags = getUniqueTags(extensions) - - function handleChecked(tag: string) { - if (filters.includes(tag)) { - setFilters(filters.filter((x) => x !== tag)) - } else { - setFilters([...filters, tag]) - } - } - - return ( - <> -
- - setSearchTerm(e.target.value)} - /> -
-
-
-
-

Filter

-
    - {tags.sort().map((tag) => ( -
  • - -
  • - ))} -
-

- -

-
-
- -
-
- {extensions - .filter((x) => x.name.indexOf(searchTerm) >= 0) - .filter((x) => - filters.length === 0 ? x : x.tags.some((item) => filters.includes(item)) - ) - .map((extension) => ( - - - -

- {extension.comment.charAt(0).toUpperCase() + extension.comment.slice(1)} -

-
-
- - //
- //
- //

- // {extension.name} - //

- //

- // {extension.comment.charAt(0).toUpperCase() + extension.comment.slice(1)} - //

- // {extension.link && ( - // - // - // - // - // - // - // - // )} - //
- //
- ))} -
-
-
- - ) -} diff --git a/apps/docs/components/Favicons.tsx b/apps/docs/components/Favicons.tsx deleted file mode 100644 index 8ab82f3c178ea..0000000000000 --- a/apps/docs/components/Favicons.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import Head from 'next/head' -import { useRouter } from 'next/router' - -const Favicons = () => { - const { basePath } = useRouter() - return ( - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - {/* prettier-ignore */} - - - - - - - - - - - - {/* misc */} - - - - - ) -} - -export default Favicons diff --git a/apps/docs/components/Flag/Flag.tsx b/apps/docs/components/Flag/Flag.tsx deleted file mode 100644 index ea95b33834f09..0000000000000 --- a/apps/docs/components/Flag/Flag.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React, { ReactNode } from 'react' -import { useFlag } from '~/hooks/useFlag' - -interface Props { - children: ReactNode - name: string -} - -function Flag({ children, name }: Props) { - const flagValue = useFlag(name) - if (!flagValue) { - return null - } - return <>{children} -} - -export default Flag diff --git a/apps/docs/components/Flag/FlagContext.ts b/apps/docs/components/Flag/FlagContext.ts deleted file mode 100644 index 6c58ab54c84e7..0000000000000 --- a/apps/docs/components/Flag/FlagContext.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createContext } from 'react' - -const FlagContext = createContext({}) - -export default FlagContext diff --git a/apps/docs/components/Flag/FlagProvider.tsx b/apps/docs/components/Flag/FlagProvider.tsx deleted file mode 100644 index 4cb3f362fa7cc..0000000000000 --- a/apps/docs/components/Flag/FlagProvider.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { FC, useEffect, useState } from 'react' -// import createConfigCatClient from 'configcat-js' -import FlagContext from './FlagContext' - -const FlagProvider: FC = ({ children }) => { - const [store, setStore] = useState({}) - const { Provider } = FlagContext - - // useEffect(() => { - // getFlags() - // }, []) - - // const getFlags = async () => { - // const setFlagValues = async () => { - // const flagValues = await client.getAllValuesAsync() - // const flagStore: any = {} - - // flagValues.forEach((item: any) => { - // flagStore[item.settingKey] = item.settingValue - // }) - // setStore(flagStore) - // } - - // const client = createConfigCatClient(process.env.NEXT_PUBLIC_CONFIGCAT_SDK_KEY ?? '', { - // configChanged: setFlagValues, - // pollIntervalSeconds: 600, - // }) - - // await setFlagValues() - // } - - return {children} -} - -export default FlagProvider diff --git a/apps/docs/components/FooterHelpCallout.tsx b/apps/docs/components/FooterHelpCallout.tsx deleted file mode 100644 index 429ed15d4e644..0000000000000 --- a/apps/docs/components/FooterHelpCallout.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { ReactMarkdown } from 'react-markdown/lib/react-markdown' - -export type FooterHelpCalloutType = 'default' | 'postgres' - -const content = { - default: { - title: 'Need some help?', - description: `Not to worry, our specialist engineers are here to help. Submit a support ticket through the [Dashboard](https://supabase.com/dashboard/support/new).`, - }, - postgres: { - title: 'Looking for Serverless Postgres?', - description: `Supabase is the fastest way to get started with Postgres in a serverless environment. [Learn more](https://supabase.com/database?utm=postgres-helpers).`, - }, -} - -const FooterHelpCallout = ({ - footerHelpType = 'default', - title, -}: { - footerHelpType: FooterHelpCalloutType - title: any -}) => { - return ( -
-
-
{content[footerHelpType].title}
- {content[footerHelpType].description} -
-
- ) -} - -export default FooterHelpCallout diff --git a/apps/docs/components/Frameworks.tsx b/apps/docs/components/Frameworks.tsx deleted file mode 100644 index 2b88f60474863..0000000000000 --- a/apps/docs/components/Frameworks.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import ButtonCard from './ButtonCard' -import { useTheme } from 'common/Providers' - -const Frameworks = () => { - const { isDarkMode } = useTheme() - - const frameworks = [ - { - name: 'Angular', - logo: { - light: '/docs/img/icons/angular-icon.svg', - dark: '/docs/img/icons/angular-icon.svg', - }, - href: '/guides/with-angular', - }, - { - name: 'Expo', - logo: { - 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/icons/flutter-icon.svg', - dark: '/docs/img/icons/flutter-icon.svg', - }, - href: '/guides/with-flutter', - }, - { - name: 'JavaScript', - logo: { - light: '/docs/img/icons/javascript-icon.svg', - dark: '/docs/img/icons/javascript-icon.svg', - }, - href: '/reference/javascript/installing#javascript', - }, - { - name: 'Kotlin', - logo: { - light: '/docs/img/icons/kotlin-icon.svg', - dark: '/docs/img/icons/kotlin-icon.svg', - }, - href: '/guides/with-kotlin', - }, - { - name: 'Next.js', - logo: { - 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/icons/react-icon.svg', - dark: '/docs/img/icons/react-icon.svg', - }, - href: '/guides/with-react', - }, - { - name: 'RedwoodJS', - logo: { - light: '/docs/img/icons/redwoodjs-icon.svg', - dark: '/docs/img/icons/redwoodjs-icon.svg', - }, - href: '/guides/with-redwoodjs', - }, - { - name: 'SolidJS', - logo: { - light: '/docs/img/icons/solidjs-icon.svg', - dark: '/docs/img/icons/solidjs-icon.svg', - }, - href: '/guides/with-solidjs', - }, - { - name: 'Svelte', - logo: { - light: '/docs/img/icons/svelte-icon.svg', - dark: '/docs/img/icons/svelte-icon.svg', - }, - href: '/guides/with-svelte', - }, - { - name: 'Vue', - logo: { - light: '/docs/img/icons/vuejs-icon.svg', - dark: '/docs/img/icons/vuejs-icon.svg', - }, - href: '/guides/with-vue-3', - }, - { - name: 'refine', - logo: { - light: '/docs/img/icons/refine-icon.svg', - dark: '/docs/img/icons/refine-icon.svg', - }, - href: '/guides/getting-started/tutorials/with-refine', - }, - ] - return ( -
- {frameworks.map((x) => ( -
- -
- ))} -
- ) -} - -export default Frameworks diff --git a/apps/docs/components/FunctionsExamples.tsx b/apps/docs/components/FunctionsExamples.tsx deleted file mode 100644 index d9326121c3459..0000000000000 --- a/apps/docs/components/FunctionsExamples.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import ButtonCard from 'components/ButtonCard' - -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: 'Type-Safe SQL with Kysely', - description: - 'Combining Kysely with Deno Postgres gives you a convenient developer experience for interacting directly with your Postgres database.', - href: '/guides/functions/kysely-postgres', - }, - { - 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', - }, -] - -const FunctionsExamples = () => { - return ( -
- {examples.map((x) => ( -
- -
- ))} -
- ) -} - -export default FunctionsExamples diff --git a/apps/docs/components/GithubCard.tsx b/apps/docs/components/GithubCard.tsx deleted file mode 100644 index 8780bbd0af6dc..0000000000000 --- a/apps/docs/components/GithubCard.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' - -export default function GithubCard({ title, description, href, stars, handle }) { - return ( - -
-

{title}

- {description} -
-
-
-
@{handle}
-
{stars} ★
-
-
- ) -} diff --git a/apps/docs/components/GuidesTableOfContents.tsx b/apps/docs/components/GuidesTableOfContents.tsx deleted file mode 100644 index 553f3165452cb..0000000000000 --- a/apps/docs/components/GuidesTableOfContents.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { FC } from 'react' -import { removeAnchor } from './CustomHTMLElements/CustomHTMLElements.utils' - -const formatSlug = (slug: string) => { - // [Joshen] We will still provide support for headers declared like this: - // ## REST API {#rest-api-overview} - // At least for now, this was a docusaurus thing. - if (slug.includes('#')) return slug.split('#')[1] - return slug -} - -const formatTOCHeader = (content: string) => { - let begin = false - const res = [] - for (const x of content) { - if (x === '`') { - if (!begin) { - begin = true - res.push(``) - } else { - begin = false - res.push(``) - } - } else { - res.push(x) - } - } - return res.join('') -} - -interface TOCHeader { - id: number - level: number - text: string - link: string -} - -interface Props { - list: TOCHeader[] -} - -const GuidesTableOfContents: FC = ({ list }) => { - return ( - - ) -} - -export default GuidesTableOfContents diff --git a/apps/docs/components/HomePageCover.tsx b/apps/docs/components/HomePageCover.tsx deleted file mode 100644 index 657083befd21c..0000000000000 --- a/apps/docs/components/HomePageCover.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import Link from 'next/link' -import { IconBackground, IconPanel, IconPlay } from 'ui' -import { useBreakpoint } from 'common' -import DocsCoverLogo from './DocsCoverLogo' - -const HomePageCover = (props) => { - const isXs = useBreakpoint(639) - const iconSize = isXs ? 'sm' : 'lg' - - const frameworks = [ - { - tooltip: 'ReactJS', - icon: '/docs/img/icons/react-icon', - href: '/guides/getting-started/quickstarts/reactjs', - }, - { - tooltip: 'NextJS', - icon: '/docs/img/icons/nextjs-icon', - href: '/guides/getting-started/quickstarts/nextjs', - }, - { - tooltip: 'RedwoodJS', - icon: '/docs/img/icons/redwoodjs-icon', - href: '/guides/getting-started/quickstarts/redwoodjs', - }, - { - tooltip: 'Flutter', - icon: '/docs/img/icons/flutter-icon', - href: '/guides/getting-started/quickstarts/flutter', - }, - { - tooltip: 'Android Kotlin', - icon: '/docs/img/icons/kotlin-icon', - href: '/guides/getting-started/quickstarts/kotlin', - }, - { - tooltip: 'SvelteKit', - icon: '/docs/img/icons/svelte-icon', - href: '/guides/getting-started/quickstarts/sveltekit', - }, - { - tooltip: 'SolidJS', - icon: '/docs/img/icons/solidjs-icon', - href: '/guides/getting-started/quickstarts/solidjs', - }, - { - tooltip: 'Vue', - icon: '/docs/img/icons/vuejs-icon', - href: '/guides/getting-started/quickstarts/vue', - }, - { - tooltip: 'NuxtJS', - icon: '/docs/img/icons/nuxt-icon', - href: '/guides/getting-started/quickstarts/nuxtjs', - }, - { - tooltip: 'refine', - icon: '/docs/img/icons/refine-icon', - href: '/guides/getting-started/quickstarts/refine', - }, - ] - - const GettingStarted = () => ( - - ) - - return ( -
-
-
- -
-

{props.meta?.title}

-

- Learn how to get up and running with Supabase through tutorials, APIs and platform - resources. -

-
-
-
- -
-
-
- ) -} - -export default HomePageCover diff --git a/apps/docs/components/JwtGenerator.js b/apps/docs/components/JwtGenerator.js deleted file mode 100644 index f435a6db78065..0000000000000 --- a/apps/docs/components/JwtGenerator.js +++ /dev/null @@ -1,92 +0,0 @@ -import React, { useState } from 'react' -import KJUR from 'jsrsasign' -import { Button, Select, Input, CodeBlock } from 'ui' - -const JWT_HEADER = { alg: 'HS256', typ: 'JWT' } -const now = new Date() -const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()) -const fiveYears = new Date(now.getFullYear() + 5, now.getMonth(), now.getDate()) -const anonToken = ` -{ - "role": "anon", - "iss": "supabase", - "iat": ${Math.floor(today / 1000)}, - "exp": ${Math.floor(fiveYears / 1000)} -} -`.trim() - -const serviceToken = ` -{ - "role": "service_role", - "iss": "supabase", - "iat": ${Math.floor(today / 1000)}, - "exp": ${Math.floor(fiveYears / 1000)} -} -`.trim() - -export default function JwtGenerator({}) { - const secret = [...Array(40)].map(() => Math.random().toString(36)[2]).join('') - - const [jwtSecret, setJwtSecret] = useState(secret) - const [token, setToken] = useState(anonToken) - const [signedToken, setSignedToken] = useState('') - - const handleKeySelection = (e) => { - const val = e.target.value - if (val == 'service') setToken(serviceToken) - else setToken(anonToken) - } - const generate = () => { - const signedJWT = KJUR.jws.JWS.sign(null, JWT_HEADER, token, jwtSecret) - setSignedToken(signedJWT) - } - - return ( -
-
- - setJwtSecret(e.target.value)} - /> -
-
- - -
- -
- - setToken(e.target.value)} - /> -
- - - - {signedToken && ( -
-

Generated Token:

- - {signedToken} - -
- )} -
- ) -} diff --git a/apps/docs/components/LinkCard.tsx b/apps/docs/components/LinkCard.tsx deleted file mode 100644 index 6e22200bbda34..0000000000000 --- a/apps/docs/components/LinkCard.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import Link from 'next/link' -import { ReactElement } from 'react' - -export default function LinkCard({ - title, - description, - icon, - link, -}: { - title: string - description: string - icon: any - link: string -}) { - return ( - - - {description ? ( - <> -

{title}

-

{description}

- - ) : ( -
- {icon} -

{title}

-
- )} -
- - ) -} diff --git a/apps/docs/components/LinkCardsWrapper.tsx b/apps/docs/components/LinkCardsWrapper.tsx deleted file mode 100644 index a268902457db3..0000000000000 --- a/apps/docs/components/LinkCardsWrapper.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { ReactElement } from 'react' - -export default function LinkCardsWrapper({ children }: { children: any }) { - return
{children}
-} diff --git a/apps/docs/components/MDX/ai/quickstart_hf_deployment.mdx b/apps/docs/components/MDX/ai/quickstart_hf_deployment.mdx deleted file mode 100644 index 595b1f8f25b7f..0000000000000 --- a/apps/docs/components/MDX/ai/quickstart_hf_deployment.mdx +++ /dev/null @@ -1,5 +0,0 @@ -## Deployment - -If you have your own infrastructure for deploying Python apps, you can continue to use `vecs` as described in this guide. - -Alternatively if you would like to quickly deploy using Supabase, check out our guide on using the [Hugging Face Inference API](/docs/guides/ai/hugging-face) in Edge Functions using TypeScript. diff --git a/apps/docs/components/MDX/database_setup.mdx b/apps/docs/components/MDX/database_setup.mdx deleted file mode 100644 index c54b9b32f846b..0000000000000 --- a/apps/docs/components/MDX/database_setup.mdx +++ /dev/null @@ -1,18 +0,0 @@ -import { Tabs } from 'ui' -export const TabPanel = Tabs.Panel - -## Project setup - -Let's create a new Postgres database. This is as simple as starting a new Project in Supabase: - -1. [Create a new project](https://database.new/) in the Supabase dashboard. -1. Enter your project details. Remember to store your password somewhere safe. - -Your database will be available in less than a minute. - -**Finding your credentials:** - -You can find your project credentials inside the project [settings](https://supabase.com/dashboard/project/_/settings/), including: - -- [Database credentials](https://supabase.com/dashboard/project/_/settings/database): connection strings and connection pooler details. -- [API credentials](https://supabase.com/dashboard/project/_/settings/database): your serverless API URL and `anon` / `service_role` keys. diff --git a/apps/docs/components/MDX/kotlin_project_setup.mdx b/apps/docs/components/MDX/kotlin_project_setup.mdx deleted file mode 100644 index fbf2e6ebd09b2..0000000000000 --- a/apps/docs/components/MDX/kotlin_project_setup.mdx +++ /dev/null @@ -1,53 +0,0 @@ -import ProductManagementSQLTemplate from './product_management_sql_template.mdx' -import { Tabs } from 'ui' -export const TabPanel = Tabs.Panel - -## Project setup - -Before we start building we're going to set up our Database and API. This is as simple as starting a new Project in Supabase and then creating a "schema" inside the database. - -### Create a project - -1. [Create a new project](https://app.supabase.com) in the Supabase Dashboard. -1. Enter your project details. -1. Wait for the new database to launch. - -### Set up the database schema - -Now we are going to set up the database schema. You can just copy/paste the SQL from below and run it yourself. - - -{/* - -1. Go to the [SQL Editor](https://app.supabase.com/project/_/sql) page in the Dashboard. -2. Click **Product Management**. -3. Click **Run**. - - */} - - - - - - - -### Get the API Keys - -Now that you've created some database tables, you are ready to insert data using the auto-generated API. -We just need to get the Project URL and `anon` key from the API settings. - -1. Go to the [API Settings](https://app.supabase.com/project/_/settings/api) page in the Dashboard. -2. Find your Project `URL`, `anon`, and `service_role` keys on this page. - -### Set up Google Authentication - -From the [Google Console](https://console.developers.google.com/apis/library), create a new project and add OAuth2 credentials. - -![Create Google OAuth credentials](/docs/img/guides/kotlin/google-cloud-oauth-credentials-create.png) - -In your [Supabase Auth settings](https://app.supabase.com/project/_/auth/providers) enable Google as a provider and set the required credentials as outlined in the [auth docs](/docs/guides/auth/social-login/auth-google). diff --git a/apps/docs/components/MDX/product_management_sql_template.mdx b/apps/docs/components/MDX/product_management_sql_template.mdx deleted file mode 100644 index e54e89e1ca41c..0000000000000 --- a/apps/docs/components/MDX/product_management_sql_template.mdx +++ /dev/null @@ -1,35 +0,0 @@ -```sql --- Create a table for public profiles - -create table - public.products ( - id uuid not null default gen_random_uuid (), - name text not null, - price real not null, - image text null, - constraint products_pkey primary key (id) - ) tablespace pg_default; - --- Set up Storage! -insert into storage.buckets (id, name) - values ('Product Image', 'Product Image'); - --- Set up access controls for storage. --- See https://supabase.com/docs/guides/storage#policy-examples for more details. -CREATE POLICY "Enable read access for all users" ON "storage"."objects" -AS PERMISSIVE FOR SELECT -TO public -USING (true) - -CREATE POLICY "Enable insert for all users" ON "storage"."objects" -AS PERMISSIVE FOR INSERT -TO authenticated, anon -WITH CHECK (true) - -CREATE POLICY "Enable update for all users" ON "storage"."objects" -AS PERMISSIVE FOR UPDATE -TO public -USING (true) -WITH CHECK (true) - -``` diff --git a/apps/docs/components/MDX/project_setup.mdx b/apps/docs/components/MDX/project_setup.mdx deleted file mode 100644 index d7b095e1288a6..0000000000000 --- a/apps/docs/components/MDX/project_setup.mdx +++ /dev/null @@ -1,45 +0,0 @@ -import UserManagementSQLTemplate from './user_management_quickstart_sql_template.mdx' -import { Tabs } from 'ui' -export const TabPanel = Tabs.Panel - -## Project setup - -Before we start building we're going to set up our Database and API. This is as simple as starting a new Project in Supabase and then creating a "schema" inside the database. - -### Create a project - -1. [Create a new project](https://supabase.com/dashboard) in the Supabase Dashboard. -1. Enter your project details. -1. Wait for the new database to launch. - -### Set up the database schema - -Now we are going to set up the database schema. We can use the "User Management Starter" quickstart in the SQL Editor, or you can just copy/paste the SQL from below and run it yourself. - - - - -1. Go to the [SQL Editor](https://supabase.com/dashboard/project/_/sql) page in the Dashboard. -2. Click **User Management Starter**. -3. Click **Run**. - - - - - - - - - -### Get the API Keys - -Now that you've created some database tables, you are ready to insert data using the auto-generated API. -We just need to get the Project URL and `anon` key from the API settings. - -1. Go to the [API Settings](https://supabase.com/dashboard/project/_/settings/api) page in the Dashboard. -1. Find your Project `URL`, `anon`, and `service_role` keys on this page. diff --git a/apps/docs/components/MDX/quickstart_intro.mdx b/apps/docs/components/MDX/quickstart_intro.mdx deleted file mode 100644 index d20d9f32ece5a..0000000000000 --- a/apps/docs/components/MDX/quickstart_intro.mdx +++ /dev/null @@ -1,5 +0,0 @@ -This tutorial demonstrates how to build a basic user management app. The app authenticates and identifies the user, stores their profile information in the database, and allows the user to log in, update their profile details, and upload a profile photo. The app uses: - -- [Supabase Database](/docs/guides/database) - a Postgres database for storing your user data and [Row Level Security](/docs/guides/auth#row-level-security) so data is protected and users can only access their own information. -- [Supabase Auth](/docs/guides/auth) - users log in through magic links sent to their email (without having to set up passwords). -- [Supabase Storage](/docs/guides/storage) - users can upload a profile photo. diff --git a/apps/docs/components/MDX/social_provider_settings_supabase.mdx b/apps/docs/components/MDX/social_provider_settings_supabase.mdx deleted file mode 100644 index 394673df62045..0000000000000 --- a/apps/docs/components/MDX/social_provider_settings_supabase.mdx +++ /dev/null @@ -1,6 +0,0 @@ -- Go to your [Supabase Project Dashboard](https://supabase.com/dashboard) -- In the left sidebar, click the `Authentication` icon (near the top) -- Click on [`Providers`](https://supabase.com/dashboard/project/_/auth/providers) under the Configuration section -- Click on **{props.provider}** from the accordion list to expand and turn **{props.provider} Enabled** to ON -- Enter your **{props.provider} Client ID** and **{props.provider} Client Secret** saved in the previous step -- Click `Save` diff --git a/apps/docs/components/MDX/social_provider_setup.mdx b/apps/docs/components/MDX/social_provider_setup.mdx deleted file mode 100644 index e6c1fe7e6dc23..0000000000000 --- a/apps/docs/components/MDX/social_provider_setup.mdx +++ /dev/null @@ -1,8 +0,0 @@ -The next step requires a callback URL, which looks like this: - -`https://.supabase.co/auth/v1/callback` - -- Go to your [Supabase Project Dashboard](https://supabase.com/dashboard) -- Click on the `Authentication` icon in the left sidebar -- Click on [`Providers`](https://supabase.com/dashboard/project/_/auth/providers) under the Configuration section -- Click on **{props.provider}** from the accordion list to expand and you'll find your **Redirect URL**, you can click `Copy` to copy it to the clipboard diff --git a/apps/docs/components/MDX/storage_management.mdx b/apps/docs/components/MDX/storage_management.mdx deleted file mode 100644 index ce28a1684c82b..0000000000000 --- a/apps/docs/components/MDX/storage_management.mdx +++ /dev/null @@ -1,108 +0,0 @@ -If you upload additional profile photos, they'll accumulate -in the `avatars` bucket because of their random names with only the latest being referenced -from `public.profiles` and the older versions getting orphaned. - -To automatically remove obsolete storage objects, extend the database -triggers. Note that it is not sufficient to delete the objects from the -`storage.objects` table because that would orphan and leak the actual storage objects in -the S3 backend. Instead, invoke the storage API within Postgres via the `http` extension. - -Enable the [http extension for the `extensions` schema](https://supabase.com/dashboard/project/_/database/extensions) in the Dashboard. -Then, define the following SQL functions in the SQL Editor to delete -storage objects via the API: - -```sql -create or replace function delete_storage_object(bucket text, object text, out status int, out content text) -returns record -language 'plpgsql' -security definer -as $$ -declare - project_url text := ''; - service_role_key text := ''; -- full access needed - url text := project_url||'/storage/v1/object/'||bucket||'/'||object; -begin - select - into status, content - result.status::int, result.content::text - FROM extensions.http(( - 'DELETE', - url, - ARRAY[extensions.http_header('authorization','Bearer '||service_role_key)], - NULL, - NULL)::extensions.http_request) as result; -end; -$$; - -create or replace function delete_avatar(avatar_url text, out status int, out content text) -returns record -language 'plpgsql' -security definer -as $$ -begin - select - into status, content - result.status, result.content - from public.delete_storage_object('avatars', avatar_url) as result; -end; -$$; - -``` - -Next, add a trigger that removes any obsolete avatar whenever the -profile is updated or deleted: - -```sql -create or replace function delete_old_avatar() -returns trigger -language 'plpgsql' -security definer -as $$ -declare - status int; - content text; -begin - if coalesce(old.avatar_url, '') <> '' - and (tg_op = 'DELETE' or (old.avatar_url <> new.avatar_url)) then - select - into status, content - result.status, result.content - from public.delete_avatar(old.avatar_url) as result; - if status <> 200 then - raise warning 'Could not delete avatar: % %', status, content; - end if; - end if; - if tg_op = 'DELETE' then - return old; - end if; - return new; -end; -$$; - -create trigger before_profile_changes - before update of avatar_url or delete on public.profiles - for each row execute function public.delete_old_avatar(); - -``` - -Finally, delete the `public.profile` row before a user is deleted. -If this step is omitted, you won't be able to delete users without -first manually deleting their avatar image. - -```sql -create or replace function delete_old_profile() -returns trigger -language 'plpgsql' -security definer -as $$ -begin - delete from public.profiles where id = old.id; - return old; -end; -$$; - -create trigger before_delete_user - before delete on auth.users - for each row execute function public.delete_old_profile(); - -``` diff --git a/apps/docs/components/MDX/user_management_quickstart_sql_template.mdx b/apps/docs/components/MDX/user_management_quickstart_sql_template.mdx deleted file mode 100644 index ba55c4aeab38b..0000000000000 --- a/apps/docs/components/MDX/user_management_quickstart_sql_template.mdx +++ /dev/null @@ -1,55 +0,0 @@ -```sql --- Create a table for public profiles -create table profiles ( - id uuid references auth.users not null primary key, - updated_at timestamp with time zone, - username text unique, - full_name text, - avatar_url text, - website text, - - constraint username_length check (char_length(username) >= 3) -); --- Set up Row Level Security (RLS) --- See https://supabase.com/docs/guides/auth/row-level-security for more details. -alter table profiles - enable row level security; - -create policy "Public profiles are viewable by everyone." on profiles - for select using (true); - -create policy "Users can insert their own profile." on profiles - for insert with check (auth.uid() = id); - -create policy "Users can update own profile." on profiles - for update using (auth.uid() = id); - --- This trigger automatically creates a profile entry when a new user signs up via Supabase Auth. --- See https://supabase.com/docs/guides/auth/managing-user-data#using-triggers for more details. -create function public.handle_new_user() -returns trigger as $$ -begin - insert into public.profiles (id, full_name, avatar_url) - values (new.id, new.raw_user_meta_data->>'full_name', new.raw_user_meta_data->>'avatar_url'); - return new; -end; -$$ language plpgsql security definer; -create trigger on_auth_user_created - after insert on auth.users - for each row execute procedure public.handle_new_user(); - --- Set up Storage! -insert into storage.buckets (id, name) - values ('avatars', 'avatars'); - --- Set up access controls for storage. --- See https://supabase.com/docs/guides/storage#policy-examples for more details. -create policy "Avatar images are publicly accessible." on storage.objects - for select using (bucket_id = 'avatars'); - -create policy "Anyone can upload an avatar." on storage.objects - for insert with check (bucket_id = 'avatars'); - -create policy "Anyone can update their own avatar." on storage.objects - for update using (auth.uid() = owner) with check (bucket_id = 'avatars'); -``` diff --git a/apps/docs/components/Navigation/Footer.tsx b/apps/docs/components/Navigation/Footer.tsx deleted file mode 100644 index 6550b0f24cedb..0000000000000 --- a/apps/docs/components/Navigation/Footer.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import Link from 'next/link' -import { Button } from 'ui' -import { primaryLinks, secondaryLinks } from '~/data/footer' -import { LayoutMainContent } from '~/layouts/DefaultLayout' - -const Footer = () => ( - -
-
    - {primaryLinks.map(({ url, featherIcon: Icon, icon, text, ctaLabel }) => ( -
  • - {icon && ( - - - - )} - {Icon && } -

    {text}

    - - - {ctaLabel} - - -
  • - ))} -
-
-
-
-
- - © Supabase Inc - - - {secondaryLinks.map((item) => ( - - {item.title} - - ))} -
- -
-
-) - -export default Footer diff --git a/apps/docs/components/Navigation/Navigation.types.ts b/apps/docs/components/Navigation/Navigation.types.ts deleted file mode 100644 index 3882fb26e77c5..0000000000000 --- a/apps/docs/components/Navigation/Navigation.types.ts +++ /dev/null @@ -1,42 +0,0 @@ -export interface NavMenu { - [key: string]: NavMenuGroup[] -} - -export interface NavMenuGroup { - label: string - items: NavMenuSection[] -} - -export interface NavMenuSection { - name: string - url?: `/${string}` - items: Partial[] -} - -export interface References { - [key: string]: { - name: string - library?: string - versions: string[] - icon: string - currentVersion?: string - } -} - -type MenuItem = { - label: string - icon?: string - href?: `/${string}` | `https://${string}` - level?: string - hasLightIcon?: boolean - community?: boolean -} - -export type HomepageMenuItems = MenuItem[][] - -export type NavMenuConstant = Readonly<{ - title: string - icon: string - url?: `/${string}` - items: ReadonlyArray> -}> diff --git a/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx b/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx deleted file mode 100644 index 0cf04315a6905..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { useTheme } from 'common/Providers' -import Image from 'next/image' -import Link from 'next/link' -import { useRouter } from 'next/router' -import { Fragment } from 'react' -import { Badge, cn } from 'ui' -import { HOMEPAGE_MENU_ITEMS } from './NavigationMenu.constants' -import HomeMenuIconPicker from './HomeMenuIconPicker' - -const NavigationMenuHome = () => { - const router = useRouter() - const { isDarkMode } = useTheme() - - return ( -
- -
- ) -} - -export default NavigationMenuHome diff --git a/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx b/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx deleted file mode 100644 index bc7c67c60d3ab..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import React from 'react' -import { - IconMenuApi, - IconMenuAuth, - IconMenuCli, - IconMenuCsharp, - IconMenuDatabase, - IconMenuEdgeFunctions, - IconMenuFlutter, - IconMenuGettingStarted, - IconMenuHome, - IconMenuIntegrations, - IconMenuJavascript, - IconMenuPlatform, - IconMenuPython, - IconMenuRealtime, - IconMenuResources, - IconMenuSelfHosting, - IconMenuServerlessApis, - IconMenuStorage, - IconMenuSwift, - IconMenuStatus, - IconMenuKotlin, - IconMenuAI, -} from './HomeMenuIcons' - -function getMenuIcon(menuKey: string, width: number = 16, height: number = 16) { - switch (menuKey) { - case 'home': - return - case 'getting-started': - return - case 'database': - return - case 'serverless-apis': - return - case 'auth': - return - case 'edge-functions': - return - case 'realtime': - return - case 'storage': - return - case 'ai': - return - case 'platform': - return - case 'resources': - return - case 'self-hosting': - return - case 'integrations': - return - case 'reference-javascript': - return - case 'reference-dart': - return - case 'reference-python': - return - case 'reference-csharp': - return - case 'reference-swift': - return - case 'reference-kotlin': - return - case 'reference-api': - return - case 'reference-cli': - return - case 'status': - return - default: - return - } -} - -type HomeMenuIconPickerProps = { - icon: string - width?: number - height?: number -} - -export default function HomeMenuIconPicker({ - icon, - width = 16, - height = 16, -}: HomeMenuIconPickerProps) { - return getMenuIcon(icon, width, height) -} diff --git a/apps/docs/components/Navigation/NavigationMenu/HomeMenuIcons.tsx b/apps/docs/components/Navigation/NavigationMenu/HomeMenuIcons.tsx deleted file mode 100644 index 4d2e53f6ea257..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/HomeMenuIcons.tsx +++ /dev/null @@ -1,443 +0,0 @@ -import { products } from 'shared-data' - -type HomeMenuIcon = { - width?: number - height?: number -} -export function IconMenuHome({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuApi({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuAuth({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuCli({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuCsharp({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuDatabase({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuServerlessApis({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuEdgeFunctions({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuExtensions({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuFlutter({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuGettingStarted({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuIntegrations({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuJavascript({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuPlatform({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuPython({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuRealtime({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuResources({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuSelfHosting({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuStorage({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuAI({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuSwift({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuKotlin({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} - -export function IconMenuStatus({ width = 16, height = 16 }: HomeMenuIcon) { - return ( - - - - ) -} diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.Context.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.Context.tsx deleted file mode 100644 index f4fb58904cfd7..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.Context.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { createContext, useContext } from 'react' - -interface ContextProps { - activeRefItem: string - setActiveRefItem: (x: string) => void -} - -interface Provider extends ContextProps { - children?: React.ReactNode -} - -// Make sure the shape of the default value passed to -// createContext matches the shape that the consumers expect! -const NavMenuContext = createContext({ - activeRefItem: undefined, - setActiveRefItem: undefined, -}) - -export const NavigationMenuContextProvider = (props: Provider) => { - const { activeRefItem, setActiveRefItem } = props - - const value = { - activeRefItem, - setActiveRefItem, - } - - return {props.children} -} - -// context helper to avoid using a consumer component -export const useNavigationMenuContext = () => { - const context = useContext(NavMenuContext) - if (context === undefined) { - throw new Error(`useFormContextOnChange must be used within a FormContextProvider.`) - } - return context -} diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts deleted file mode 100644 index bdcdfc9584030..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ /dev/null @@ -1,1589 +0,0 @@ -import type { HomepageMenuItems, NavMenuConstant, References } from '../Navigation.types' - -export const HOMEPAGE_MENU_ITEMS: HomepageMenuItems = [ - [ - { - label: 'Home', - icon: 'home', - href: '/', - level: 'home', - }, - { - label: 'Getting Started', - icon: 'getting-started', - href: '/guides/getting-started', - level: 'gettingstarted', - }, - ], - [ - { - label: 'Database', - icon: 'database', - href: '/guides/database', - level: 'database', - }, - { - label: 'Serverless APIs', - icon: 'serverless-apis', - href: '/guides/api', - level: 'api', - }, - { - label: 'Auth', - icon: 'auth', - href: '/guides/auth', - level: 'auth', - }, - { - label: 'Edge Functions', - icon: 'edge-functions', - href: '/guides/functions', - level: 'functions', - }, - { - label: 'Realtime', - icon: 'realtime', - href: '/guides/realtime', - level: 'realtime', - }, - { - label: 'Storage', - icon: 'storage', - href: '/guides/storage', - level: 'storage', - }, - { - label: 'AI & Vectors', - icon: 'ai', - href: '/guides/ai', - level: 'ai', - }, - ], - [ - { - label: 'Local Dev / CLI', - icon: 'reference-cli', - href: '/guides/cli', - level: 'reference_javascript', - }, - { - label: 'Platform', - icon: 'platform', - href: '/guides/platform', - level: 'platform', - }, - { - label: 'Self-Hosting', - icon: 'self-hosting', - href: '/guides/self-hosting', - level: 'self_hosting', - }, - ], - [ - { - label: 'Client Library Reference', - }, - { - label: 'JavaScript', - icon: 'reference-javascript', - href: '/reference/javascript/introduction', - level: 'reference_javascript', - }, - { - label: 'Flutter', - icon: 'reference-dart', - href: '/reference/dart/introduction', - level: 'reference_dart', - }, - { - label: 'Python', - icon: 'reference-python', - href: '/reference/python/introduction', - level: 'reference_python', - community: true, - }, - { - label: 'C#', - icon: 'reference-csharp', - href: '/reference/csharp/introduction', - level: 'reference_csharp', - community: true, - }, - { - label: 'Swift', - icon: 'reference-swift', - href: '/reference/swift/introduction', - level: 'reference_swift', - community: true, - }, - { - label: 'Kotlin', - icon: 'reference-kotlin', - href: '/reference/kotlin/introduction', - level: 'reference_kotlin', - community: true, - }, - { - label: 'Resources', - }, - { - label: 'CLI Commands', - icon: 'reference-cli', - href: '/reference/cli/introduction', - level: 'reference_javascript', - }, - { - label: 'Management API', - icon: 'reference-api', - href: '/reference/api/introduction', - level: 'reference_javascript', - }, - { - label: 'Guides and Examples', - icon: 'resources', - href: '/guides/resources', - level: 'resources', - }, - { - label: 'Integrations', - icon: 'integrations', - hasLightIcon: true, - href: 'https://supabase.com/partners/integrations', - level: 'integrations', - }, - ], - [ - { - label: 'Status', - icon: 'status', - href: 'https://status.supabase.com/', - }, - ], -] - -export const REFERENCES: References = { - javascript: { - name: 'supabase-js', - library: 'supabase-js', - versions: ['v2', 'v1'], - icon: '/img/libraries/javascript-icon', - }, - dart: { - name: 'Flutter', - library: 'supabase-dart', - versions: ['v1', 'v0'], - icon: '/docs/img/libraries/flutter-icon.svg', - }, - csharp: { - name: 'C#', - library: 'supabase-csharp', - versions: ['v0'], - icon: '/docs/img/libraries/c-sharp-icon.svg', - }, - swift: { - name: 'Swift', - library: 'supabase-swift', - versions: ['v0'], - icon: '/docs/img/libraries/swift-icon.svg', - }, - kotlin: { - name: 'Kotlin', - library: 'supabase-kt', - versions: ['v0'], - icon: '/docs/img/libraries/kotlin-icon.svg', - }, - cli: { - name: 'CLI', - library: undefined, - versions: [], - icon: '/docs/img/icons/cli-icon.svg', - }, - api: { - name: 'API', - library: undefined, - versions: [], - icon: '/docs/img/icons/api-icon.svg', - }, -} - -export const gettingstarted: NavMenuConstant = { - icon: 'getting-started', - title: 'Getting Started', - items: [ - { name: 'Features', url: '/guides/getting-started/features' }, - { name: 'Architecture', url: '/guides/getting-started/architecture' }, - { - name: 'Framework Quickstarts', - items: [ - { name: 'Next.js', url: '/guides/getting-started/quickstarts/nextjs' }, - { name: 'React', url: '/guides/getting-started/quickstarts/reactjs' }, - { name: 'NuxtJS', url: '/guides/getting-started/quickstarts/nuxtjs' }, - { name: 'RedwoodJS', url: '/guides/getting-started/quickstarts/redwoodjs' }, - { name: 'Flutter', url: '/guides/getting-started/quickstarts/flutter' }, - { name: 'Android Kotlin', url: '/guides/getting-started/quickstarts/kotlin' }, - { name: 'SvelteKit', url: '/guides/getting-started/quickstarts/sveltekit' }, - { name: 'SolidJS', url: '/guides/getting-started/quickstarts/solidjs' }, - { name: 'Vue', url: '/guides/getting-started/quickstarts/vue' }, - { name: 'refine', url: '/guides/getting-started/quickstarts/refine' }, - ], - }, - { - name: 'Web app tutorials', - items: [ - { - name: 'Next.js', - url: '/guides/getting-started/tutorials/with-nextjs', - }, - { - name: 'React', - url: '/guides/getting-started/tutorials/with-react', - }, - { - name: 'Vue 3', - url: '/guides/getting-started/tutorials/with-vue-3', - }, - { - name: 'Nuxt 3', - url: '/guides/getting-started/tutorials/with-nuxt-3', - }, - { - name: 'Angular', - url: '/guides/getting-started/tutorials/with-angular', - }, - { - name: 'RedwoodJS', - url: '/guides/getting-started/tutorials/with-redwoodjs', - }, - { - name: 'SolidJS', - url: '/guides/getting-started/tutorials/with-solidjs', - }, - { - name: 'Svelte', - url: '/guides/getting-started/tutorials/with-svelte', - }, - { - name: 'SvelteKit', - url: '/guides/getting-started/tutorials/with-sveltekit', - }, - { - name: 'refine', - url: '/guides/getting-started/tutorials/with-refine', - }, - ], - }, - { - name: 'Mobile tutorials', - items: [ - { - name: 'Flutter', - url: '/guides/getting-started/tutorials/with-flutter', - }, - { - name: 'Expo', - url: '/guides/getting-started/tutorials/with-expo', - }, - { - name: 'Android Kotlin', - url: '/guides/getting-started/tutorials/with-kotlin', - }, - { - name: 'Ionic React', - url: '/guides/getting-started/tutorials/with-ionic-react', - }, - { - name: 'Ionic Vue', - url: '/guides/getting-started/tutorials/with-ionic-vue', - }, - { - name: 'Ionic Angular', - url: '/guides/getting-started/tutorials/with-ionic-angular', - }, - ], - }, - ], -} - -export const cli = { - title: 'CLI', - items: [ - { name: 'Overview', url: '/guides/cli' }, - { name: 'Managing Environments', url: '/guides/cli/managing-environments' }, - { - name: 'Using environment variables in config.toml', - url: '/guides/cli/using-environment-variables-in-config', - }, - ], -} - -export const SocialLoginItems = [ - { - name: 'Google', - icon: '/docs/img/icons/google-icon', - url: '/guides/auth/social-login/auth-google', - }, - { - name: 'Facebook', - icon: '/docs/img/icons/facebook-icon', - url: '/guides/auth/social-login/auth-facebook', - }, - { - name: 'Apple', - icon: '/docs/img/icons/apple-icon', - url: '/guides/auth/social-login/auth-apple', - }, - { - name: 'Azure (Microsoft)', - icon: '/docs/img/icons/microsoft-icon', - url: '/guides/auth/social-login/auth-azure', - }, - { - name: 'Twitter', - icon: '/docs/img/icons/twitter-icon', - url: '/guides/auth/social-login/auth-twitter', - }, - { - name: 'GitHub', - icon: '/docs/img/icons/github-icon', - url: '/guides/auth/social-login/auth-github', - isDarkMode: true, - }, - { - name: 'Gitlab', - icon: '/docs/img/icons/gitlab-icon', - url: '/guides/auth/social-login/auth-gitlab', - }, - { - name: 'Bitbucket', - icon: '/docs/img/icons/bitbucket-icon', - url: '/guides/auth/social-login/auth-bitbucket', - }, - { - name: 'Discord', - icon: '/docs/img/icons/discord-icon', - url: '/guides/auth/social-login/auth-discord', - }, - { - name: 'Figma', - icon: '/docs/img/icons/figma-icon', - url: '/guides/auth/social-login/auth-figma', - }, - { - name: 'Kakao', - icon: '/docs/img/icons/kakao-icon', - url: '/guides/auth/social-login/auth-kakao', - }, - { - name: 'Keycloak', - icon: '/docs/img/icons/keycloak-icon', - url: '/guides/auth/social-login/auth-keycloak', - }, - { - name: 'LinkedIn', - icon: '/docs/img/icons/linkedin-icon', - url: '/guides/auth/social-login/auth-linkedin', - }, - { - name: 'Notion', - icon: '/docs/img/icons/notion-icon', - url: '/guides/auth/social-login/auth-notion', - }, - { - name: 'Slack', - icon: '/docs/img/icons/slack-icon', - url: '/guides/auth/social-login/auth-slack', - }, - { - name: 'Spotify', - icon: '/docs/img/icons/spotify-icon', - url: '/guides/auth/social-login/auth-spotify', - }, - { - name: 'Twitch', - icon: '/docs/img/icons/twitch-icon', - url: '/guides/auth/social-login/auth-twitch', - }, - { - name: 'WorkOS', - icon: '/docs/img/icons/workos-icon', - url: '/guides/auth/social-login/auth-workos', - }, - { - name: 'Zoom', - icon: '/docs/img/icons/zoom-icon', - url: '/guides/auth/social-login/auth-zoom', - }, -] - -export const PhoneLoginsItems = [ - { - name: 'MessageBird SMS Login', - icon: '/docs/img/icons/messagebird-icon', - linkDescription: 'Communication between businesses and their customers — across any channel.', - url: '/guides/auth/phone-login/messagebird', - }, - { - name: 'Twilio SMS Login', - icon: '/docs/img/icons/twilio-icon', - url: '/guides/auth/phone-login/twilio', - linkDescription: 'Customer engagement platform used by hundreds of thousands of businesses.', - }, - { - name: 'Vonage SMS Login', - icon: '/docs/img/icons/vonage-icon', - url: '/guides/auth/phone-login/vonage', - linkDescription: - 'Vonage is a communication platform as a service (CPaaS) provider for consumers and businesses.', - isDarkMode: true, - }, -] - -export const auth = { - icon: 'auth', - title: 'Auth', - items: [ - { - name: 'Overview', - url: '/guides/auth', - }, - { - name: 'Quickstarts', - items: [ - { name: 'Next.js', url: '/guides/auth/quickstarts/nextjs', items: [] }, - { name: 'React', url: '/guides/auth/quickstarts/react', items: [] }, - ], - }, - { - name: 'Authentication', - url: undefined, - items: [ - { name: 'Email Login', url: '/guides/auth/auth-email' }, - { name: 'Magic Link Login', url: '/guides/auth/auth-magic-link' }, - { - name: 'Phone Login', - url: '/guides/auth/phone-login', - items: [...PhoneLoginsItems], - }, - { - name: 'Social Login', - url: '/guides/auth/social-login', - items: [...SocialLoginItems], - }, - { - name: 'Enterprise SSO', - url: '/guides/auth/enterprise-sso', - items: [ - { - name: 'SAML 2.0', - url: '/guides/auth/sso/auth-sso-saml', - }, - ], - }, - { name: 'Password Reset', url: '/guides/auth/auth-password-reset' }, - { name: 'Email Templates', url: '/guides/auth/auth-email-templates' }, - ], - }, - { - name: 'Authorization', - url: undefined, - items: [ - { name: 'Enable Captcha Protection', url: '/guides/auth/auth-captcha' }, - { name: 'Configuring Custom SMTP', url: '/guides/auth/auth-smtp' }, - { name: 'Managing User Data', url: '/guides/auth/managing-user-data' }, - { name: 'Multi-Factor Authentication', url: '/guides/auth/auth-mfa' }, - { name: 'Row Level Security', url: '/guides/auth/row-level-security' }, - { name: 'Server-side Rendering', url: '/guides/auth/server-side-rendering' }, - ], - }, - { - name: 'Auth Helpers', - url: undefined, - items: [ - { name: 'Overview', url: '/guides/auth/auth-helpers' }, - { name: 'Auth UI', url: '/guides/auth/auth-helpers/auth-ui' }, - { name: 'Flutter Auth UI', url: '/guides/auth/auth-helpers/flutter-auth-ui' }, - { - name: 'Next.js', - url: '/guides/auth/auth-helpers/nextjs', - }, - { name: 'Remix', url: '/guides/auth/auth-helpers/remix' }, - { name: 'SvelteKit', url: '/guides/auth/auth-helpers/sveltekit' }, - ], - }, - { - name: 'Deep Dive', - url: undefined, - items: [ - { - name: 'Part One: JWTs', - url: '/learn/auth-deep-dive/auth-deep-dive-jwts', - }, - { - name: 'Part Two: Row Level Security', - url: '/learn/auth-deep-dive/auth-row-level-security', - }, - { name: 'Part Three: Policies', url: '/learn/auth-deep-dive/auth-policies' }, - { name: 'Part Four: GoTrue', url: '/learn/auth-deep-dive/auth-gotrue' }, - { - name: 'Part Five: Google OAuth', - url: '/learn/auth-deep-dive/auth-google-oauth', - }, - ], - }, - ], -} - -export const database: NavMenuConstant = { - icon: 'database', - title: 'Database', - url: '/guides/database', - items: [ - { name: 'Overview', url: '/guides/database' }, - { - name: 'Fundamentals', - url: undefined, - items: [ - { name: 'Connecting to your database', url: '/guides/database/connecting-to-postgres' }, - { name: 'Managing tables, views, and data', url: '/guides/database/tables' }, - { name: 'JSON and unstructured data', url: '/guides/database/json' }, - { name: 'Managing database functions', url: '/guides/database/functions' }, - { name: 'Managing indexes', url: '/guides/database/postgres/indexes' }, - { name: 'Managing database triggers', url: '/guides/database/postgres/triggers' }, - { name: 'Managing database webhooks', url: '/guides/database/webhooks' }, - { name: 'Using Full Text Search', url: '/guides/database/full-text-search' }, - ], - }, - { - name: 'Access and security', - url: undefined, - items: [ - { name: 'Row Level Security', url: '/guides/database/postgres/row-level-security' }, - { name: 'Managing Postgres Roles', url: '/guides/database/postgres/roles' }, - { name: 'Managing secrets with Vault', url: '/guides/database/vault' }, - { name: 'Column encryption', url: '/guides/database/column-encryption' }, - ], - }, - { - name: 'Postgres Guides', - url: undefined, - items: [ - { name: 'Query Optimization', url: '/guides/database/query-optimization' }, - { name: 'Debugging and monitoring', url: '/guides/database/inspect' }, - { name: 'Partitioning your tables', url: '/guides/database/partitions' }, - { name: 'Implementing Cascade Deletes', url: '/guides/database/postgres/cascade-deletes' }, - { name: 'Managing database replication', url: '/guides/database/replication' }, - { name: 'Testing your database', url: '/guides/database/testing' }, - { name: 'Database Configuration', url: '/guides/database/postgres/configuration' }, - ], - }, - { - name: 'Extensions', - url: undefined, - items: [ - { name: 'Overview', url: '/guides/database/extensions' }, - { - name: 'HypoPG: Hypothetical indexes', - url: '/guides/database/extensions/hypopg', - }, - { - name: 'plv8: Javascript Language', - url: '/guides/database/extensions/plv8', - }, - { name: 'http: RESTful Client', url: '/guides/database/extensions/http' }, - { - name: 'index_advisor: Query optimization', - url: '/guides/database/extensions/index_advisor', - }, - { - name: 'PGAudit: Postgres Auditing', - url: '/guides/database/extensions/pgaudit', - }, - { - name: 'pgjwt: JSON Web Tokens', - url: '/guides/database/extensions/pgjwt', - }, - { - name: 'PGroonga: Multilingual Full Text Search', - url: '/guides/database/extensions/pgroonga', - }, - { - name: 'pgRouting: Geospatial Routing', - url: '/guides/database/extensions/pgrouting', - }, - { - name: 'pg_cron: Job Scheduling', - url: '/guides/database/extensions/pgcron', - }, - { - name: 'pg_graphql: GraphQL Support', - url: '/guides/database/extensions/pg_graphql', - }, - { - name: 'pg_hashids: Short UIDs', - url: '/guides/database/extensions/pg_hashids', - }, - { - name: 'pg_jsonschema: JSON Schema Validation', - url: '/guides/database/extensions/pg_jsonschema', - }, - { - name: 'pg_net: Async Networking', - url: '/guides/database/extensions/pgnet', - }, - { - name: 'pg_plan_filter: Restrict Total Cost', - url: '/guides/database/extensions/pg_plan_filter', - }, - { - name: 'pg_stat_monitor: Extended Query Performance Monitoring', - url: '/guides/database/extensions/pg_stat_monitor', - }, - { - name: 'pgvector: Embeddings and vector similarity', - url: '/guides/database/extensions/pgvector', - }, - { - name: 'pg_stat_statements: SQL Planning and Execution Statistics', - url: '/guides/database/extensions/pg_stat_statements', - }, - { - name: 'pg_repack: Storage Optimization', - url: '/guides/database/extensions/pgrepack', - }, - { - name: 'PostGIS: Geo queries', - url: '/guides/database/extensions/postgis', - }, - { - name: 'pg-safeupdate: Required Where Clauses', - url: '/guides/database/extensions/pg-safeupdate', - }, - { - name: 'pgsodium: Encryption Features', - url: '/guides/database/extensions/pgsodium', - }, - { name: 'pgTAP: Unit Testing', url: '/guides/database/extensions/pgtap' }, - { - name: 'plpgsql_check: PL/pgSQL Linter', - url: '/guides/database/extensions/plpgsql_check', - }, - { - name: 'timescaledb: Time-series data', - url: '/guides/database/extensions/timescaledb', - }, - { - name: 'uuid-ossp: Unique Identifiers', - url: '/guides/database/extensions/uuid-ossp', - }, - { - name: 'RUM: inverted index for full-text search', - url: '/guides/database/extensions/rum', - }, - ], - }, - { - name: 'Foreign Data Wrappers', - url: undefined, - items: [ - { name: 'Overview', url: '/guides/database/extensions/wrappers/overview' }, - { name: 'Connecting to Airtable', url: '/guides/database/extensions/wrappers/airtable' }, - { name: 'Connecting to AWS S3', url: '/guides/database/extensions/wrappers/s3' }, - { name: 'Connecting to BigQuery', url: '/guides/database/extensions/wrappers/bigquery' }, - { - name: 'Connecting to ClickHouse', - url: '/guides/database/extensions/wrappers/clickhouse', - }, - { name: 'Connecting to Firebase', url: '/guides/database/extensions/wrappers/firebase' }, - { name: 'Connecting to Logflare', url: '/guides/database/extensions/wrappers/logflare' }, - { name: 'Connecting to Stripe', url: '/guides/database/extensions/wrappers/stripe' }, - ], - }, - { - name: 'Examples', - url: undefined, - items: [ - { - name: 'Drop All Tables in Schema', - url: '/guides/database/postgres/dropping-all-tables-in-schema', - }, - { - name: 'Select First Row per Group', - url: '/guides/database/postgres/first-row-in-group', - }, - { - name: 'Print PostgreSQL Version', - url: '/guides/database/postgres/which-version-of-postgres', - }, - ], - }, - ], -} - -export const api: NavMenuConstant = { - icon: 'serverless-apis', - title: 'Serverless APIs', - url: '/guides/api', - items: [ - { name: 'Overview', url: '/guides/api', items: [] }, - { name: 'Quickstart', url: '/guides/api/quickstart', items: [] }, - { - name: 'Guides', - url: '/guides/api', - items: [ - { name: 'Creating API routes', url: '/guides/api/creating-routes', items: [] }, - { name: 'How API Keys work', url: '/guides/api/api-keys', items: [] }, - { name: 'Securing your API', url: '/guides/api/securing-your-api', items: [] }, - { - name: 'Querying joins and nested tables', - url: '/guides/api/joins-and-nesting', - items: [], - }, - { name: 'Using custom schemas', url: '/guides/api/using-custom-schemas', items: [] }, - ], - }, - { - name: 'REST & REALTIME', - url: undefined, - items: [ - { name: 'Auto-generated Docs', url: '/guides/api/rest/auto-generated-docs', items: [] }, - { name: 'Client Libraries', url: '/guides/api/rest/client-libs', items: [] }, - { name: 'Generating Types', url: '/guides/api/rest/generating-types', items: [] }, - ], - }, - { - name: 'GRAPHQL', - url: undefined, - items: [{ name: 'GraphiQL Documentation', url: '/guides/api/graphql/graphiql', items: [] }], - }, - ], -} - -export const functions: NavMenuConstant = { - icon: 'edge-functions', - title: 'Edge Functions', - url: '/guides/functions', - items: [ - { - name: 'Overview', - url: '/guides/functions', - }, - { - name: 'Quickstart', - url: '/guides/functions/quickstart', - }, - { - name: 'Features', - url: undefined, - items: [ - { name: 'TypeScript Support', url: '/guides/functions/typescript-support' }, - { name: 'Debugging Edge Functions', url: '/guides/functions/debugging' }, - { name: 'Managing packages using Import Maps', url: '/guides/functions/import-maps' }, - { name: 'Globally Distributed Deployments', url: '/guides/functions/global-deployments' }, - ], - }, - { - name: 'Guides', - url: undefined, - items: [ - { name: 'Developing Functions locally', url: '/guides/functions/local-development' }, - { name: 'Deploying with GitHub', url: '/guides/functions/cicd-workflow' }, - { name: 'Managing Secrets and Environment Variables', url: '/guides/functions/secrets' }, - { name: 'Integrating With Supabase Auth', url: '/guides/functions/auth' }, - { - name: 'Integrating with Supabase Storage', - url: '/guides/functions/storage-caching', - }, - { name: 'CORS support for Invoking from the browser', url: '/guides/functions/cors' }, - { name: 'Scheduling Functions', url: '/guides/functions/schedule-functions' }, - { - name: 'Connecting directly to Postgres', - url: '/guides/functions/connect-to-postgres', - }, - { name: 'Testing your Edge Functions', url: '/guides/functions/unit-test' }, - { name: 'Troubleshooting', url: '/guides/functions/troubleshooting' }, - ], - }, - { - name: 'Third-Party Tools', - url: undefined, - items: [ - { name: 'Dart Edge on Supabase', url: '/guides/functions/dart-edge' }, - { name: 'Browserless.io', url: '/guides/functions/examples/screenshots' }, - { name: 'Hugging Face', url: '/guides/ai/examples/huggingface-image-captioning' }, - { name: 'OpenAI API', url: '/guides/ai/examples/openai' }, - { name: 'Sending Emails with Resend', url: '/guides/functions/examples/send-emails' }, - { name: 'Upstash Redis', url: '/guides/functions/examples/upstash-redis' }, - { name: 'Type-Safe SQL with Kysely', url: '/guides/functions/kysely-postgres' }, - ], - }, - { - name: 'Examples', - url: '/guides/functions/examples', - items: [ - { name: 'Generating OpenAI GPT3 completions', url: '/guides/ai/examples/openai' }, - { name: 'Generating OG images ', url: '/guides/functions/examples/og-image' }, - { - name: 'CAPTCHA support with Cloudflare Turnstile', - url: '/guides/functions/examples/cloudflare-turnstile', - }, - { name: 'Building a Discord Bot', url: '/guides/functions/examples/discord-bot' }, - { name: 'Building a Telegram Bot', url: '/guides/functions/examples/telegram-bot' }, - { name: 'Handling Stripe Webhooks ', url: '/guides/functions/examples/stripe-webhooks' }, - { name: 'Integrating with Upstash Redis', url: '/guides/functions/examples/upstash-redis' }, - { name: 'Rate Limiting Edge Functions', url: '/guides/functions/examples/rate-limiting' }, - { - name: 'Taking Screenshots with Puppeteer', - url: '/guides/functions/examples/screenshots', - }, - ], - }, - ], -} - -export const realtime: NavMenuConstant = { - icon: 'realtime', - title: 'Realtime', - url: '/guides/realtime', - items: [ - { - name: 'Overview', - url: '/guides/realtime', - }, - { - name: 'Concepts', - url: '/guides/realtime/concepts', - }, - { - name: 'Features', - url: undefined, - items: [ - { name: 'Broadcast', url: '/guides/realtime/broadcast' }, - { name: 'Presence', url: '/guides/realtime/presence' }, - { - name: 'Postgres Changes', - url: '/guides/realtime/postgres-changes', - }, - ], - }, - { - name: 'Guides', - url: undefined, - items: [ - { - name: 'Subscribing to Database Changes', - url: '/guides/realtime/subscribing-to-database-changes', - }, - { - name: 'Bring Your Own Database', - url: '/guides/realtime/bring-your-own-database', - items: [], - }, - { - name: 'Using Realtime with Next.js', - url: '/guides/realtime/realtime-with-nextjs', - }, - ], - }, - { - name: 'Deep dive', - url: undefined, - items: [ - { name: 'Quotas', url: '/guides/realtime/quotas' }, - { name: 'Architecture', url: '/guides/realtime/architecture' }, - { name: 'Protocol', url: '/guides/realtime/protocol' }, - ], - }, - ], -} - -export const storage: NavMenuConstant = { - icon: 'storage', - title: 'Storage', - url: '/guides/storage', - items: [ - { name: 'Overview', url: '/guides/storage' }, - { name: 'Quickstart', url: '/guides/storage/quickstart' }, - { - name: 'Fundamentals', - url: undefined, - items: [ - { name: 'Uploading files to Storage', url: '/guides/storage/uploads' }, - { name: 'Image Transformations', url: '/guides/storage/image-transformations' }, - { name: 'How caching works', url: '/guides/storage/cdn' }, - ], - }, - { - name: 'Access and security', - url: undefined, - items: [{ name: 'Access Control', url: '/guides/storage/access-control' }], - }, - ], -} - -export const ai: NavMenuConstant = { - icon: 'ai', - title: 'AI & Vectors', - url: '/guides/ai', - items: [ - { name: 'Overview', url: '/guides/ai' }, - { name: 'Concepts', url: '/guides/ai/concepts' }, - { - name: 'Structured & unstructured', - url: '/guides/ai/structured-unstructured', - }, - { - name: 'Quickstarts', - url: undefined, - items: [ - { name: 'Developing locally with Vecs', url: '/guides/ai/vecs-python-client' }, - { name: 'Creating and managing collections', url: '/guides/ai/quickstarts/hello-world' }, - { - name: 'Generate Embeddings', - url: '/guides/ai/quickstarts/generate-text-embeddings', - }, - { name: 'Text Deduplication', url: '/guides/ai/quickstarts/text-deduplication' }, - { name: 'Face similarity search', url: '/guides/ai/quickstarts/face-similarity' }, - ], - }, - { - name: 'Python Client', - url: undefined, - items: [ - { name: 'API', url: '/guides/ai/python/api' }, - { name: 'Collections', url: '/guides/ai/python/collections' }, - { name: 'Indexes', url: '/guides/ai/python/indexes' }, - { name: 'Metadata', url: '/guides/ai/python/metadata' }, - ], - }, - { - name: 'Guides', - url: undefined, - items: [ - { name: 'Managing collections', url: '/guides/ai/managing-collections' }, - { name: 'Managing indexes', url: '/guides/ai/managing-indexes' }, - { name: 'Vector columns', url: '/guides/ai/vector-columns' }, - { name: 'Engineering for scale', url: '/guides/ai/engineering-for-scale' }, - { name: 'Choosing Compute Add-on', url: '/guides/ai/choosing-compute-addon' }, - { name: 'Going to Production', url: '/guides/ai/going-to-prod' }, - ], - }, - { - name: 'Examples', - url: undefined, - items: [ - { - name: 'OpenAI completions using Edge Functions', - url: '/guides/ai/examples/openai', - }, - { - name: 'Image search with OpenAI CLIP', - url: '/guides/ai/examples/image-search-openai-clip', - }, - { - name: 'Generate image captions using Hugging Face', - url: '/guides/ai/examples/huggingface-image-captioning', - }, - { - name: 'Building ChatGPT Plugins', - url: '/guides/ai/examples/building-chatgpt-plugins', - }, - { - name: 'Adding generative Q&A to your documentation', - url: '/guides/ai/examples/headless-vector-search', - }, - { - name: 'Adding generative Q&A to your Next.js site', - url: '/guides/ai/examples/nextjs-vector-search', - }, - ], - }, - { - name: 'Third-Party Tools', - url: undefined, - items: [ - { - name: 'LangChain', - url: '/guides/ai/langchain', - }, - { - name: 'Hugging Face', - url: '/guides/ai/hugging-face', - }, - { - name: 'Google Colab', - url: '/guides/ai/google-colab', - }, - { - name: 'LlamaIndex', - url: '/guides/ai/integrations/llamaindex', - }, - ], - }, - ], -} - -export const supabase_cli: NavMenuConstant = { - icon: 'reference-cli', - title: 'Local Dev / CLI', - url: '/guides/cli', - items: [ - { name: 'Overview', url: '/guides/cli' }, - { - name: 'Using the CLI', - url: undefined, - items: [ - { name: 'Getting started', url: '/guides/cli/getting-started' }, - { name: 'CLI Configuration', url: '/guides/cli/config' }, - ], - }, - { - name: 'Developing with Supabase', - url: undefined, - items: [ - { name: 'Local Development', url: '/guides/cli/local-development' }, - { name: 'Managing environments', url: '/guides/cli/managing-environments' }, - { - name: 'Managing config and secrets', - url: '/guides/cli/managing-config', - }, - { - name: 'Seeding your database', - url: '/guides/cli/seeding-your-database', - }, - { - name: 'Testing and linting', - url: '/guides/cli/testing-and-linting', - }, - { - name: 'Customizing email templates', - url: '/guides/cli/customizing-email-templates', - }, - ], - }, - { - name: 'GitHub Action', - url: undefined, - items: [ - { - name: 'Generate types from your database', - url: '/guides/cli/github-action/generating-types', - }, - { - name: 'Automated testing', - url: '/guides/cli/github-action/testing', - }, - { - name: 'Backup your database', - url: '/guides/cli/github-action/backups', - }, - ], - }, - ], -} - -export const platform: NavMenuConstant = { - icon: 'platform', - title: 'Platform', - url: '/guides/platform', - items: [ - { - name: 'Add-ons', - url: undefined, - items: [ - { name: 'Compute Add-ons', url: '/guides/platform/compute-add-ons' }, - { name: 'Custom Domains', url: '/guides/platform/custom-domains' }, - { name: 'Database Backups', url: '/guides/platform/backups' }, - ], - }, - { - name: 'Platform Management', - url: undefined, - items: [ - { name: 'Access Control', url: '/guides/platform/access-control' }, - { name: 'Custom Postgres Config', url: '/guides/platform/custom-postgres-config' }, - { name: 'Database Size', url: '/guides/platform/database-size' }, - { name: 'HTTP Status Codes', url: '/guides/platform/http-status-codes' }, - { name: 'Logging', url: '/guides/platform/logs' }, - { name: 'Metrics', url: '/guides/platform/metrics' }, - { - name: 'Migrating and Upgrading', - url: '/guides/platform/migrating-and-upgrading-projects', - }, - { name: 'Network Restrictions', url: '/guides/platform/network-restrictions' }, - { name: 'Performance Tuning', url: '/guides/platform/performance' }, - { name: 'Permissions', url: '/guides/platform/permissions' }, - { name: 'SSL Enforcement', url: '/guides/platform/ssl-enforcement' }, - ], - }, - { - name: 'Billing', - url: undefined, - items: [{ name: 'Spend cap', url: '/guides/platform/spend-cap' }], - }, - { - name: 'Single sign-on', - url: undefined, - items: [ - { - name: 'Enable SSO for your organization', - url: '/guides/platform/sso', - }, - { name: 'SSO with Azure AD', url: '/guides/platform/sso/azure' }, - { - name: 'SSO with Google Workspace', - url: '/guides/platform/sso/gsuite', - }, - { name: 'SSO with Okta', url: '/guides/platform/sso/okta' }, - ], - }, - { - name: 'Production Readiness', - url: undefined, - items: [ - { - name: 'Shared Responsibility Model', - url: '/guides/platform/shared-responsibility-model', - }, - { - name: 'Maturity Model', - url: '/guides/platform/maturity-model', - }, - { name: 'Production Checklist', url: '/guides/platform/going-into-prod' }, - ], - }, - { - name: 'Integrations', - url: undefined, - items: [ - { - name: 'Integrations Marketplace', - url: '/guides/platform/marketplace', - }, - { - name: 'Build a Supabase Integration', - url: '/guides/platform/oauth-apps/build-a-supabase-integration', - }, - ], - }, - { - name: 'Troubleshooting', - url: undefined, - items: [ - { - name: 'HTTP and Project Issues', - url: '/guides/platform/troubleshooting', - }, - { - name: 'High Disk IO Consumption', - url: '/guides/platform/exhaust-disk-io', - }, - { - name: 'High CPU Usage', - url: '/guides/platform/exhaust-cpu', - }, - { - name: 'High RAM Usage', - url: '/guides/platform/exhaust-ram', - }, - ], - }, - ], -} - -export const resources: NavMenuConstant = { - icon: 'resources', - title: 'Resources', - url: '/guides/resources', - items: [ - { name: 'Examples', url: '/guides/resources/examples' }, - { name: 'Glossary', url: '/guides/resources/glossary' }, - { - name: 'Migrate to Supabase', - url: '/guides/resources/migrating-to-supabase', - items: [ - { - name: 'Firebase Auth', - url: '/guides/resources/migrating-to-supabase/firebase-auth', - }, - { - name: 'Firestore Data', - url: '/guides/resources/migrating-to-supabase/firestore-data', - }, - { - name: 'Firebase Storage', - url: '/guides/resources/migrating-to-supabase/firebase-storage', - }, - { - name: 'Heroku', - url: '/guides/resources/migrating-to-supabase/heroku', - }, - { - name: 'Render', - url: '/guides/resources/migrating-to-supabase/render', - }, - { - name: 'Amazon RDS', - url: '/guides/resources/migrating-to-supabase/amazon-rds', - items: [], - }, - ], - }, - ], -} - -export const self_hosting: NavMenuConstant = { - title: 'Self-Hosting', - icon: 'self-hosting', - url: '/guides/self-hosting', - items: [ - { name: 'Overview', url: '/guides/self-hosting' }, - { name: 'Self-Hosting with Docker', url: '/guides/self-hosting/docker' }, - { - name: 'Auth Server', - items: [ - { name: 'Reference', url: '/reference/self-hosting-auth/introduction' }, - { name: 'Configuration', url: '/guides/self-hosting/auth/config' }, - ], - }, - { - name: 'Storage Server', - items: [ - { name: 'Reference', url: '/reference/self-hosting-storage/introduction' }, - { name: 'Configuration', url: '/guides/self-hosting/storage/config' }, - ], - }, - { - name: 'Realtime Server', - items: [ - { name: 'Reference', url: '/reference/self-hosting-realtime/introduction' }, - { name: 'Configuration', url: '/guides/self-hosting/realtime/config' }, - ], - }, - { - name: 'Analytics Server', - items: [ - { name: 'Reference', url: '/reference/self-hosting-analytics/introduction', items: [] }, - { name: 'Configuration', url: '/guides/self-hosting/analytics/config', items: [] }, - ], - }, - { - name: 'Functions Server', - items: [ - { name: 'Reference', url: '/reference/self-hosting-functions/introduction', items: [] }, - ], - }, - ], -} - -export const migrate = { - title: 'Migrate to Supabase', - url: '/guides/migrate', - items: [ - { name: 'Firebase Auth', url: '/guides/migrations/firebase-auth' }, - { name: 'Firestore Data', url: '/guides/migrations/firestore-data' }, - { name: 'Firebase Storage', url: '/guides/migrations/firebase-storage' }, - { name: 'Heroku', url: '/guides/migrations/heroku' }, - { name: 'Render', url: '/guides/migrations/render' }, - { name: 'Amazon RDS', url: '/guides/migrations/amazon-rds' }, - ], -} - -export const reference = { - title: 'API Reference', - icon: 'reference', - items: [ - { - name: 'Client libraries', - items: [ - { - name: 'supabase-js', - url: '/reference/javascript/start', - level: 'reference_javascript', - icon: '/img/icons/menu/reference-javascript', - }, - { - name: 'supabase-dart', - url: '/reference/dart/start', - level: 'reference_dart', - icon: '/img/icons/menu/reference-dart', - }, - { - name: 'supabase-csharp', - url: '/reference/csharp/start', - level: 'reference_csharp', - icon: '/img/icons/menu/reference-csharp', - }, - { - name: 'supbase-python', - url: '/reference/python/start', - level: 'reference_python', - icon: '/img/icons/menu/reference-python', - }, - { - name: 'supbase-swift', - url: '/reference/swift/start', - level: 'reference_swift', - items: [], - icon: '/img/icons/menu/reference-swift', - }, - { - name: 'supabase-kt', - url: '/reference/kotlin/start', - level: 'reference_kotlin', - items: [], - icon: '/img/icons/menu/reference-kotlin', - }, - // { - // name: 'supabase-python', - // url: '/reference/python/start', - // level: 'reference_python', - // - // icon: '/img/icons/menu/reference-javascript', - // }, - ], - }, - { - name: 'Other tools', - items: [ - { - name: 'Supabase CLI', - url: '/reference/cli/start', - icon: '/img/icons/menu/reference-cli', - }, - { - name: 'Management API', - url: '/reference/javascript', - icon: '/img/icons/menu/reference-api', - }, - ], - }, - ], -} - -export const reference_javascript_v1 = { - icon: 'reference-javascript', - title: 'JavaScript', - url: '/guides/reference/javascript', - parent: '/reference', -} - -export const reference_javascript_v2 = { - icon: 'reference-javascript', - title: 'JavaScript', - url: '/guides/reference/javascript', - parent: '/reference', -} - -export const reference_dart_v0 = { - icon: 'reference-dart', - title: 'Flutter', - url: '/guides/reference/dart', - parent: '/reference', -} - -export const reference_dart_v1 = { - icon: 'reference-dart', - title: 'Flutter', - url: '/guides/reference/dart', - parent: '/reference', -} - -export const reference_csharp_v0 = { - icon: 'reference-csharp', - title: 'C#', - url: 'guides/reference/csharp', - parent: '/reference', -} - -export const reference_python_v2 = { - icon: 'reference-python', - title: 'Python', - url: '/guides/reference/python', - parent: '/reference', -} - -export const reference_swift_v0 = { - icon: 'reference-swift', - title: 'swift', - url: 'guides/reference/swift', - parent: '/reference', -} - -export const reference_kotlin_v0 = { - icon: 'reference-kotlin', - title: 'kotlin', - url: 'guides/reference/kotlin', - parent: '/reference', -} - -export const reference_cli = { - icon: 'reference-cli', - title: 'Supabase CLI', - url: '/guides/reference/cli', - parent: '/', -} -export const reference_api = { - icon: 'reference-api', - title: 'Management API', - url: '/guides/reference/api', - parent: '/reference', -} - -export const reference_self_hosting_auth = { - icon: 'reference-auth', - title: 'Self-Hosting Auth', - url: '/guides/reference/self-hosting/auth', - parent: '/reference', -} - -export const reference_self_hosting_storage = { - icon: 'reference-storage', - title: 'Self-Hosting Storage', - url: '/guides/reference/self-hosting/storage', - parent: '/reference', -} - -export const reference_self_hosting_realtime = { - icon: 'reference-realtime', - title: 'Self-Hosting Realtime', - url: '/guides/reference/self-hosting/realtime', - parent: '/reference', -} - -export const reference_self_hosting_analytics = { - icon: 'reference-analytics', - title: 'Self-Hosting Analytics', - url: '/guides/reference/self-hosting/analytics', - parent: '/reference', -} - -export const reference_self_hosting_functions = { - icon: 'reference-functions', - title: 'Self-Hosting Functions', - url: '/guides/reference/self-hosting/functions', - parent: '/reference', -} - -// export const reference: [ -// { -// label: 'Official' -// items: [ -// { name: 'Reference Documentation'; url: '/reference'; }, -// { name: 'Supabase JavaScript Library'; url: '/reference/javascript'; }, -// { name: 'Supabase Flutter Library'; url: '/reference/dart'; }, -// { name: 'Supabase CLI'; url: '/reference/cli'; }, -// { name: 'Management API'; url: '/reference/api'; } -// ] -// }, -// { -// label: 'Self-hosting' -// items: [ -// { name: 'Auth Server'; url: '/reference/auth'; }, -// { name: 'Storage Server'; url: '/reference/storage'; } -// ] -// } -// { -// label: 'Clients', -// items: [ -// { name: 'Auth Server', url: '/reference/auth'}, -// { name: 'Storage Server', url: '/reference/storage'}, -// ], -// }, -// 'reference/javascript': SupabaseJsV2Nav, -// 'reference/javascript/v1': SupabaseJsV1Nav, -// 'reference/dart': SupabaseDartV1Nav, -// 'reference/dart/v0': SupabaseDartV0Nav, -// 'reference/cli': SupabaseCLINav, -// 'reference/api': SupabaseAPINav, -// 'reference/auth': AuthServerNav, -// 'reference/storage': StorageServerNav, -// ] - -export const references = [ - { - label: 'Client libraries', - items: [ - { - label: 'supabase-js', - versions: ['v2', 'v1'], - description: 'something about the reference', - icon: '/docs/img/icons/javascript-icon.svg', - url: '/reference/javascript/start', - }, - { - label: 'supabase-py', - description: 'something about the reference', - icon: '/docs/img/icons/python-icon.svg', - url: '/reference/python/start', - }, - { - label: 'supabase-dart', - versions: ['v1', 'v0'], - description: 'something about the reference', - icon: '/docs/img/icons/dart-icon.svg', - url: '/reference/dart/start', - }, - { - label: 'supabase-csharp', - versions: ['v0'], - description: 'something about the reference', - icon: '/docs/img/icons/c-sharp-icon.svg', - url: '/reference/csharp/start', - }, - { - label: 'supabase-swift', - versions: ['v0'], - description: 'something about the reference', - icon: '/docs/img/icons/swift-icon.svg', - url: '/reference/swift/start', - }, - { - label: 'supabase-kt', - versions: ['v0'], - description: 'something about the reference', - icon: '/docs/img/icons/kotlin-icon.svg', - url: '/reference/kotlin/start', - }, - ], - }, - { - label: 'Platform Tools', - items: [ - { - label: 'CLI', - description: 'something about the reference', - icon: '/docs/img/icons/cli-icon.svg', - url: '/reference/cli/start', - }, - { - label: 'Management API', - description: 'something about the reference', - icon: '/docs/img/icons/api-icon.svg', - url: '/reference/management-api/start', - }, - ], - }, - { - label: 'Self-Hosting', - items: [ - { - label: 'Auth server', - description: 'something about the reference', - icon: '/docs/img/icons/menu/auth.svg', - url: '/reference/auth/start', - }, - { - label: 'Storage server', - description: 'something about the reference', - icon: '/docs/img/icons/menu/storage.svg', - url: '/reference/storage/start', - }, - { - label: 'Realtime server', - description: 'something about the reference', - icon: '/docs/img/icons/menu/realtime.svg', - url: '/reference/realtime/start', - }, - ], - }, -] diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx deleted file mode 100644 index bb5b6035dbdf7..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx +++ /dev/null @@ -1,261 +0,0 @@ -import { useRouter } from 'next/router' -import { memo, useEffect } from 'react' -import { menuState, useMenuLevelId } from '~/hooks/useMenuState' -import NavigationMenuHome from './HomeMenu' -import NavigationMenuGuideList from './NavigationMenuGuideList' -import NavigationMenuRefList from './NavigationMenuRefList' - -interface BaseMenu { - id: string - path: string - type: string -} - -interface HomeMenu extends BaseMenu { - type: 'home' -} - -interface GuideMenu extends BaseMenu { - type: 'guide' -} - -interface ReferenceMenu extends BaseMenu { - type: 'reference' - commonSectionsFile: string - specFile?: string -} - -type Menu = HomeMenu | GuideMenu | ReferenceMenu - -const menus: Menu[] = [ - { - id: 'home', - path: '/', - type: 'home', - }, - { - id: 'gettingstarted', - path: '/guides/getting-started', - type: 'guide', - }, - { - id: 'database', - path: '/guides/database', - type: 'guide', - }, - { - id: 'api', - path: '/guides/api', - type: 'guide', - }, - { - id: 'auth', - path: '/guides/auth', - type: 'guide', - }, - { - id: 'functions', - path: '/guides/functions', - type: 'guide', - }, - { - id: 'realtime', - path: '/guides/realtime', - type: 'guide', - }, - { - id: 'storage', - path: '/guides/storage', - type: 'guide', - }, - { - id: 'ai', - path: '/guides/ai', - type: 'guide', - }, - { - id: 'platform', - path: '/guides/platform', - type: 'guide', - }, - { - id: 'resources', - path: '/guides/resources', - type: 'guide', - }, - { - id: 'self_hosting', - path: '/guides/self-hosting', - type: 'guide', - }, - { - id: 'integrations', - path: '/guides/integrations', - type: 'guide', - }, - { - id: 'supabase_cli', - // TODO: Add path '/guides/cli/config' - path: '/guides/cli', - type: 'guide', - }, - { - id: 'reference_javascript_v1', - path: '/reference/javascript/v1', - commonSectionsFile: 'common-client-libs-sections.json', - specFile: 'supabase_js_v1.yml', - type: 'reference', - }, - { - id: 'reference_javascript_v2', - path: '/reference/javascript', - commonSectionsFile: 'common-client-libs-sections.json', - specFile: 'supabase_js_v2.yml', - type: 'reference', - }, - { - id: 'reference_dart_v0', - path: '/reference/dart/v0', - commonSectionsFile: 'common-client-libs-sections.json', - specFile: 'supabase_dart_v0.yml', - type: 'reference', - }, - { - id: 'reference_dart_v1', - path: '/reference/dart', - commonSectionsFile: 'common-client-libs-sections.json', - specFile: 'supabase_dart_v1.yml', - type: 'reference', - }, - { - id: 'reference_csharp_v0', - path: '/reference/csharp', - commonSectionsFile: 'common-client-libs-sections.json', - specFile: 'supabase_csharp_v0.yml', - type: 'reference', - }, - { - id: 'reference_python_v2', - path: '/reference/python', - commonSectionsFile: 'common-client-libs-sections.json', - specFile: 'supabase_py_v2.yml', - type: 'reference', - }, - { - id: 'reference_swift_v0', - path: '/reference/swift', - commonSectionsFile: 'common-client-libs-sections.json', - specFile: 'supabase_swift_v0.yml', - type: 'reference', - }, - { - id: 'reference_kotlin_v0', - path: '/reference/kotlin', - commonSectionsFile: 'common-client-libs-sections.json', - specFile: 'supabase_kt_v0.yml', - type: 'reference', - }, - { - id: 'reference_cli', - path: '/reference/cli', - commonSectionsFile: 'common-cli-sections.json', - type: 'reference', - }, - { - id: 'reference_api', - path: '/reference/api', - commonSectionsFile: 'common-api-sections.json', - type: 'reference', - }, - { - id: 'reference_self_hosting_auth', - path: '/reference/self-hosting-auth', - commonSectionsFile: 'common-self-hosting-auth-sections.json', - type: 'reference', - }, - { - id: 'reference_self_hosting_storage', - path: '/reference/self-hosting-storage', - commonSectionsFile: 'common-self-hosting-storage-sections.json', - type: 'reference', - }, - { - id: 'reference_self_hosting_realtime', - path: '/reference/self-hosting-realtime', - commonSectionsFile: 'common-self-hosting-realtime-sections.json', - type: 'reference', - }, - { - id: 'reference_self_hosting_analytics', - path: '/reference/self-hosting-analytics', - commonSectionsFile: 'common-self-hosting-analytics-sections.json', - type: 'reference', - }, - { - id: 'reference_self_hosting_functions', - path: '/reference/self-hosting-functions', - commonSectionsFile: 'common-self-hosting-functions-sections.json', - type: 'reference', - }, -] - -function getMenuById(id: string) { - return menus.find((menu) => menu.id === id) -} - -function getMenuByUrl(basePath: string, url: string) { - // If multiple matches, choose the menu with the longest path - const [menu] = menus - .filter(({ path }) => url.startsWith(`${basePath}${path}`)) - .sort((a, b) => b.path.length - a.path.length) - - return menu -} - -function getMenuElement(menu: Menu) { - const menuType = menu.type - switch (menuType) { - case 'home': - return - case 'guide': - return - case 'reference': - return ( - - ) - default: - throw new Error(`Unknown menu type '${menuType}'`) - } -} - -const NavigationMenu = () => { - const router = useRouter() - - function handleRouteChange(url: string) { - const menu = getMenuByUrl(router.basePath, url) - if (menu) { - menuState.setMenuLevelId(menu.id) - } - } - - useEffect(() => { - handleRouteChange(router.basePath + router.asPath) - // Listen for page changes after a navigation or when the query changes - router.events.on('routeChangeComplete', handleRouteChange) - return () => { - router.events.off('routeChangeComplete', handleRouteChange) - } - }, [router.events]) - - const level = useMenuLevelId() - const menu = getMenuById(level) - - return getMenuElement(menu) -} - -export default memo(NavigationMenu) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.utils.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.utils.ts deleted file mode 100644 index 18aec08d3265e..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.utils.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { useEffect, useState } from 'react' -import { ICommonItem } from '~/components/reference/Reference.types' -import { Json } from '~/types' - -/** - * Recursively filter common sections and their sub items based on - * what is available in their spec - */ -export function deepFilterSections( - sections: T[], - specFunctionIds: string[] -): T[] { - return sections - .filter( - (section) => - section.type === 'category' || - section.type === 'markdown' || - specFunctionIds.includes(section.id) - ) - .map((section) => { - if ('items' in section) { - return { - ...section, - items: deepFilterSections(section.items, specFunctionIds), - } - } - return section - }) -} - -/** - * Imports common sections file dynamically. - * - * Dynamic imports allow for code splitting which - * dramatically reduces app bundle size. - * - * See https://webpack.js.org/api/module-methods/#dynamic-expressions-in-import - */ -export function useCommonSections(commonSectionsFile: string) { - const [commonSections, setCommonSections] = useState() - - useEffect(() => { - async function fetchCommonSections() { - const commonSections = await import( - /* webpackInclude: /common-.*\.json$/ */ - /* webpackMode: "lazy" */ - `~/../../spec/${commonSectionsFile}` - ) - setCommonSections(commonSections.default) - } - fetchCommonSections() - }, [commonSectionsFile]) - - return commonSections -} - -/** - * Imports spec file dynamically. - * - * Dynamic imports allow for code splitting which - * dramatically reduces app bundle size. - * - * See https://webpack.js.org/api/module-methods/#dynamic-expressions-in-import - */ -export function useSpec(specFile?: string) { - const [spec, setSpec] = useState() - - useEffect(() => { - if (!specFile) { - return - } - async function fetchSpec() { - const spec = await import( - /* webpackInclude: /supabase_.*\.ya?ml$/ */ - /* webpackMode: "lazy" */ - `~/../../spec/${specFile}` - ) - setSpec(spec.default) - } - fetchSpec() - }, [specFile]) - - return spec -} diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx deleted file mode 100644 index 8c88d73156072..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import Link from 'next/link' -import { useRouter } from 'next/router' -import { IconChevronLeft } from 'ui' -import * as NavItems from './NavigationMenu.constants' - -import clientLibsCommon from '~/../../spec/common-cli.yml' assert { type: 'yml' } - -const NavigationMenuCliList = ({ currentLevel, setLevel, id }) => { - const router = useRouter() - - const menu = NavItems[id] - - const FunctionLink = ({ - title, - id, - icon, - }: { - title: string - name: string - id: string - icon?: string - }) => { - return ( -
  • - - - {icon && } - {title} - - -
  • - ) - } - - const SideMenuTitle = ({ title }: { title: string }) => { - return ( - - {title} - - ) - } - - const Divider = () => { - return
    - } - - const MenuSections = [ - { - key: 'general', - label: 'General', - }, - { - key: 'secrets', - label: 'Secrets', - }, - { - key: 'projects', - label: 'Projects', - }, - { - key: 'organizations', - label: 'Organizations', - }, - { - key: 'migration', - label: 'Migration', - }, - { - key: 'database', - label: 'Database', - }, - { - key: 'completion', - label: 'Completion', - }, - ] - - return ( -
    -
    - - -
    -
    - -
    -
    - Back to menu -
    - -
    - - -

    - {menu.title ?? currentLevel} -

    -
    -
      - {MenuSections.map((section) => { - return ( - <> - - - - {clientLibsCommon.commands - .filter((x) => x.product === section.key) - .map((x, index) => { - return - })} - - ) - })} - - -
    -
    -
    - ) -} - -export default NavigationMenuCliList diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx deleted file mode 100644 index a07e4eb98e795..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import * as Accordion from '@radix-ui/react-accordion' -import { useRouter } from 'next/router' -import React from 'react' -import NavigationMenuGuideListItems from './NavigationMenuGuideListItems' -import * as NavItems from './NavigationMenu.constants' - -interface Props { - id: string - collapsible?: boolean - value?: string[] -} -const NavigationMenuGuideList: React.FC = ({ id, value }) => { - const router = useRouter() - - const menu = NavItems[id] - - // get url - const url = router.asPath - - // We need to decide how deep we want the menu to be for matching urls - // if the links are really deep, we don't want to match all the way out - // But we need to reach out further to make the structure of /resources/postgres/ work - // look at /resources/postgres/ vs /auth/phone-login for how these are different - let firstLevelRoute - if (url.includes('resources/postgres/')) { - firstLevelRoute = url?.split('/')?.slice(0, 5)?.join('/') - } else { - firstLevelRoute = url?.split('/')?.slice(0, 4)?.join('/') - } - - return ( - - - - ) -} - -export default NavigationMenuGuideList diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx deleted file mode 100644 index 0d390a0e6af29..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx +++ /dev/null @@ -1,202 +0,0 @@ -import { useTheme } from 'common/Providers' -import Image from 'next/image' -import Link from 'next/link' -import { useRouter } from 'next/router' -import React, { useEffect, useRef } from 'react' -import { IconChevronLeft } from '~/../../packages/ui' -import * as Accordion from '@radix-ui/react-accordion' -import HomeMenuIconPicker from './HomeMenuIconPicker' - -const HeaderLink = React.memo(function HeaderLink(props: { - title: string - id: string - url: string -}) { - const router = useRouter() - - return ( - - {props.title ?? props.id} - - ) -}) - -const ContentAccordionLink = React.memo(function ContentAccordionLink(props: any) { - const router = useRouter() - const { isDarkMode } = useTheme() - const activeItem = props.subItem.url === router.pathname - const activeItemRef = useRef(null) - - const LinkContainer = (props) => { - return ( - - {props.children} - - ) - } - - useEffect(() => { - // scroll to active item - if (activeItem && activeItemRef.current) { - // this is a hack, but seems a common one on Stackoverflow - setTimeout(() => { - activeItemRef.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' }) - }, 0) - } - }) - return ( - <> - {props.subItemIndex === 0 && ( - <> -
    - - {props.parent.name} - - - )} - -
  • - - {props.subItem.icon && ( - {props.subItem.name - )} - {props.subItem.name} - -
  • - - {props.subItem.items && props.subItem.items.length > 0 && ( - - {props.subItem.items.map((subSubItem) => { - return ( -
  • - - - {subSubItem.name} - - -
  • - ) - })} -
    - )} -
    - - ) -}) - -const ContentLink = React.memo(function ContentLink(props: any) { - const router = useRouter() - - return ( -
  • - - - {props.icon && ( - {props.icon} - )} - {props.name} - - -
  • - ) -}) - -const Content = (props) => { - const { menu, id } = props - - return ( -
      - - -
      -
      - -
      -
      - Back to Home -
      - - - - -
      - - -
      -
      - - - {menu.items.map((x) => { - return ( -
      - {x.items && x.items.length > 0 ? ( -
      - {x.items.map((subItem, subItemIndex) => { - return ( - - ) - })} -
      - ) : ( - - )} -
      - ) - })} -
    - ) -} - -export default React.memo(Content) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefList.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefList.tsx deleted file mode 100644 index 9725daa229be4..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefList.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { useCommonSections, useSpec } from './NavigationMenu.utils' -import NavigationMenuRefListItems from './NavigationMenuRefListItems' - -import React from 'react' - -interface NavigationMenuRefListProps { - id: string - basePath: string - commonSectionsFile: string - specFile?: string -} - -const NavigationMenuRefList = ({ - id, - basePath, - commonSectionsFile, - specFile, -}: NavigationMenuRefListProps) => { - const commonSections = useCommonSections(commonSectionsFile) - const spec = useSpec(specFile) - - if (!commonSections) { - return null - } - - if (specFile && !spec) { - return null - } - - const filteredSections = commonSections.filter((section) => { - return !section.excludes?.includes(id) - }) - - return ( -
    - -
    - ) -} - -export default React.memo(NavigationMenuRefList) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx deleted file mode 100644 index 8c2007c78b322..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx +++ /dev/null @@ -1,222 +0,0 @@ -import * as Accordion from '@radix-ui/react-accordion' -import Link from 'next/link' -import { useRouter } from 'next/router' -import { IconChevronLeft, IconChevronUp, cn } from 'ui' -import * as NavItems from './NavigationMenu.constants' - -import Image from 'next/image' - -import RevVersionDropdown from '~/components/RefVersionDropdown' -import { useMenuActiveRefId } from '~/hooks/useMenuState' - -import React, { Fragment } from 'react' -import { ICommonItem, ICommonSection } from '~/components/reference/Reference.types' -import HomeMenuIconPicker from './HomeMenuIconPicker' -import { deepFilterSections } from './NavigationMenu.utils' - -const HeaderLink = React.memo(function HeaderLink(props: any) { - return ( - - {props.title ?? props.id} - - ) -}) - -interface FunctionLinkProps { - title: string - name?: string - id: string - icon?: string - basePath: string - slug: string - isParent?: boolean - isSubItem?: boolean -} - -const FunctionLink = React.memo(function FunctionLink({ - title, - id, - icon, - basePath, - slug, - isParent = false, - isSubItem = false, -}: FunctionLinkProps) { - const router = useRouter() - const activeAccordionItem = useMenuActiveRefId() - - const url = `${router.basePath}${basePath}/${slug}` - const active = activeAccordionItem === id - - return ( -
  • - { - e.preventDefault() - history.pushState({}, '', url) - document.getElementById(slug)?.scrollIntoView() - }} - className={cn( - 'cursor-pointer transition text-sm hover:text-scale-1200 gap-3 relative', - isParent ? 'flex justify-between' : 'leading-3', - active ? 'text-brand' : 'text-scale-1000' - )} - > - {icon && {icon}} - {title} - {active && !isSubItem && ( - - )} - {isParent && ( - - )} - -
  • - ) -}) - -export interface RenderLinkProps { - section: ICommonSection - basePath: string -} - -const RenderLink = React.memo(function RenderLink({ section, basePath }: RenderLinkProps) { - const activeAccordionItem = useMenuActiveRefId() - - if (!('items' in section)) { - return ( - - ) - } - - let active = - section.id === activeAccordionItem || - section.items.some((item) => item.id === activeAccordionItem) - - return ( - - - - - {section.items.map((item) => { - return ( - - ) - })} - - - - ) -}) - -const SideMenuTitle = ({ title }: { title: string }) => { - return ( - - {title} - - ) -} - -const Divider = () => { - return
    -} - -interface NavigationMenuRefListItemsProps { - id: string - basePath: string - commonSections: ICommonItem[] - spec?: any -} - -const NavigationMenuRefListItems = ({ - id, - basePath, - commonSections, - spec, -}: NavigationMenuRefListItemsProps) => { - const menu = NavItems[id] - - const specFunctionIds = spec?.functions.map(({ id }) => id) - const filteredSections = spec - ? deepFilterSections(commonSections, specFunctionIds) - : commonSections - - return ( -
    - - -
    -
    - -
    -
    - Back to Main Menu -
    - -
    - - - -
    -
      - {filteredSections.map((section) => { - return ( - - {section.type === 'category' ? ( - <> - - - {section.items.map((item) => ( - - ))} - - ) : ( - - )} - - ) - })} -
    -
    - ) -} - -export default React.memo(NavigationMenuRefListItems) diff --git a/apps/docs/components/Navigation/NavigationMenu/TopNavBar.tsx b/apps/docs/components/Navigation/NavigationMenu/TopNavBar.tsx deleted file mode 100644 index c96cac5fd9240..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/TopNavBar.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import { useTheme } from 'common/Providers' -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, - Listbox, - SearchButton, -} from 'ui' -import { REFERENCES } from './NavigationMenu.constants' - -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] - - useEffect(() => { - setMounted(true) - }, [isDarkMode]) - - 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 deleted file mode 100644 index bba1342132191..0000000000000 --- a/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import { useTheme } from 'common/Providers' -import Image from 'next/image' -import Link from 'next/link' -import { useRouter } from 'next/router' -import { FC, useEffect, useState } from 'react' -import { Button, IconCommand, IconGitHub, IconMoon, IconSearch, IconSun, SearchButton } from 'ui' - -import { getPageType } from '~/lib/helpers' -import { REFERENCES } from './NavigationMenu.constants' - -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 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 deleted file mode 100644 index 25a2335da54b8..0000000000000 --- a/apps/docs/components/Navigation/RefSwitcher.tsx +++ /dev/null @@ -1,174 +0,0 @@ -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/Navigation/SideBar.tsx b/apps/docs/components/Navigation/SideBar.tsx deleted file mode 100644 index e76fa4954bf8a..0000000000000 --- a/apps/docs/components/Navigation/SideBar.tsx +++ /dev/null @@ -1,192 +0,0 @@ -import Link from 'next/link' -import Image from 'next/image' -import { useRouter } from 'next/router' -import { IconChevronRight, IconArrowLeft } from '~/../../packages/ui' -import { REFERENCES } from './NavigationMenu/NavigationMenu.constants' - -import { NavMenuGroup, NavMenuSection } from './Navigation.types' -import * as Accordion from '@radix-ui/react-accordion' - -const SideBar = ({ menuItems = [] }: { menuItems: any }) => { - const { asPath } = useRouter() - const pathSegments = asPath.split('/') - - const isInReferencePages = pathSegments.includes('reference') && pathSegments.length >= 3 - const referenceMeta = pathSegments.length >= 3 ? REFERENCES[pathSegments[2]] : undefined - - const currentSection: NavMenuGroup = menuItems.find((group) => { - const foundItem = group.items.find((section) => { - if (section.items.length > 0) { - const foundSubItem = section.items.find((item) => { - if (item.url === asPath) return item - }) - if (foundSubItem) return section - } else { - if (section.url === asPath) return section - } - }) - if (foundItem) return group - }) - - const currentSubSection: NavMenuSection = - currentSection !== undefined - ? currentSection.items.find((section) => { - if (section.items.length === 0) { - return undefined - } else { - return section.items.find((item) => { - if (item.url === asPath) return item - }) - } - }) - : undefined - - return ( -
    - {isInReferencePages && ( - <> - - -
    - - All Reference Docs -
    -
    - - {referenceMeta !== undefined && ( -
    -
    - {referenceMeta.name} -
    -

    {referenceMeta.name}

    -
    - )} - - )} - {menuItems.length === 1 ? ( -
    - {menuItems[0].items.map((item) => ( - - -
    - {item.name} -
    -
    - - ))} -
    - ) : ( - - {menuItems.map((group: NavMenuGroup) => ( - - - - - {group.label} - - - - {group.items.map((section: NavMenuSection) => { - if (section.items.length === 0) { - return ( - - -
    - {section.name} -
    -
    - - ) - } else { - return ( - - - - - - {section.name} - - - - {section.items.map((item: NavMenuSection) => ( - - -
    - {item.name} -
    -
    - - ))} -
    -
    -
    - ) - } - })} -
    -
    - ))} -
    - )} -
    - ) -} - -export default SideBar diff --git a/apps/docs/components/Options.tsx b/apps/docs/components/Options.tsx deleted file mode 100644 index e349cdd97bb1e..0000000000000 --- a/apps/docs/components/Options.tsx +++ /dev/null @@ -1,83 +0,0 @@ -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 &&

    {props.description}

    } - - {props.children} -
    - ) -} - -Options.Option = Option - -export default Options diff --git a/apps/docs/components/Pagination.tsx b/apps/docs/components/Pagination.tsx deleted file mode 100644 index ed6b6e510e514..0000000000000 --- a/apps/docs/components/Pagination.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import Link from 'next/link' -import { IconArrowLeft, IconArrowRight } from 'ui' - -const Pagination = ({ currentPage, totalCount }: { currentPage: number; totalCount: number }) => { - // TODO: not sure if this is the most efficient way to do this. may need to refactor. - const totalArray = Array.from({ length: totalCount }, (_, i: number) => i + 1) - const pages = totalArray.filter((page: number) => { - return page >= currentPage - 2 && page <= currentPage + 2 - }) - - return ( -
      -
    • - - - - - -
    • - {pages.map((page: number, i: number) => { - i = i + 1 - return ( -
    • - - - {page} - - -
    • - ) - })} -
    • - - - - - -
    • -
    - ) -} - -export default Pagination diff --git a/apps/docs/components/Params.tsx b/apps/docs/components/Params.tsx deleted file mode 100644 index 1099496619849..0000000000000 --- a/apps/docs/components/Params.tsx +++ /dev/null @@ -1,31 +0,0 @@ -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 && ( -

    {paramItem.description}

    - )} - {paramItem.children} -
  • - ) -} - -export default Param diff --git a/apps/docs/components/RefVersionDropdown.tsx b/apps/docs/components/RefVersionDropdown.tsx deleted file mode 100644 index 7a5b8bb88ec49..0000000000000 --- a/apps/docs/components/RefVersionDropdown.tsx +++ /dev/null @@ -1,73 +0,0 @@ -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 deleted file mode 100644 index 977ca043cefe0..0000000000000 --- a/apps/docs/components/StepHike/StepHikeContext.tsx +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index cbb2731004f7e..0000000000000 --- a/apps/docs/components/StepHike/index.tsx +++ /dev/null @@ -1,187 +0,0 @@ -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 deleted file mode 100644 index 977ca043cefe0..0000000000000 --- a/apps/docs/components/StepHikeCompact/StepHikeContext.tsx +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index 3b6614351e560..0000000000000 --- a/apps/docs/components/StepHikeCompact/index.tsx +++ /dev/null @@ -1,96 +0,0 @@ -//import { Step } from 'next-seo/lib/types' -import { FC } from 'react' -import { cn } from 'ui' - -interface IStep { - title: string - step: number | string -} - -interface IStepHikeCompactSubcomponents { - Step: FC - Details: FC - Code: FC -} -interface IDetails { - title?: string - fullWidth?: boolean -} - -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, fullWidth = false }) => { - 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 deleted file mode 100644 index 297ade474998b..0000000000000 --- a/apps/docs/components/TableOfContents.tsx +++ /dev/null @@ -1,83 +0,0 @@ -// [Terry] -// Delete this after we've implemented GuidesTableofContents and moved all guides -// and rename GuidesTableofContents to TableOfContents - -import { FC } from 'react' -import { getAnchor, removeAnchor } from './CustomHTMLElements/CustomHTMLElements.utils' - -interface TOCHeader { - id: number - lvl: number - seen: number - content: string - slug: string -} - -interface Props { - toc: any - video?: string -} - -const formatSlug = (slug: string) => { - // [Joshen] We will still provide support for headers declared like this: - // ## REST API {#rest-api-overview} - // At least for now, this was a docusaurus thing. - if (slug.includes('#')) return slug.split('-#')[1] - return slug -} - -const formatTOCHeader = (content: string) => { - let begin = false - const res = [] - for (const x of content) { - if (x === '`') { - if (!begin) { - begin = true - res.push(``) - } else { - begin = false - res.push(``) - } - } else { - res.push(x) - } - } - return res.join('') -} - -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 ( - <> - {video && ( -
    - -
    - )} -
      - {(toc.json as TOCHeader[]) - .filter((item) => item.lvl !== 1 && item.lvl <= 3) - .map((item: any, i: number) => { - return ( -
    • - -
    • - ) - })} -
    - - ) -} - -export default TableOfContents diff --git a/apps/docs/components/index.tsx b/apps/docs/components/index.tsx deleted file mode 100644 index c837ee2c74b33..0000000000000 --- a/apps/docs/components/index.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import Link from 'next/link' -import { Alert, Button, CodeBlock, GlassPanel, markdownComponents, Tabs } from 'ui' -import StepHikeCompact from '~/components/StepHikeCompact' -// Common components -import ButtonCard from './ButtonCard' -import JwtGenerator from './JwtGenerator' - -// Page specific components -import AuthProviders from './AuthProviders' -import Extensions from './Extensions' -import Frameworks from './Frameworks' -import FunctionsExamples from './FunctionsExamples' - -// Other components -import { Mermaid } from 'mdx-mermaid/lib/Mermaid' -import RefSubLayout from '~/layouts/ref/RefSubLayout' -import { Heading } from './CustomHTMLElements' -import DatabaseSetup from './MDX/database_setup.mdx' -import ProjectSetup from './MDX/project_setup.mdx' -import QuickstartIntro from './MDX/quickstart_intro.mdx' -import SocialProviderSettingsSupabase from './MDX/social_provider_settings_supabase.mdx' -import SocialProviderSetup from './MDX/social_provider_setup.mdx' -import StorageManagement from './MDX/storage_management.mdx' -import KotlinProjectSetup from './MDX/kotlin_project_setup.mdx' -import { CH } from '@code-hike/mdx/components' -import RefHeaderSection from './reference/RefHeaderSection' - -// Ref version specific -import CliGlobalFlagsHandler from '~/components/reference/enrichments/cli/CliGlobalFlagsHandler' - -import Options from '~/components/Options' -import Param from '~/components/Params' - -import { Admonition } from 'ui' -import { - IconMenuJavascript, - IconMenuHome, - IconMenuGettingStarted, - IconMenuDatabase, - IconMenuServerlessApis, - IconMenuAuth, - IconMenuEdgeFunctions, - IconMenuRealtime, - IconMenuStorage, - IconMenuPlatform, - IconMenuResources, - IconMenuSelfHosting, - IconMenuIntegrations, - IconMenuFlutter, - IconMenuPython, - IconMenuCsharp, - IconMenuSwift, - IconMenuKotlin, - IconMenuApi, - IconMenuCli, -} from './Navigation/NavigationMenu/HomeMenuIcons' - -const components = { - ...markdownComponents, - Admonition, - Button, - ButtonCard, - CH, - CodeBlock, - GlassPanel, - Link, - Frameworks, - AuthProviders, - FunctionsExamples, - JwtGenerator, - QuickstartIntro, - DatabaseSetup, - ProjectSetup, - KotlinProjectSetup, - SocialProviderSetup, - SocialProviderSettingsSupabase, - StepHikeCompact, - StorageManagement, - Mermaid, - Extensions, - Alert: (props: any) => ( - - {props.children} - - ), - Tabs, - TabPanel: (props: any) => {props.children}, - h2: (props: any) => ( - - {props.children} - - ), - h3: (props: any) => ( - - {props.children} - - ), - RefSubLayout, - RefHeaderSection: (props: any) => , - CliGlobalFlagsHandler: () => , - Options, - Param, - IconMenuJavascript, - IconMenuHome, - IconMenuGettingStarted, - IconMenuDatabase, - IconMenuServerlessApis, - IconMenuAuth, - IconMenuEdgeFunctions, - IconMenuRealtime, - IconMenuStorage, - IconMenuPlatform, - IconMenuResources, - IconMenuSelfHosting, - IconMenuIntegrations, - IconMenuFlutter, - IconMenuPython, - IconMenuCsharp, - IconMenuKotlin, - IconMenuSwift, - IconMenuApi, - IconMenuCli, -} - -export default components diff --git a/apps/docs/components/reference/ApiOperationSection.tsx b/apps/docs/components/reference/ApiOperationSection.tsx deleted file mode 100644 index 6713809bccf66..0000000000000 --- a/apps/docs/components/reference/ApiOperationSection.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { CodeBlock, Tabs } from 'ui' -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.path} - -
    -
    -

    {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 deleted file mode 100644 index 792297211de24..0000000000000 --- a/apps/docs/components/reference/CLICommandSection.tsx +++ /dev/null @@ -1,213 +0,0 @@ -import ReactMarkdown from 'react-markdown' -import { CodeBlock, IconChevronRight, Tabs } from 'ui' -import spec from '~/../../spec/cli_v1_commands.yaml' assert { type: 'yml' } -import Options from '~/components/Options' -import Param from '~/components/Params' -import RefSubLayout from '~/layouts/ref/RefSubLayout' -import RefDetailCollapse from './RefDetailCollapse' - -export type Flag = { - id: string - name: string - description: string - default_value: string - accepted_values: AcceptedValue[] - required?: boolean - /** Whether subcommands inherit this flag. */ - inherit?: boolean -} - -export type AcceptedValue = { - id: string - name: string - type: 'string' | 'boolean' | 'object' - description?: string -} - -export type Example = { - id: string - name: string - code: string - response: string - description?: string -} - -export type Command = { - id: string - title: string - description: string - flags?: Flag[] - summary: string - tags?: string[] - links?: string[] - subcommands?: string[] - usage?: string - examples?: Example[] -} - -const CliCommandSection = (props) => { - const command = spec.commands.find((x: any) => x.id === props.funcData.id) - const parentCommand = spec.commands.find( - (x: any) => x.subcommands && x.subcommands.find((y: any) => y === props.funcData.id) - ) - - const commandFlags = [ - ...(parentCommand?.flags?.filter((x: any) => x.inherit) || []), - ...command.flags, - ] - - return ( - - -
    -
    -
    - {command.description ? ( -
    - {command.description} -
    - ) : ( -

    - {command.summary} -

    - )} -
    - - {command.subcommands?.length > 0 && ( -
    - )} - {commandFlags.length > 0 && ( - <> -

    Flags

    -
      - {commandFlags.map((flag: Flag) => ( - <> -
    • - - {flag?.accepted_values && ( - - {flag?.accepted_values.map((value) => { - return - })} - - )} - -
    • - - ))} -
    - - )} -
    -
    - - {(command.examples || command.usage) && ( - -
    - - {command.examples ? ( - command.examples.map((example) => { - const exampleId = `${command.id}-${example.id}` - return ( - - - {example.code} - - - - - {example.response} - - - - {example.description && ( - -
    - {example.description} -
    -
    - )} -
    - ) - }) - ) : ( - // TODO: remove this block once all commands have examples - - - {command.usage} - - - )} -
    -
    -
    - )} - - ) -} - -export default CliCommandSection diff --git a/apps/docs/components/reference/OldVersionAlert.tsx b/apps/docs/components/reference/OldVersionAlert.tsx deleted file mode 100644 index 4a5a601966aa0..0000000000000 --- a/apps/docs/components/reference/OldVersionAlert.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import Link from 'next/link' -import { useRouter } from 'next/router' -import { Admonition } from 'ui' -import { useMenuActiveRefId } from '~/hooks/useMenuState' -import { ICommonSection } from './Reference.types' - -export interface OldVersionAlertProps { - sections: ICommonSection[] -} - -const OldVersionAlert = ({ sections }: OldVersionAlertProps) => { - const router = useRouter() - const activeRefId = useMenuActiveRefId() - - const activeSection = sections.find(({ id }) => id === activeRefId) - - // Remove the version number from URL to get the latest - const latestVersionUrl = router.asPath - .split('/') - .slice(0, -2) - .concat(activeSection ? [activeSection.slug] : []) - .join('/') - - return ( -
    - - You're viewing an older version of this library. -
    - - - Switch to the latest - - - . -
    -
    - ) -} - -export default OldVersionAlert diff --git a/apps/docs/components/reference/RefDetailCollapse.tsx b/apps/docs/components/reference/RefDetailCollapse.tsx deleted file mode 100644 index fa152727c017e..0000000000000 --- a/apps/docs/components/reference/RefDetailCollapse.tsx +++ /dev/null @@ -1,44 +0,0 @@ -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 deleted file mode 100644 index a388c11425cd3..0000000000000 --- a/apps/docs/components/reference/RefEducationSection.tsx +++ /dev/null @@ -1,27 +0,0 @@ -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 deleted file mode 100644 index 88c06beda04ee..0000000000000 --- a/apps/docs/components/reference/RefFunctionSection.tsx +++ /dev/null @@ -1,243 +0,0 @@ -import ReactMarkdown from 'react-markdown' - -import { CodeBlock, IconDatabase, Tabs } from 'ui' - -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' -import { Fragment } from 'react' -import { IRefFunctionSection } from './Reference.types' -import components from '~/components' - -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 <> - - 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} -
    - )} - {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 = - '' + - (example.code && - example.code - .trim() - .replace(/^```.*/, '') - .replace(/```$/, '')) - - const codeBlockLang = example?.code?.startsWith('```js') - ? 'js' - : example?.code?.startsWith('```ts') - ? 'ts' - : example?.code?.startsWith('```dart') - ? 'dart' - : example?.code?.startsWith('```c#') - ? 'csharp' - : example?.code?.startsWith('```kotlin') - ? 'kotlin' - : 'js' - // ` - // 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 staticExample = item.examples[exampleIndex] - - const response = staticExample.response - const sql = staticExample?.data?.sql - const tables = staticExample?.data?.tables - - return ( - - - {exampleString} - - - {((tables && tables.length > 0) || sql) && ( - - <> - {tables && - tables.length > 0 && - tables.map((table) => { - return ( -
    -
    -
    -
    - -
    -
    - {table.name} -
    -
    -
    -
    - ) - })} - {sql && ( - - {sql.replace(/sql/g, '').replace(/```/g, '')} - - )} - -
    - )} - - {response && ( - - - {response.replace(/```/g, '').replace('json', '')} - - - )} - - {example.description && ( - -
    - - {example.description} - -
    -
    - )} -
    - ) - })} -
    -
    - - )} -
    -
    - - ) -} - -export default RefFunctionSection diff --git a/apps/docs/components/reference/RefHeaderSection.tsx b/apps/docs/components/reference/RefHeaderSection.tsx deleted file mode 100644 index 0d84d792b201f..0000000000000 --- a/apps/docs/components/reference/RefHeaderSection.tsx +++ /dev/null @@ -1,16 +0,0 @@ -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/RefSEO.tsx b/apps/docs/components/reference/RefSEO.tsx deleted file mode 100644 index 237ecec3f1562..0000000000000 --- a/apps/docs/components/reference/RefSEO.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { NextSeo } from 'next-seo' -import { useRouter } from 'next/router' - -function RefSEO({ title }) { - const router = useRouter() - - const path = router.asPath.replace('crawlers/', '') - - return ( - - ) -} - -export default RefSEO diff --git a/apps/docs/components/reference/RefSectionHandler.tsx b/apps/docs/components/reference/RefSectionHandler.tsx deleted file mode 100644 index e100cfbcb2065..0000000000000 --- a/apps/docs/components/reference/RefSectionHandler.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import Head from 'next/head' -import { useRouter } from 'next/router' -import { useEffect } from 'react' - -import RefEducationSection from '~/components/reference/RefEducationSection' -import RefFunctionSection from '~/components/reference/RefFunctionSection' - -import RefSubLayout from '~/layouts/ref/RefSubLayout' -import ApiOperationSection from './ApiOperationSection' -import CliCommandSection from './CLICommandSection' -import OldVersionAlert from './OldVersionAlert' -import { IAPISpec, ICommonSection, IRefStaticDoc, ISpec, TypeSpec } from './Reference.types' - -interface RefSectionHandlerProps { - sections: ICommonSection[] - spec?: ISpec | IAPISpec - typeSpec?: TypeSpec - pageProps: { docs: IRefStaticDoc[] } - type: 'client-lib' | 'cli' | 'api' - isOldVersion?: boolean -} - -const RefSectionHandler = (props: RefSectionHandlerProps) => { - const router = useRouter() - - const [slug] = router.query.slug - - // 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(() => { - document.getElementById(slug)?.scrollIntoView() - }, [slug]) - - useEffect(() => { - function handler() { - const [slug] = window.location.pathname.split('/').slice(-1) - document.getElementById(slug)?.scrollIntoView() - } - - window.addEventListener('popstate', handler) - - return () => { - window.removeEventListener('popstate', handler) - } - }, []) - - function getPageTitle() { - switch (props.type) { - case 'client-lib': - return props.spec.info.title - case 'cli': - return 'Supabase CLI reference' - case 'api': - return 'Supabase API reference' - default: - return 'Supabase Docs' - } - } - - const pageTitle = getPageTitle() - const section = props.sections.find((section) => section.slug === slug) - const fullTitle = `${pageTitle}${section ? ` - ${section.title}` : ''}` - const path = router.asPath.replace('/crawlers', '') - - return ( - <> - - {fullTitle} - - - - - - - {props.isOldVersion && } - - {props.sections.map((section, i) => { - const sectionType = section.type - switch (sectionType) { - case 'markdown': - const markdownData = props.pageProps.docs.find((doc) => doc.id === section.id) - - return ( - - ) - case 'function': - return ( - - ) - case 'cli-command': - return ( - - ) - case 'operation': - return ( - - ) - default: - throw new Error(`Unknown common section type '${sectionType}'`) - } - })} - - - ) -} - -export default RefSectionHandler diff --git a/apps/docs/components/reference/Reference.types.ts b/apps/docs/components/reference/Reference.types.ts deleted file mode 100644 index ce15320180e16..0000000000000 --- a/apps/docs/components/reference/Reference.types.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { enrichedOperation } from '~/lib/refGenerator/helpers' - -export interface ISpec { - openref: any - info: { - id: string - title: string - description: string - definition: string - libraries: any - slugPrefix: string - specUrl: string - } - functions: IFunctionDefinition[] -} - -export interface IAPISpec { - info: { - title: string - description?: string - version: string - contact?: {} - } - operations: enrichedOperation[] - sections: any -} - -export interface IFunctionDefinition { - title: string - id: string - $ref: string - description: string - examples?: [] -} - -export interface ICommonBase { - type: string - title: string - summary?: string -} - -export interface ICommonBaseSection extends ICommonBase { - id: string - slug: string - excludes?: string[] -} - -export interface ICommonCategory extends ICommonBase { - type: 'category' - items: ICommonSection[] - excludes?: string[] -} - -export interface ICommonMarkdown extends ICommonBaseSection { - type: 'markdown' -} - -export interface ICommonFunctionGroup extends ICommonBaseSection { - type: 'function' - isFunc: false - product: string - items: ICommonFunction[] -} - -export interface ICommonFunction extends ICommonBaseSection { - type: 'function' - product: string - parent?: string -} - -export interface ICommonCliCommand extends ICommonBaseSection { - type: 'cli-command' -} - -export interface ICommonApiOperation extends ICommonBaseSection { - type: 'operation' -} - -export type ICommonSection = - | ICommonMarkdown - | ICommonFunctionGroup - | ICommonFunction - | ICommonCliCommand - | ICommonApiOperation - -export type ICommonItem = ICommonCategory | ICommonSection - -export interface IRefFunctionSection { - funcData: any - commonFuncData: ICommonFunction - spec: any - typeSpec?: TypeSpec -} - -export interface IRefStaticDoc { - id: string - title: string - meta: { - id: string - title: string - hideTitle: boolean - } - content: { - compiledSource: string - frontmatter: {} - scope: {} - } -} - -export type TypeSpec = { - name: string - children: TypeSpecChild[] -} - -export type TypeSpecChild = { - id: number - name: string - kind: number - kindString?: string - flags?: {} - originalName?: string - children?: TypeSpecChild[] - defaultValue?: string - default?: any - groups?: any - sources?: any - target?: any - comment?: TypeSpecChildComment - typeParameter?: any - implementedTypes?: any - extendedTypes?: any - dereferenced?: TypeSpecChild - extendedBy?: any - indexSignature?: any - extendsType?: any - objectType?: any - trueType?: any - falseType?: any - type?: any - signatures?: any - overwrites?: any - inheritedFrom?: any - implementationOf?: any -} - -export interface TypeSpecChildComment { - shortText?: string - text?: string | null - returns?: string | null - tags?: any -} diff --git a/apps/docs/components/reference/enrichments/cli/CliGlobalFlagsHandler.tsx b/apps/docs/components/reference/enrichments/cli/CliGlobalFlagsHandler.tsx deleted file mode 100644 index e108730f65a0b..0000000000000 --- a/apps/docs/components/reference/enrichments/cli/CliGlobalFlagsHandler.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import RefSubLayout from '~/layouts/ref/RefSubLayout' - -import spec from '~/../../spec/cli_v1_commands.yaml' assert { type: 'yaml' } -import Param from '~/components/Params' -import Options from '~/components/Options' - -const CliGlobalFlagsHandler = () => { - return ( - - -

    Flags

    -
      - {spec.flags.map((flag) => { - return ( - - ) - })} -
    -
    - - -
    - ) -} - -export default CliGlobalFlagsHandler diff --git a/apps/docs/data/authProviders.ts b/apps/docs/data/authProviders.ts deleted file mode 100644 index 6a9a4b4d30c12..0000000000000 --- a/apps/docs/data/authProviders.ts +++ /dev/null @@ -1,214 +0,0 @@ -const authProviders = [ - { - name: 'Apple', - logo: '/docs/img/icons/apple-icon', - href: '/guides/auth/social-login/auth-apple', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Azure (Microsoft)', - logo: '/docs/img/icons/microsoft-icon', - href: '/guides/auth/social-login/auth-azure', - official: false, - supporter: 'TBD', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Bitbucket', - logo: '/docs/img/icons/bitbucket-icon', - href: '/guides/auth/social-login/auth-bitbucket', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Discord', - logo: '/docs/img/icons/discord-icon', - href: '/guides/auth/social-login/auth-discord', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Facebook', - logo: '/docs/img/icons/facebook-icon', - href: '/guides/auth/social-login/auth-facebook', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Figma', - logo: '/docs/img/icons/figma-icon', - href: '/guides/auth/social-login/auth-figma', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'GitHub', - logo: '/docs/img/icons/github-icon', - href: '/guides/auth/social-login/auth-github', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'GitLab', - logo: '/docs/img/icons/gitlab-icon', - href: '/guides/auth/social-login/auth-gitlab', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Google', - logo: '/docs/img/icons/google-icon', - href: '/guides/auth/social-login/auth-google', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Kakao', - logo: '/docs/img/icons/kakao-icon', - href: '/guides/auth/social-login/auth-kakao', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Keycloak', - logo: '/docs/img/icons/keycloak-icon', - href: '/guides/auth/social-login/auth-keycloak', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'LinkedIn', - logo: '/docs/img/icons/linkedin-icon', - href: '/guides/auth/social-login/auth-linkedin', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'MessageBird', - logo: '/docs/img/icons/messagebird-icon', - href: '/guides/auth/phone-login/messagebird', - official: false, - supporter: 'MessageBird', - platform: true, - selfHosted: true, - authType: 'phone', - }, - { - name: 'Notion', - logo: '/docs/img/icons/notion-icon', - href: '/guides/auth/social-login/auth-notion', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Slack', - logo: '/docs/img/icons/slack-icon', - href: '/guides/auth/social-login/auth-slack', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Spotify', - logo: '/docs/img/icons/spotify-icon', - href: '/guides/auth/social-login/auth-spotify', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Twitter', - logo: '/docs/img/icons/twitter-icon', - href: '/guides/auth/social-login/auth-twitter', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Twitch', - logo: '/docs/img/icons/twitch-icon', - href: '/guides/auth/social-login/auth-twitch', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Zoom', - logo: '/docs/img/icons/zoom-icon', - href: '/guides/auth/social-login/auth-zoom', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'social', - }, - { - name: 'Twilio', - logo: '/docs/img/icons/twilio-icon', - href: '/guides/auth/phone-login/twilio', - official: true, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'phone', - }, - { - name: 'Vonage', - logo: '/docs/img/icons/vonage-icon', - href: '/guides/auth/phone-login/vonage', - official: false, - supporter: 'Supabase', - platform: true, - selfHosted: true, - authType: 'phone', - }, -] - -export default authProviders diff --git a/apps/docs/data/contributors/contributors.json b/apps/docs/data/contributors/contributors.json deleted file mode 100644 index 5fc5ffb9e80a3..0000000000000 --- a/apps/docs/data/contributors/contributors.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "username": "Exploringtechnologies", - "avatar_url": "https://avatars0.githubusercontent.com/u/66567938?v=4" - }, - { - "username": "awalias", - "avatar_url": "https://avatars3.githubusercontent.com/u/458736?v=4" - }, - { - "username": "dependabot-preview[bot]", - "avatar_url": "https://avatars3.githubusercontent.com/in/2141?v=4" - }, - { - "username": "dependabot[bot]", - "avatar_url": "https://avatars0.githubusercontent.com/in/29110?v=4" - }, - { - "username": "dragarcia", - "avatar_url": "https://avatars3.githubusercontent.com/u/26374889?v=4" - }, - { - "username": "kiwicopple", - "avatar_url": "https://avatars0.githubusercontent.com/u/10214025?v=4" - }, - { - "username": "mcbyrne", - "avatar_url": "https://avatars0.githubusercontent.com/u/851914?v=4" - }, - { - "username": "s-pace", - "avatar_url": "https://avatars2.githubusercontent.com/u/32097720?v=4" - }, - { - "username": "soedirgo", - "avatar_url": "https://avatars3.githubusercontent.com/u/31685197?v=4" - }, - { - "username": "teymour-aldridge", - "avatar_url": "https://avatars3.githubusercontent.com/u/42674621?v=4" - } -] diff --git a/apps/docs/data/contributors/issues.json b/apps/docs/data/contributors/issues.json deleted file mode 100644 index 9ccb0d0f042bd..0000000000000 --- a/apps/docs/data/contributors/issues.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - { - "username": "dependabot-preview[bot]", - "avatar_url": "https://avatars3.githubusercontent.com/in/2141?v=4" - }, - { - "username": "kiwicopple", - "avatar_url": "https://avatars0.githubusercontent.com/u/10214025?v=4" - } -] diff --git a/apps/docs/data/extensions.json b/apps/docs/data/extensions.json deleted file mode 100644 index 96fb984b821d8..0000000000000 --- a/apps/docs/data/extensions.json +++ /dev/null @@ -1,422 +0,0 @@ -[ - { - "name": "address_standardizer", - "comment": "Used to parse an address into constituent elements. Generally used to support geocoding address normalization step.", - "tags": ["Utility"], - "link": "https://postgis.net/docs/manual-2.5/Address_Standardizer.html" - }, - { - "name": "address_standardizer_data_us", - "comment": "Address Standardizer US dataset example", - "tags": ["Dataset"], - "link": "https://postgis.net/docs/manual-2.5/Address_Standardizer.html" - }, - { - "name": "amcheck", - "comment": "functions for verifying relation integrity", - "tags": ["Admin", "Utility"], - "link": "https://www.postgresql.org/docs/current/amcheck.html" - }, - { - "name": "autoinc", - "comment": "functions for autoincrementing fields", - "tags": ["Utility"], - "link": "https://www.postgresql.org/docs/current/contrib-spi.html#id-1.11.7.50.6" - }, - { - "name": "bloom", - "comment": "bloom access method - signature file based index", - "tags": ["Index"], - "link": "https://www.postgresql.org/docs/current/bloom.html" - }, - { - "name": "btree_gin", - "comment": "support for indexing common datatypes in GIN", - "tags": ["Index"], - "link": "https://www.postgresql.org/docs/current/btree-gin.html" - }, - { - "name": "btree_gist", - "comment": "support for indexing common datatypes in GiST", - "tags": ["Index"], - "link": "https://www.postgresql.org/docs/current/btree-gist.html" - }, - { - "name": "citext", - "comment": "data type for case-insensitive character strings", - "tags": ["Data Type"], - "link": "https://www.postgresql.org/docs/current/citext.html" - }, - { - "name": "cube", - "comment": "data type for multidimensional cubes", - "tags": ["Data Type"], - "link": "https://www.postgresql.org/docs/current/cube.html" - }, - { - "name": "dblink", - "comment": "connect to other PostgreSQL databases from within a database", - "tags": ["Admin", "Utility"], - "link": "https://www.postgresql.org/docs/current/contrib-dblink-function.html" - }, - { - "name": "dict_int", - "comment": "text search dictionary template for integers", - "tags": ["Search"], - "link": "https://www.postgresql.org/docs/current/dict-int.html" - }, - { - "name": "dict_xsyn", - "comment": "text search dictionary template for extended synonym processing", - "tags": ["Search"], - "link": "https://www.postgresql.org/docs/current/dict-xsyn.html" - }, - { - "name": "earthdistance", - "comment": "calculate great-circle distances on the surface of the Earth", - "tags": ["Geo", "Utility"], - "link": "https://www.postgresql.org/docs/current/earthdistance.html" - }, - { - "name": "fuzzystrmatch", - "comment": "determine similarities and distance between strings", - "tags": ["Search"], - "link": "https://www.postgresql.org/docs/current/fuzzystrmatch.html" - }, - { - "name": "hstore", - "comment": "data type for storing sets of (key, value) pairs", - "tags": ["Data Type"], - "link": "https://www.postgresql.org/docs/current/hstore.html" - }, - { - "name": "hypopg", - "comment": "Hypothetical indexes for PostgreSQL", - "tags": ["Admin", "Index"], - "link": "/guides/database/extensions/hypopg" - }, - { - "name": "http", - "comment": "HTTP client for PostgreSQL, allows web page retrieval inside the database.", - "tags": ["Utility"], - "link": "/guides/database/extensions/http" - }, - { - "name": "insert_username", - "comment": "functions for tracking who changed a table", - "tags": ["Audit", "Utility"], - "link": "https://www.postgresql.org/docs/current/contrib-spi.html#id-1.11.7.50.7" - }, - { - "name": "old_snapshot", - "comment": "utilities in support of old_snapshot_threshold", - "tags": ["Admin", "Utility"], - "link": "https://www.postgresql.org/docs/current/oldsnapshot.html" - }, - { - "name": "index_advisor", - "comment": "optimize query performance with automatic index recommendation", - "tags": ["Utility"], - "link": "/guides/database/extensions/index_advisor" - }, - { - "name": "intarray", - "comment": "functions, operators, and index support for 1-D arrays of integers", - "tags": ["Utility"], - "link": "https://www.postgresql.org/docs/current/intarray.html" - }, - { - "name": "isn", - "comment": "data types for international product numbering standards", - "tags": ["Data Type"], - "link": "https://www.postgresql.org/docs/current/isn.html" - }, - { - "name": "lo", - "comment": "Large Object maintenance", - "tags": ["Data Type"], - "link": "https://www.postgresql.org/docs/current/lo.html" - }, - { - "name": "ltree", - "comment": "data type for hierarchical tree-like structures", - "tags": ["Data Type"], - "link": "https://www.postgresql.org/docs/current/ltree.html" - }, - { - "name": "moddatetime", - "comment": "functions for tracking last modification time", - "tags": ["Audit", "Utility"], - "link": "https://www.postgresql.org/docs/current/contrib-spi.html#id-1.11.7.50.8" - }, - { - "name": "pg_cron", - "comment": "Job scheduler for PostgreSQL", - "tags": ["Utility"], - "link": "/guides/database/extensions/pg_cron" - }, - { - "name": "pg_freespacemap", - "comment": "examine the free space map (FSM)", - "tags": ["Admin", "Utility"], - "link": "https://www.postgresql.org/docs/current/pgfreespacemap.html" - }, - { - "name": "pg_graphql", - "comment": "pg_graphql: GraphQL support", - "tags": ["Utility"], - "link": "/guides/database/extensions/pg_graphql" - }, - { - "name": "pg_hashids", - "comment": "pg_hashids", - "tags": ["Utility"], - "link": "/guides/database/extensions/pg_hashids" - }, - { - "name": "pg_jsonschema", - "comment": "pg_jsonschema", - "tags": ["Utility"], - "link": "/guides/database/extensions/pg_jsonschema" - }, - { - "name": "pg_net", - "comment": "Async HTTP", - "tags": ["Utility", "Notifications"], - "link": "/guides/database/extensions/pg_net" - }, - { - "name": "pg_prewarm", - "comment": "prewarm relation data", - "tags": ["Admin", "Utility"], - "link": "https://www.postgresql.org/docs/current/pgprewarm.html" - }, - { - "name": "pg_stat_monitor", - "comment": "The pg_stat_monitor is a PostgreSQL Query Performance Monitoring tool, based on PostgreSQL contrib module pg_stat_statements. pg_stat_monitor provides aggregated statistics, client information, plan details including plan, and histogram information.", - "tags": ["Utility"], - "link": "/guides/database/extensions/pg_stat_monitor" - }, - { - "name": "pg_stat_statements", - "comment": "track execution statistics of all SQL statements executed", - "tags": ["Admin", "Utility"], - "link": "/guides/database/extensions/pg_stat_statements" - }, - { - "name": "pg_surgery", - "comment": "extension to perform surgery on a damaged relation", - "tags": ["Admin", "Utility"], - "link": "https://www.postgresql.org/docs/current/pgsurgery.html" - }, - { - "name": "pg_trgm", - "comment": "text similarity measurement and index searching based on trigrams", - "tags": ["Search"], - "link": "https://www.postgresql.org/docs/current/pgtrgm.html" - }, - { - "name": "pgaudit", - "comment": "provides auditing functionality", - "tags": ["Audit", "Utility"], - "link": "/guides/database/extensions/pgaudit" - }, - { - "name": "pg_walinspect", - "comment": "functions to inspect contents of PostgreSQL Write-Ahead Log", - "tags": ["Admin", "Utility"], - "link": "https://www.postgresql.org/docs/current/pgwalinspect.html" - }, - { - "name": "pgcrypto", - "comment": "cryptographic functions", - "tags": ["Utility", "Cryptography"], - "link": "https://www.postgresql.org/docs/current/pgcrypto.html" - }, - { - "name": "pgjwt", - "comment": "JSON Web Token API for Postgresql", - "tags": ["Utility", "Cryptography"], - "link": "/guides/database/extensions/pgjwt" - }, - { - "name": "pgroonga", - "comment": "Super fast and all languages supported full text search index based on Groonga", - "tags": ["Search"], - "link": "/guides/database/extensions/pgroonga" - }, - { - "name": "pgroonga_database", - "comment": "PGroonga database management module", - "tags": ["Admin"], - "link": "https://pgroonga.github.io/reference/modules/pgroonga-database.html" - }, - { - "name": "pgrouting", - "comment": "pgRouting Extension", - "tags": ["Geo", "Utility"], - "link": "/guides/database/extensions/pgrouting" - }, - { - "name": "pgrowlocks", - "comment": "show row-level locking information", - "tags": ["Admin", "Utility"], - "link": "https://www.postgresql.org/docs/current/pgrowlocks.html" - }, - { - "name": "pgsodium", - "comment": "Postgres extension for libsodium functions", - "tags": ["Utility", "Cryptography"], - "link": "/guides/database/extensions/pgsodium" - }, - { - "name": "pgstattuple", - "comment": "show tuple-level statistics", - "tags": ["Admin", "Utility"], - "link": "https://www.postgresql.org/docs/current/pgstattuple.html" - }, - { - "name": "pgtap", - "comment": "Unit testing for PostgreSQL", - "tags": ["Utility", "Testing"], - "link": "/guides/database/extensions/pgtap" - }, - { - "name": "plcoffee", - "comment": "PL/CoffeeScript (v8) trusted procedural language", - "tags": ["Language"], - "link": "https://github.com/plv8/plv8/blob/master/doc/plv8.md#coffeescript-extension" - }, - { - "name": "pljava", - "comment": "PL/Java procedural language (https://tada.github.io/pljava/)", - "tags": ["Language"], - "link": "https://tada.github.io/pljava/" - }, - { - "name": "plls", - "comment": "PL/LiveScript (v8) trusted procedural language", - "tags": ["Language"], - "link": "https://github.com/plv8/plv8/blob/master/doc/plv8.md#livescript-extension" - }, - { - "name": "plpgsql", - "comment": "PL/pgSQL procedural language", - "tags": ["Language"], - "link": "https://www.postgresql.org/docs/current/plpgsql.html" - }, - { - "name": "plpgsql_check", - "comment": "extended check for plpgsql functions", - "tags": ["Utility", "Testing"], - "link": "/guides/database/extensions/plpgsql_check" - }, - { - "name": "plv8", - "comment": "PL/JavaScript (v8) trusted procedural language", - "tags": ["Language"], - "link": "/guides/database/extensions/plv8" - }, - { - "name": "postgis", - "comment": "PostGIS geometry and geography spatial types and functions", - "tags": ["Geo"], - "link": "/guides/database/extensions/postgis" - }, - { - "name": "postgres_fdw", - "comment": "foreign-data wrapper for remote PostgreSQL servers", - "tags": ["Admin"], - "link": "https://www.postgresql.org/docs/current/postgres-fdw.html" - }, - { - "name": "refint", - "comment": "functions for implementing referential integrity (obsolete)", - "tags": ["Utility"], - "link": "https://www.postgresql.org/docs/current/contrib-spi.html#id-1.11.7.50.5" - }, - { - "name": "rum", - "comment": "GIN-like index for text search", - "tags": ["Index", "Search"], - "link": "/guides/database/extensions/rum" - }, - { - "name": "seg", - "comment": "data type for representing line segments or floating-point intervals", - "tags": ["Utility"], - "link": "https://www.postgresql.org/docs/current/seg.html" - }, - { - "name": "sslinfo", - "comment": "information about SSL certificates", - "tags": ["Admin", "Utility"], - "link": "https://www.postgresql.org/docs/current/sslinfo.html" - }, - { - "name": "supautils", - "comment": "Supabase standard library", - "tags": ["Utility"], - "link": "https://supabase.github.io/supautils/" - }, - { - "name": "tablefunc", - "comment": "functions that manipulate whole tables, including crosstab", - "tags": ["Utility"], - "link": "https://www.postgresql.org/docs/current/tablefunc.html" - }, - { - "name": "tcn", - "comment": "Triggered change notifications", - "tags": ["Utility", "Notifications"], - "link": "https://www.postgresql.org/docs/current/tcn.html" - }, - { - "name": "timescaledb", - "comment": "Enables scalable inserts and complex queries for time-series data", - "tags": ["Time Series", "Data Type", "Utility"], - "link": "/guides/database/extensions/timescaledb" - }, - { - "name": "tsm_system_rows", - "comment": "TABLESAMPLE method which accepts number of rows as a limit", - "tags": ["Utility"], - "link": "https://www.postgresql.org/docs/current/tsm-system-rows.html" - }, - { - "name": "tsm_system_time", - "comment": "TABLESAMPLE method which accepts time in milliseconds as a limit", - "tags": ["Utility"], - "link": "https://www.postgresql.org/docs/current/tsm-system-time.html" - }, - { - "name": "unaccent", - "comment": "text search dictionary that removes accents", - "tags": ["Search"], - "link": "https://www.postgresql.org/docs/current/unaccent.html" - }, - { - "name": "uuid-ossp", - "comment": "generate universally unique identifiers (UUIDs)", - "tags": ["Utility", "Data Type"], - "link": "/guides/database/extensions/uuid-ossp" - }, - { - "name": "pgvector", - "comment": "vector data type with similarity search", - "tags": ["AI", "Data Type", "Search"], - "link": "/guides/database/extensions/pgvector" - }, - { - "name": "pg_repack", - "comment": "Optimize physical storage and remove bloat from tables and indexes", - "tags": ["Admin", "Utility"], - "link": "/guides/database/extensions/pg_repack" - }, - { - "name": "wrappers", - "comment": "Foreign data wrappers developed by Supabase", - "tags": ["Admin", "Utility"], - "link": "/guides/database/extensions/wrappers/overview" - } -] diff --git a/apps/docs/data/footer.ts b/apps/docs/data/footer.ts deleted file mode 100644 index 05004527be499..0000000000000 --- a/apps/docs/data/footer.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { IconCheckCircle, IconLifeBuoy } from '~/../../packages/ui' - -export const primaryLinks = [ - { - featherIcon: IconLifeBuoy, - text: 'Need some help?', - ctaLabel: 'Contact support', - url: 'https://supabase.com/dashboard/support/new', - }, - { - icon: 'M12.9521 10.5073C12.766 10.3212 12.5289 10.1943 12.2708 10.1427L10.6794 9.82467C9.80719 9.65024 8.90169 9.77152 8.10609 10.1693L7.89409 10.2747C7.0985 10.6725 6.193 10.7938 5.32076 10.6193L4.03343 10.362C3.81823 10.319 3.59574 10.3298 3.38571 10.3934C3.17569 10.457 2.9846 10.5715 2.82943 10.7267M5.33343 2.88867H10.6668L10.0001 3.55534V7.00334C10.0002 7.35693 10.1407 7.69602 10.3908 7.94601L13.7241 11.2793C14.5641 12.1193 13.9688 13.5553 12.7808 13.5553H3.21876C2.03076 13.5553 1.43609 12.1193 2.27609 11.2793L5.60943 7.94601C5.85949 7.69602 6.00002 7.35693 6.00009 7.00334V3.55534L5.33343 2.88867Z', - text: 'Lastest product updates?', - ctaLabel: 'See Changelog', - url: 'https://supabase.com/changelog', - }, - { - featherIcon: IconCheckCircle, - text: "Something's not right?", - ctaLabel: 'Check system status', - url: 'https://status.supabase.com/', - }, -] - -export const secondaryLinks = [ - { title: 'Contributing', url: '/handbook/contributing' }, - { - title: 'Author Styleguide', - url: 'https://github.com/supabase/supabase/blob/master/DEVELOPERS.md', - }, - { title: 'Open Source', url: 'https://supabase.com/open-source' }, - { title: 'SupaSquad', url: 'https://supabase.com/supasquad' }, -] diff --git a/apps/docs/data/github.js b/apps/docs/data/github.js deleted file mode 100644 index 624f291bde795..0000000000000 --- a/apps/docs/data/github.js +++ /dev/null @@ -1,11 +0,0 @@ -import supabase from './repos/supabase.json' -import realtime from './repos/realtime.json' -// import marketplace from './repos/marketplace.json' -import postgres from './repos/postgres.json' -import doctestJs from './repos/doctest-js.json' -import postgrestJs from './repos/postgrest-js.json' -import postgresApi from './repos/pg-api.json' - -const repos = [supabase, realtime, postgrestJs, postgres, doctestJs, postgresApi] - -export { repos, postgrestJs } diff --git a/apps/docs/data/nav/README.md b/apps/docs/data/nav/README.md deleted file mode 100644 index 452165a674071..0000000000000 --- a/apps/docs/data/nav/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# [WIP] Adding navigation for a new section - -[Note] This isn't the best way for versioning in my opinion, but this is the current way to do it while we're migrating to Next.js - -This folder holds the structure for the side navigation menu in the reference documentation pages. Each reference section (as well as their individual versions where applicable) have its own set of navigation. - -The following are relevant to adding navigation for a new section: - -- `getPageType()` from `lib/helpers` -- `menuItems` and `REFERENCES` from `components/Navigation/Navigation.constants` -- `NavMenu` from `components/Navigation/Navigation.types` - -## Adding navigation for a section that doesn't require versioning - -Example for standalone sections are the API and CLI reference pages. You'll just need to add a new file in this folder following the `NavMenu` interface (naming is arbitrary). - -Thereafter, update `getPageType` to be able to get the page type based on the URL path - preferably follow the syntax of `reference/{section_name}`. - -Finally, add the menu to `menuItems` under a new key - the key should be what you added to `getPageType` before. - -## Adding navigation for a section that requires versioning - -This is more applicable for client libraries (e.g supabase-js and supabase-dart). Versions will all sit within their own folder - if the folder doesn't exist yet, just create one. The navigation for each section will then be named as 'v1', 'v2', and so on. - -Then, update `REFERENCES` accordingly. - -Thereafter, update `getPageType` to be able to get the page type based on the URL path - preferably follow the syntax of `reference/{section_name}/{version}`. Typically the latest version available will not have the `/{version}` in it. - -Finally, add the menu to `menuItems` under a new key - the key should be what you added to `getPageType` before. diff --git a/apps/docs/data/nav/auth-server.ts b/apps/docs/data/nav/auth-server.ts deleted file mode 100644 index 8dfa1bbe11022..0000000000000 --- a/apps/docs/data/nav/auth-server.ts +++ /dev/null @@ -1,12 +0,0 @@ -const Nav = [ - { - label: 'Auth', - items: [ - { name: 'Auth Server', url: '/reference/auth', items: [] }, - { name: 'Configuration', url: '/reference/auth/config', items: [] }, - { name: 'Release Notes', url: '/reference/auth/release-notes', items: [] }, - ], - }, -] - -export default Nav diff --git a/apps/docs/data/nav/realtime-server.ts b/apps/docs/data/nav/realtime-server.ts deleted file mode 100644 index dee6ab65b28d4..0000000000000 --- a/apps/docs/data/nav/realtime-server.ts +++ /dev/null @@ -1,12 +0,0 @@ -const Nav = [ - { - label: 'Realtime', - items: [ - { name: 'Realtime Server', url: '/reference/realtime', items: [] }, - { name: 'Configuration', url: '/reference/realtime/config', items: [] }, - { name: 'Release Notes', url: '/reference/realtime/release-notes', items: [] }, - ], - }, -] - -export default Nav diff --git a/apps/docs/data/nav/storage-server.ts b/apps/docs/data/nav/storage-server.ts deleted file mode 100644 index 8bfbe9cff4606..0000000000000 --- a/apps/docs/data/nav/storage-server.ts +++ /dev/null @@ -1,13 +0,0 @@ -const Nav = [ - { - label: 'Storage', - items: [ - { name: 'Storage Server', url: '/reference/storage', items: [] }, - { name: 'Usage', url: '/reference/storage/usage', items: [] }, - { name: 'Configuration', url: '/reference/storage/config', items: [] }, - { name: 'Release Notes', url: '/reference/storage/release-notes', items: [] }, - ], - }, -] - -export default Nav diff --git a/apps/docs/data/nav/supabase-api.ts b/apps/docs/data/nav/supabase-api.ts deleted file mode 100644 index 3bb9cda0a427f..0000000000000 --- a/apps/docs/data/nav/supabase-api.ts +++ /dev/null @@ -1,12 +0,0 @@ -const Nav = [ - { - label: 'API', - items: [ - { name: 'Management API', url: '/reference/api', items: [] }, - { name: 'Usage', url: '/reference/api/usage', items: [] }, - { name: 'Release Notes', url: '/reference/api/release-notes', items: [] }, - ], - }, -] - -export default Nav diff --git a/apps/docs/data/nav/supabase-cli.ts b/apps/docs/data/nav/supabase-cli.ts deleted file mode 100644 index 9eb1a91e66cba..0000000000000 --- a/apps/docs/data/nav/supabase-cli.ts +++ /dev/null @@ -1,13 +0,0 @@ -const Nav = [ - { - label: 'CLI', - items: [ - { name: 'Supabase CLI', url: '/reference/cli', items: [] }, - { name: 'Usage', url: '/reference/cli/usage', items: [] }, - { name: 'Configuration', url: '/guides/cli/config', items: [] }, - { name: 'Release Notes', url: '/reference/cli/release-notes', items: [] }, - ], - }, -] - -export default Nav diff --git a/apps/docs/data/nav/supabase-csharp/v0.ts b/apps/docs/data/nav/supabase-csharp/v0.ts deleted file mode 100644 index bcb2833312bc2..0000000000000 --- a/apps/docs/data/nav/supabase-csharp/v0.ts +++ /dev/null @@ -1,134 +0,0 @@ -const Nav = [ - { - label: 'Getting Started', - items: [ - { name: 'Supabase C# Library', url: '/reference/csharp', items: [] }, - { name: 'Installing', url: '/reference/csharp/installing', items: [] }, - { name: 'Initializing', url: '/reference/csharp/initializing', items: [] }, - ], - }, - { - label: 'Auth', - items: [ - { name: 'signUp()', url: '/reference/csharp/auth-signup', items: [] }, - { - name: 'signInWithPassword()', - url: '/reference/csharp/auth-signinwithpassword', - items: [], - }, - { name: 'signInWithOtp()', url: '/reference/csharp/auth-signinwithotp', items: [] }, - { name: 'signInWithOAuth()', url: '/reference/csharp/auth-signinwithoauth', items: [] }, - { name: 'signOut()', url: '/reference/csharp/auth-signout', items: [] }, - { name: 'verifyOtp()', url: '/reference/csharp/auth-verifyotp', items: [] }, - { name: 'currentSession', url: '/reference/csharp/auth-currentsession', items: [] }, - { name: 'currentUser', url: '/reference/csharp/auth-currentuser', items: [] }, - { name: 'updateUser()', url: '/reference/csharp/auth-updateuser', items: [] }, - { name: 'onAuthStateChange()', url: '/reference/csharp/auth-onauthstatechange', items: [] }, - { - name: 'resetPasswordForEmail()', - url: '/reference/csharp/auth-resetpasswordforemail', - items: [], - }, - ], - }, - { - label: 'Functions', - items: [{ name: 'invoke()', url: '/reference/csharp/invoke', items: [] }], - }, - { - label: 'Database', - items: [ - { name: 'Fetch data: select()', url: '/reference/csharp/select', items: [] }, - { name: 'Create data: insert()', url: '/reference/csharp/insert', items: [] }, - { name: 'Modify data: update()', url: '/reference/csharp/update', items: [] }, - { name: 'Upsert data: upsert()', url: '/reference/csharp/upsert', items: [] }, - { name: 'Delete data: delete()', url: '/reference/csharp/delete', items: [] }, - { name: 'Stored Procedures: rpc()', url: '/reference/csharp/rpc', items: [] }, - { - name: 'Filters', - url: undefined, - items: [ - { name: 'Using Filters', url: '/reference/csharp/using-filters', items: [] }, - { name: 'eq()', url: '/reference/csharp/eq', items: [] }, - { name: 'neq()', url: '/reference/csharp/neq', items: [] }, - { name: 'gt()', url: '/reference/csharp/gt', items: [] }, - { name: 'gte()', url: '/reference/csharp/gte', items: [] }, - { name: 'lt()', url: '/reference/csharp/lt', items: [] }, - { name: 'lte()', url: '/reference/csharp/lte', items: [] }, - { name: 'like()', url: '/reference/csharp/like', items: [] }, - { name: 'ilike()', url: '/reference/csharp/ilike', items: [] }, - { name: 'is_()', url: '/reference/csharp/is_', items: [] }, - { name: 'in_()', url: '/reference/csharp/in_', items: [] }, - { name: 'contains()', url: '/reference/csharp/contains', items: [] }, - { name: 'containedBy()', url: '/reference/csharp/containedby', items: [] }, - { name: 'rangeGt()', url: '/reference/csharp/rangegt', items: [] }, - { name: 'rangeGte()', url: '/reference/csharp/rangegte', items: [] }, - { name: 'rangeLt()', url: '/reference/csharp/rangelt', items: [] }, - { name: 'rangeLte()', url: '/reference/csharp/rangelte', items: [] }, - { name: 'rangeAdjacent()', url: '/reference/csharp/rangeadjacent', items: [] }, - { name: 'overlaps()', url: '/reference/csharp/overlaps', items: [] }, - { name: 'textSearch()', url: '/reference/csharp/textsearch', items: [] }, - { name: 'match()', url: '/reference/csharp/match', items: [] }, - { name: 'not()', url: '/reference/csharp/not', items: [] }, - { name: 'or()', url: '/reference/csharp/or', items: [] }, - { name: 'filter()', url: '/reference/csharp/filter', items: [] }, - ], - }, - { - name: 'Modifiers', - url: undefined, - items: [ - { name: 'Using Modifiers', url: '/reference/csharp/using-modifiers', items: [] }, - { name: 'order()', url: '/reference/csharp/order', items: [] }, - { name: 'limit()', url: '/reference/csharp/limit', items: [] }, - { name: 'range()', url: '/reference/csharp/range', items: [] }, - { name: 'single()', url: '/reference/csharp/single', items: [] }, - ], - }, - ], - }, - { - label: 'Realtime', - items: [ - { name: 'stream()', url: '/reference/csharp/stream', items: [] }, - { name: 'on().subscribe()', url: '/reference/csharp/subscribe', items: [] }, - { name: 'removeChannel()', url: '/reference/csharp/removechannel', items: [] }, - { name: 'removeAllChannels()', url: '/reference/csharp/removeallchannels', items: [] }, - { name: 'getChannels()', url: '/reference/csharp/getchannels', items: [] }, - ], - }, - { - label: 'Storage', - items: [ - { name: 'createBucket()', url: '/reference/csharp/storage-createbucket', items: [] }, - { name: 'getBucket()', url: '/reference/csharp/storage-getbucket', items: [] }, - { name: 'listBuckets()', url: '/reference/csharp/storage-listbuckets', items: [] }, - { name: 'updateBucket()', url: '/reference/csharp/storage-updatebucket', items: [] }, - { name: 'deleteBucket()', url: '/reference/csharp/storage-deletebucket', items: [] }, - { name: 'emptyBucket()', url: '/reference/csharp/storage-emptybucket', items: [] }, - { name: 'from.upload()', url: '/reference/csharp/storage-from-upload', items: [] }, - { name: 'from.download()', url: '/reference/csharp/storage-from-download', items: [] }, - { name: 'from.list()', url: '/reference/csharp/storage-from-list', items: [] }, - { name: 'from.update()', url: '/reference/csharp/storage-from-update', items: [] }, - { name: 'from.move()', url: '/reference/csharp/storage-from-move', items: [] }, - { name: 'from.remove()', url: '/reference/csharp/storage-from-remove', items: [] }, - { - name: 'from.createSignedUrl()', - url: '/reference/csharp/storage-from-createsignedurl', - items: [], - }, - { - name: 'from.createSignedUrls()', - url: '/reference/csharp/storage-from-createsignedurls', - items: [], - }, - { - name: 'from.getPublicUrl()', - url: '/reference/csharp/storage-from-getpublicurl', - items: [], - }, - ], - }, -] - -export default Nav diff --git a/apps/docs/data/nav/supabase-dart/v0.ts b/apps/docs/data/nav/supabase-dart/v0.ts deleted file mode 100644 index 0835a840306d7..0000000000000 --- a/apps/docs/data/nav/supabase-dart/v0.ts +++ /dev/null @@ -1,132 +0,0 @@ -const Nav = [ - { - label: 'Getting Started', - items: [ - { name: 'Supabase Dart Library', url: '/reference/dart/v0', items: [] }, - { name: 'Installing', url: '/reference/dart/v0/installing', items: [] }, - { name: 'Initializing', url: '/reference/dart/v0/initializing', items: [] }, - ], - }, - { - label: 'Auth', - items: [ - { name: 'signUp()', url: '/reference/dart/v0/auth-signup', items: [] }, - { name: 'signIn()', url: '/reference/dart/v0/auth-signin', items: [] }, - { - name: 'signInWithProvider()', - url: '/reference/dart/v0/auth-signinwithprovider', - items: [], - }, - { name: 'signOut()', url: '/reference/dart/v0/auth-signout', items: [] }, - { name: 'session()', url: '/reference/dart/v0/auth-session', items: [] }, - { name: 'user()', url: '/reference/dart/v0/auth-user', items: [] }, - { name: 'update()', url: '/reference/dart/v0/auth-update', items: [] }, - { - name: 'onAuthStateChange()', - url: '/reference/dart/v0/auth-onauthstatechanged', - items: [], - }, - { - name: 'Reset Password (Email)', - url: '/reference/dart/v0/reset-password-email', - items: [], - }, - ], - }, - { - label: 'Functions', - items: [{ name: 'invoke()', url: '/reference/dart/v0/invoke', items: [] }], - }, - { - label: 'Database', - items: [ - { name: 'Fetch data: select()', url: '/reference/dart/v0/select', items: [] }, - { name: 'Create data: insert()', url: '/reference/dart/v0/insert', items: [] }, - { name: 'Modify data: update()', url: '/reference/dart/v0/update', items: [] }, - { name: 'Upsert data: upsert()', url: '/reference/dart/v0/upsert', items: [] }, - { name: 'Delete data: delete()', url: '/reference/dart/v0/delete', items: [] }, - { name: 'Stored Procedures: rpc()', url: '/reference/dart/v0/rpc', items: [] }, - ], - }, - { - label: 'Realtime', - items: [ - { name: 'stream', url: '/reference/dart/v0/stream', items: [] }, - { name: 'on().subscribe()', url: '/reference/dart/v0/subscribe', items: [] }, - { - name: 'removeSubscription()', - url: '/reference/dart/v0/removesubscription', - items: [], - }, - { name: 'getSubscriptions()', url: '/reference/dart/v0/getsubscriptions', items: [] }, - ], - }, - { - label: 'Storage', - items: [ - { name: 'createBucket()', url: '/reference/dart/v0/storage-createbucket', items: [] }, - { name: 'getBucket()', url: '/reference/dart/v0/storage-getbucket', items: [] }, - { name: 'listBuckets()', url: '/reference/dart/v0/storage-listbuckets', items: [] }, - { name: 'updateBucket()', url: '/reference/dart/v0/storage-updatebucket', items: [] }, - { name: 'deleteBucket()', url: '/reference/dart/v0/storage-deletebucket', items: [] }, - { name: 'emptyBucket()', url: '/reference/dart/v0/storage-emptybucket', items: [] }, - { name: 'from.upload()', url: '/reference/dart/v0/storage-from-upload', items: [] }, - { name: 'from.download()', url: '/reference/dart/v0/storage-from-download', items: [] }, - { name: 'from.list()', url: '/reference/dart/v0/storage-from-list', items: [] }, - { name: 'from.update()', url: '/reference/dart/v0/storage-from-update', items: [] }, - { name: 'from.move()', url: '/reference/dart/v0/storage-from-move', items: [] }, - { name: 'from.remove()', url: '/reference/dart/v0/storage-from-remove', items: [] }, - { - name: 'from.createSignedUrl()', - url: '/reference/dart/v0/storage-from-createsignedurl', - items: [], - }, - { - name: 'from.getPublicUrl()', - url: '/reference/dart/v0/storage-from-getpublicurl', - items: [], - }, - ], - }, - { - label: 'Filters', - items: [ - { name: 'Using Filters', url: '/reference/dart/v0/using-filters', items: [] }, - { name: 'eq()', url: '/reference/dart/v0/eq', items: [] }, - { name: 'neq()', url: '/reference/dart/v0/neq', items: [] }, - { name: 'gt()', url: '/reference/dart/v0/gt', items: [] }, - { name: 'gte()', url: '/reference/dart/v0/gte', items: [] }, - { name: 'lt()', url: '/reference/dart/v0/lt', items: [] }, - { name: 'lte()', url: '/reference/dart/v0/lte', items: [] }, - { name: 'like()', url: '/reference/dart/v0/like', items: [] }, - { name: 'ilike()', url: '/reference/dart/v0/ilike', items: [] }, - { name: 'is_()', url: '/reference/dart/v0/is_', items: [] }, - { name: 'in_()', url: '/reference/dart/v0/in_', items: [] }, - { name: 'contains()', url: '/reference/dart/v0/contains', items: [] }, - { name: 'containedBy()', url: '/reference/dart/v0/containedby', items: [] }, - { name: 'rangeGt()', url: '/reference/dart/v0/rangegt', items: [] }, - { name: 'rangeGte()', url: '/reference/dart/v0/rangegte', items: [] }, - { name: 'rangeLt()', url: '/reference/dart/v0/rangelt', items: [] }, - { name: 'rangeLte()', url: '/reference/dart/v0/rangelte', items: [] }, - { name: 'rangeAdjacent()', url: '/reference/dart/v0/rangeadjacent', items: [] }, - { name: 'overlaps()', url: '/reference/dart/v0/overlaps', items: [] }, - { name: 'textSearch()', url: '/reference/dart/v0/textsearch', items: [] }, - { name: 'match()', url: '/reference/dart/v0/match', items: [] }, - { name: 'not()', url: '/reference/dart/v0/not', items: [] }, - { name: 'or()', url: '/reference/dart/v0/or', items: [] }, - { name: 'filter()', url: '/reference/dart/v0/filter', items: [] }, - ], - }, - { - label: 'Modifiers', - items: [ - { name: 'Using Modifiers', url: '/reference/dart/v0/using-modifiers', items: [] }, - { name: 'order()', url: '/reference/dart/v0/order', items: [] }, - { name: 'limit()', url: '/reference/dart/v0/limit', items: [] }, - { name: 'range()', url: '/reference/dart/v0/range', items: [] }, - { name: 'single()', url: '/reference/dart/v0/single', items: [] }, - ], - }, -] - -export default Nav diff --git a/apps/docs/data/nav/supabase-dart/v1.ts b/apps/docs/data/nav/supabase-dart/v1.ts deleted file mode 100644 index 8fe2fad479188..0000000000000 --- a/apps/docs/data/nav/supabase-dart/v1.ts +++ /dev/null @@ -1,135 +0,0 @@ -const Nav = [ - { - label: 'Getting Started', - items: [ - { name: 'Supabase Flutter Library', url: '/reference/dart', items: [] }, - { name: 'Installing', url: '/reference/dart/installing', items: [] }, - { name: 'Initializing', url: '/reference/dart/initializing', items: [] }, - { name: 'Upgrading to supabase-flutter v1', url: '/reference/dart/upgrade-guide', items: [] }, - ], - }, - { - label: 'Auth', - items: [ - { name: 'signUp()', url: '/reference/dart/auth-signup', items: [] }, - { - name: 'signInWithPassword()', - url: '/reference/dart/auth-signinwithpassword', - items: [], - }, - { name: 'signInWithOtp()', url: '/reference/dart/auth-signinwithotp', items: [] }, - { name: 'signInWithOAuth()', url: '/reference/dart/auth-signinwithoauth', items: [] }, - { name: 'signOut()', url: '/reference/dart/auth-signout', items: [] }, - { name: 'verifyOtp()', url: '/reference/dart/auth-verifyotp', items: [] }, - { name: 'currentSession', url: '/reference/dart/auth-currentsession', items: [] }, - { name: 'currentUser', url: '/reference/dart/auth-currentuser', items: [] }, - { name: 'updateUser()', url: '/reference/dart/auth-updateuser', items: [] }, - { name: 'onAuthStateChange()', url: '/reference/dart/auth-onauthstatechange', items: [] }, - { - name: 'resetPasswordForEmail()', - url: '/reference/dart/auth-resetpasswordforemail', - items: [], - }, - ], - }, - { - label: 'Functions', - items: [{ name: 'invoke()', url: '/reference/dart/invoke', items: [] }], - }, - { - label: 'Database', - items: [ - { name: 'Fetch data: select()', url: '/reference/dart/select', items: [] }, - { name: 'Create data: insert()', url: '/reference/dart/insert', items: [] }, - { name: 'Modify data: update()', url: '/reference/dart/update', items: [] }, - { name: 'Upsert data: upsert()', url: '/reference/dart/upsert', items: [] }, - { name: 'Delete data: delete()', url: '/reference/dart/delete', items: [] }, - { name: 'Stored Procedures: rpc()', url: '/reference/dart/rpc', items: [] }, - { - name: 'Filters', - url: undefined, - items: [ - { name: 'Using Filters', url: '/reference/dart/using-filters', items: [] }, - { name: 'eq()', url: '/reference/dart/eq', items: [] }, - { name: 'neq()', url: '/reference/dart/neq', items: [] }, - { name: 'gt()', url: '/reference/dart/gt', items: [] }, - { name: 'gte()', url: '/reference/dart/gte', items: [] }, - { name: 'lt()', url: '/reference/dart/lt', items: [] }, - { name: 'lte()', url: '/reference/dart/lte', items: [] }, - { name: 'like()', url: '/reference/dart/like', items: [] }, - { name: 'ilike()', url: '/reference/dart/ilike', items: [] }, - { name: 'is_()', url: '/reference/dart/is_', items: [] }, - { name: 'in_()', url: '/reference/dart/in_', items: [] }, - { name: 'contains()', url: '/reference/dart/contains', items: [] }, - { name: 'containedBy()', url: '/reference/dart/containedby', items: [] }, - { name: 'rangeGt()', url: '/reference/dart/rangegt', items: [] }, - { name: 'rangeGte()', url: '/reference/dart/rangegte', items: [] }, - { name: 'rangeLt()', url: '/reference/dart/rangelt', items: [] }, - { name: 'rangeLte()', url: '/reference/dart/rangelte', items: [] }, - { name: 'rangeAdjacent()', url: '/reference/dart/rangeadjacent', items: [] }, - { name: 'overlaps()', url: '/reference/dart/overlaps', items: [] }, - { name: 'textSearch()', url: '/reference/dart/textsearch', items: [] }, - { name: 'match()', url: '/reference/dart/match', items: [] }, - { name: 'not()', url: '/reference/dart/not', items: [] }, - { name: 'or()', url: '/reference/dart/or', items: [] }, - { name: 'filter()', url: '/reference/dart/filter', items: [] }, - ], - }, - { - name: 'Modifiers', - url: undefined, - items: [ - { name: 'Using Modifiers', url: '/reference/dart/using-modifiers', items: [] }, - { name: 'order()', url: '/reference/dart/order', items: [] }, - { name: 'limit()', url: '/reference/dart/limit', items: [] }, - { name: 'range()', url: '/reference/dart/range', items: [] }, - { name: 'single()', url: '/reference/dart/single', items: [] }, - ], - }, - ], - }, - { - label: 'Realtime', - items: [ - { name: 'stream()', url: '/reference/dart/stream', items: [] }, - { name: 'on().subscribe()', url: '/reference/dart/subscribe', items: [] }, - { name: 'removeChannel()', url: '/reference/dart/removechannel', items: [] }, - { name: 'removeAllChannels()', url: '/reference/dart/removeallchannels', items: [] }, - { name: 'getChannels()', url: '/reference/dart/getchannels', items: [] }, - ], - }, - { - label: 'Storage', - items: [ - { name: 'createBucket()', url: '/reference/dart/storage-createbucket', items: [] }, - { name: 'getBucket()', url: '/reference/dart/storage-getbucket', items: [] }, - { name: 'listBuckets()', url: '/reference/dart/storage-listbuckets', items: [] }, - { name: 'updateBucket()', url: '/reference/dart/storage-updatebucket', items: [] }, - { name: 'deleteBucket()', url: '/reference/dart/storage-deletebucket', items: [] }, - { name: 'emptyBucket()', url: '/reference/dart/storage-emptybucket', items: [] }, - { name: 'from.upload()', url: '/reference/dart/storage-from-upload', items: [] }, - { name: 'from.download()', url: '/reference/dart/storage-from-download', items: [] }, - { name: 'from.list()', url: '/reference/dart/storage-from-list', items: [] }, - { name: 'from.update()', url: '/reference/dart/storage-from-update', items: [] }, - { name: 'from.move()', url: '/reference/dart/storage-from-move', items: [] }, - { name: 'from.remove()', url: '/reference/dart/storage-from-remove', items: [] }, - { - name: 'from.createSignedUrl()', - url: '/reference/dart/storage-from-createsignedurl', - items: [], - }, - { - name: 'from.createSignedUrls()', - url: '/reference/dart/storage-from-createsignedurls', - items: [], - }, - { - name: 'from.getPublicUrl()', - url: '/reference/dart/storage-from-getpublicurl', - items: [], - }, - ], - }, -] - -export default Nav diff --git a/apps/docs/data/nav/supabase-js/v1.ts b/apps/docs/data/nav/supabase-js/v1.ts deleted file mode 100644 index ef9f20e81502f..0000000000000 --- a/apps/docs/data/nav/supabase-js/v1.ts +++ /dev/null @@ -1,169 +0,0 @@ -const Nav = [ - { - label: 'Getting Started', - items: [ - { name: 'Supabase JavaScript Library', url: '/reference/javascript/v1', items: [] }, - { name: 'Installing', url: '/reference/javascript/v1/installing', items: [] }, - { name: 'Initializing', url: '/reference/javascript/v1/initializing', items: [] }, - { name: 'Generating Types', url: '/reference/javascript/v1/generating-types', items: [] }, - ], - }, - { - label: 'Auth', - items: [ - { name: 'signUp()', url: '/reference/javascript/v1/auth-signup', items: [] }, - { name: 'signIn()', url: '/reference/javascript/v1/auth-signin', items: [] }, - { name: 'signOut()', url: '/reference/javascript/v1/auth-signout', items: [] }, - { name: 'session()', url: '/reference/javascript/v1/auth-session', items: [] }, - { name: 'user()', url: '/reference/javascript/v1/auth-user', items: [] }, - { name: 'update()', url: '/reference/javascript/v1/auth-update', items: [] }, - { name: 'setAuth()', url: '/reference/javascript/v1/auth-setauth', items: [] }, - { - name: 'onAuthStateChange()', - url: '/reference/javascript/v1/auth-onauthstatechanged', - items: [], - }, - { name: 'getUser()', url: '/reference/javascript/v1/auth-api-getuser', items: [] }, - { - name: 'resetPasswordForEmail()', - url: '/reference/javascript/v1/auth-api-resetpasswordforemail', - items: [], - }, - ], - }, - { - label: 'Auth (Server Only)', - items: [ - { name: 'listUsers()', url: '/reference/javascript/v1/auth-api-listusers', items: [] }, - { name: 'createUser()', url: '/reference/javascript/v1/auth-api-createuser', items: [] }, - { name: 'deleteUser()', url: '/reference/javascript/v1/auth-api-deleteuser', items: [] }, - { - name: 'generateLink()', - url: '/reference/javascript/v1/auth-api-generatelink', - items: [], - }, - { - name: 'inviteUserByEmail()', - url: '/reference/javascript/v1/auth-api-inviteuserbyemail', - items: [], - }, - { - name: 'sendMobileOTP()', - url: '/reference/javascript/v1/auth-api-sendmobileotp', - items: [], - }, - { - name: 'updateUserById()', - url: '/reference/javascript/v1/auth-api-updateuserbyid', - items: [], - }, - ], - }, - { - label: 'Functions', - items: [{ name: 'invoke()', url: '/reference/javascript/v1/invoke', items: [] }], - }, - { - label: 'Database', - items: [ - { name: 'Fetch data: select()', url: '/reference/javascript/v1/select', items: [] }, - { name: 'Create data: insert()', url: '/reference/javascript/v1/insert', items: [] }, - { name: 'Modify data: update()', url: '/reference/javascript/v1/update', items: [] }, - { name: 'Upsert data: upsert()', url: '/reference/javascript/v1/upsert', items: [] }, - { name: 'Delete data: delete()', url: '/reference/javascript/v1/delete', items: [] }, - { name: 'Postgres functions: rpc()', url: '/reference/javascript/v1/rpc', items: [] }, - ], - }, - { - label: 'Realtime', - items: [ - { name: 'on().subscribe()', url: '/reference/javascript/v1/subscribe', items: [] }, - { - name: 'removeSubscription()', - url: '/reference/javascript/v1/removesubscription', - items: [], - }, - { - name: 'removeAllSubscriptions()', - url: '/reference/javascript/v1/removeallsubscriptions', - items: [], - }, - { name: 'getSubscriptions()', url: '/reference/javascript/v1/getsubscriptions', items: [] }, - ], - }, - { - label: 'Storage', - items: [ - { name: 'createBucket()', url: '/reference/javascript/v1/storage-createbucket', items: [] }, - { name: 'getBucket()', url: '/reference/javascript/v1/storage-getbucket', items: [] }, - { name: 'listBuckets()', url: '/reference/javascript/v1/storage-listbuckets', items: [] }, - { name: 'updateBucket()', url: '/reference/javascript/v1/storage-updatebucket', items: [] }, - { name: 'deleteBucket()', url: '/reference/javascript/v1/storage-deletebucket', items: [] }, - { name: 'emptyBucket()', url: '/reference/javascript/v1/storage-emptybucket', items: [] }, - { name: 'from.upload()', url: '/reference/javascript/v1/storage-from-upload', items: [] }, - { name: 'from.download()', url: '/reference/javascript/v1/storage-from-download', items: [] }, - { name: 'from.list()', url: '/reference/javascript/v1/storage-from-list', items: [] }, - { name: 'from.update()', url: '/reference/javascript/v1/storage-from-update', items: [] }, - { name: 'from.move()', url: '/reference/javascript/v1/storage-from-move', items: [] }, - { name: 'from.copy()', url: '/reference/javascript/v1/storage-from-copy', items: [] }, - { name: 'from.remove()', url: '/reference/javascript/v1/storage-from-remove', items: [] }, - { - name: 'from.createSignedUrl()', - url: '/reference/javascript/v1/storage-from-createsignedurl', - items: [], - }, - { - name: 'from.createSignedUrls()', - url: '/reference/javascript/v1/storage-from-createsignedurls', - items: [], - }, - { - name: 'from.getPublicUrl()', - url: '/reference/javascript/v1/storage-from-getpublicurl', - items: [], - }, - ], - }, - { - label: 'Filters', - items: [ - { name: 'Using Filters', url: '/reference/javascript/v1/using-filters', items: [] }, - { name: 'eq()', url: '/reference/javascript/v1/eq', items: [] }, - { name: 'neq()', url: '/reference/javascript/v1/neq', items: [] }, - { name: 'gt()', url: '/reference/javascript/v1/gt', items: [] }, - { name: 'gte()', url: '/reference/javascript/v1/gte', items: [] }, - { name: 'lt()', url: '/reference/javascript/v1/lt', items: [] }, - { name: 'lte()', url: '/reference/javascript/v1/lte', items: [] }, - { name: 'like()', url: '/reference/javascript/v1/like', items: [] }, - { name: 'ilike()', url: '/reference/javascript/v1/ilike', items: [] }, - { name: 'is()', url: '/reference/javascript/v1/is', items: [] }, - { name: 'in()', url: '/reference/javascript/v1/in', items: [] }, - { name: 'contains()', url: '/reference/javascript/v1/contains', items: [] }, - { name: 'containedBy()', url: '/reference/javascript/v1/containedby', items: [] }, - { name: 'rangeGt()', url: '/reference/javascript/v1/rangegt', items: [] }, - { name: 'rangeGte()', url: '/reference/javascript/v1/rangegte', items: [] }, - { name: 'rangeLt()', url: '/reference/javascript/v1/rangelt', items: [] }, - { name: 'rangeLte()', url: '/reference/javascript/v1/rangelte', items: [] }, - { name: 'rangeAdjacent()', url: '/reference/javascript/v1/rangeadjacent', items: [] }, - { name: 'overlaps()', url: '/reference/javascript/v1/overlaps', items: [] }, - { name: 'textSearch()', url: '/reference/javascript/v1/textsearch', items: [] }, - { name: 'match()', url: '/reference/javascript/v1/match', items: [] }, - { name: 'not()', url: '/reference/javascript/v1/not', items: [] }, - { name: 'or()', url: '/reference/javascript/v1/or', items: [] }, - { name: 'filter()', url: '/reference/javascript/v1/filter', items: [] }, - ], - }, - { - label: 'Modifiers', - items: [ - { name: 'Using Modifiers', url: '/reference/javascript/v1/using-modifiers', items: [] }, - { name: 'order()', url: '/reference/javascript/v1/order', items: [] }, - { name: 'limit()', url: '/reference/javascript/v1/limit', items: [] }, - { name: 'range()', url: '/reference/javascript/v1/range', items: [] }, - { name: 'single()', url: '/reference/javascript/v1/single', items: [] }, - { name: 'maybeSingle()', url: '/reference/javascript/v1/maybesingle', items: [] }, - ], - }, -] - -export default Nav diff --git a/apps/docs/data/nav/supabase-js/v2.ts b/apps/docs/data/nav/supabase-js/v2.ts deleted file mode 100644 index f71236ae3aaae..0000000000000 --- a/apps/docs/data/nav/supabase-js/v2.ts +++ /dev/null @@ -1,177 +0,0 @@ -const Nav = [ - { - label: 'Getting Started', - items: [ - { name: 'Supabase JavaScript Library', url: '/reference/javascript', items: [] }, - { name: 'Installing', url: '/reference/javascript/installing', items: [] }, - { name: 'Initializing', url: '/reference/javascript/initializing', items: [] }, - { name: 'Typescript Support', url: '/reference/javascript/typescript-support', items: [] }, - { name: 'Release Notes', url: '/reference/javascript/release-notes', items: [] }, - { - name: 'Upgrading to supabase-js v2', - url: '/reference/javascript/upgrade-guide', - items: [], - }, - ], - }, - { - label: 'Auth', - items: [ - { name: 'signUp()', url: '/reference/javascript/auth-signup', items: [] }, - { - name: 'signInWithPassword()', - url: '/reference/javascript/auth-signinwithpassword', - items: [], - }, - { name: 'signInWithOtp()', url: '/reference/javascript/auth-signinwithotp', items: [] }, - { name: 'signInWithOAuth()', url: '/reference/javascript/auth-signinwithoauth', items: [] }, - { name: 'signOut()', url: '/reference/javascript/auth-signout', items: [] }, - { name: 'verifyOtp()', url: '/reference/javascript/auth-verifyotp', items: [] }, - { name: 'getSession()', url: '/reference/javascript/auth-getsession', items: [] }, - { name: 'refreshSession()', url: '/reference/javascript/auth-refreshsession', items: [] }, - { name: 'getUser()', url: '/reference/javascript/auth-getuser', items: [] }, - { name: 'updateUser()', url: '/reference/javascript/auth-updateuser', items: [] }, - { name: 'setSession()', url: '/reference/javascript/auth-setsession', items: [] }, - { - name: 'onAuthStateChange()', - url: '/reference/javascript/auth-onauthstatechange', - items: [], - }, - { - name: 'resetPasswordForEmail()', - url: '/reference/javascript/auth-resetpasswordforemail', - items: [], - }, - ], - }, - { - label: 'Auth (Server Only)', - items: [ - { name: 'Overview', url: '/reference/javascript/supabase-auth-admin-api', items: [] }, - { name: 'listUsers()', url: '/reference/javascript/auth-admin-listusers', items: [] }, - { name: 'createUser()', url: '/reference/javascript/auth-admin-createuser', items: [] }, - { name: 'deleteUser()', url: '/reference/javascript/auth-admin-deleteuser', items: [] }, - { name: 'generateLink()', url: '/reference/javascript/auth-admin-generatelink', items: [] }, - { - name: 'inviteUserByEmail()', - url: '/reference/javascript/auth-admin-inviteuserbyemail', - items: [], - }, - { name: 'getUserById()', url: '/reference/javascript/auth-admin-getuserbyid', items: [] }, - { - name: 'updateUserById()', - url: '/reference/javascript/auth-admin-updateuserbyid', - items: [], - }, - ], - }, - { - label: 'Database', - items: [ - { name: 'Fetch data: select()', url: '/reference/javascript/select', items: [] }, - { name: 'Create data: insert()', url: '/reference/javascript/insert', items: [] }, - { name: 'Modify data: update()', url: '/reference/javascript/update', items: [] }, - { name: 'Upsert data: upsert()', url: '/reference/javascript/upsert', items: [] }, - { name: 'Delete data: delete()', url: '/reference/javascript/delete', items: [] }, - { name: 'Postgres functions: rpc()', url: '/reference/javascript/rpc', items: [] }, - { - name: 'Filters', - url: undefined, - items: [ - { name: 'Using Filters', url: '/reference/javascript/using-filters', items: [] }, - { name: 'eq()', url: '/reference/javascript/eq', items: [] }, - { name: 'neq()', url: '/reference/javascript/neq', items: [] }, - { name: 'gt()', url: '/reference/javascript/gt', items: [] }, - { name: 'gte()', url: '/reference/javascript/gte', items: [] }, - { name: 'lt()', url: '/reference/javascript/lt', items: [] }, - { name: 'lte()', url: '/reference/javascript/lte', items: [] }, - { name: 'like()', url: '/reference/javascript/like', items: [] }, - { name: 'ilike()', url: '/reference/javascript/ilike', items: [] }, - { name: 'is()', url: '/reference/javascript/is', items: [] }, - { name: 'in()', url: '/reference/javascript/in', items: [] }, - { name: 'contains()', url: '/reference/javascript/contains', items: [] }, - { name: 'containedBy()', url: '/reference/javascript/containedby', items: [] }, - { name: 'rangeGt()', url: '/reference/javascript/rangegt', items: [] }, - { name: 'rangeGte()', url: '/reference/javascript/rangegte', items: [] }, - { name: 'rangeLt()', url: '/reference/javascript/rangelt', items: [] }, - { name: 'rangeLte()', url: '/reference/javascript/rangelte', items: [] }, - { name: 'rangeAdjacent()', url: '/reference/javascript/rangeadjacent', items: [] }, - { name: 'overlaps()', url: '/reference/javascript/overlaps', items: [] }, - { name: 'textSearch()', url: '/reference/javascript/textsearch', items: [] }, - { name: 'match()', url: '/reference/javascript/match', items: [] }, - { name: 'not()', url: '/reference/javascript/not', items: [] }, - { name: 'or()', url: '/reference/javascript/or', items: [] }, - { name: 'filter()', url: '/reference/javascript/filter', items: [] }, - ], - }, - { - name: 'Modifiers', - url: undefined, - items: [ - { name: 'Using Modifiers', url: '/reference/javascript/using-modifiers', items: [] }, - { name: 'select()', url: '/reference/javascript/db-modifiers-select', items: [] }, - { name: 'order()', url: '/reference/javascript/order', items: [] }, - { name: 'limit()', url: '/reference/javascript/limit', items: [] }, - { name: 'range()', url: '/reference/javascript/range', items: [] }, - { name: 'abortSignal()', url: '/reference/javascript/db-abortsignal', items: [] }, - { name: 'single()', url: '/reference/javascript/single', items: [] }, - { name: 'maybeSingle()', url: '/reference/javascript/maybesingle', items: [] }, - { name: 'csv()', url: '/reference/javascript/db-csv', items: [] }, - ], - }, - ], - }, - { - label: 'Functions', - items: [{ name: 'invoke()', url: '/reference/javascript/invoke', items: [] }], - }, - { - label: 'Realtime', - items: [ - { name: 'on().subscribe()', url: '/reference/javascript/subscribe', items: [] }, - { name: 'removeChannel()', url: '/reference/javascript/removechannel', items: [] }, - { name: 'removeAllChannels()', url: '/reference/javascript/removeallchannels', items: [] }, - { name: 'getChannels()', url: '/reference/javascript/getchannels', items: [] }, - ], - }, - { - label: 'Storage', - items: [ - { name: 'createBucket()', url: '/reference/javascript/storage-createbucket', items: [] }, - { name: 'getBucket()', url: '/reference/javascript/storage-getbucket', items: [] }, - { name: 'listBuckets()', url: '/reference/javascript/storage-listbuckets', items: [] }, - { name: 'updateBucket()', url: '/reference/javascript/storage-updatebucket', items: [] }, - { name: 'deleteBucket()', url: '/reference/javascript/storage-deletebucket', items: [] }, - { name: 'emptyBucket()', url: '/reference/javascript/storage-emptybucket', items: [] }, - { name: 'from.upload()', url: '/reference/javascript/storage-from-upload', items: [] }, - { name: 'from.download()', url: '/reference/javascript/storage-from-download', items: [] }, - { name: 'from.list()', url: '/reference/javascript/storage-from-list', items: [] }, - { name: 'from.update()', url: '/reference/javascript/storage-from-update', items: [] }, - { name: 'from.move()', url: '/reference/javascript/storage-from-move', items: [] }, - { name: 'from.copy()', url: '/reference/javascript/storage-from-copy', items: [] }, - { name: 'from.remove()', url: '/reference/javascript/storage-from-remove', items: [] }, - { - name: 'from.createSignedUrl()', - url: '/reference/javascript/storage-from-createsignedurl', - items: [], - }, - { - name: 'from.createSignedUrls()', - url: '/reference/javascript/storage-from-createsignedurls', - items: [], - }, - { - name: 'from.createSignedUploadUrl()', - url: '/reference/javascript/storage-from-createsigneduploadurl', - items: [], - }, - { - name: 'from.getPublicUrl()', - url: '/reference/javascript/storage-from-getpublicurl', - items: [], - }, - ], - }, -] - -export default Nav diff --git a/apps/docs/data/nonGeneratedReferencePages.ts b/apps/docs/data/nonGeneratedReferencePages.ts deleted file mode 100644 index e2d578ce2de02..0000000000000 --- a/apps/docs/data/nonGeneratedReferencePages.ts +++ /dev/null @@ -1,33 +0,0 @@ -const nonGeneratedReferencePages = [ - 'docs/reference/javascript', - 'docs/reference/javascript/installing', - 'docs/reference/javascript/release-notes', - 'docs/reference/javascript/v1/upgrade-guide', - 'docs/reference/javascript/typescript-support', - 'docs/reference/javascript/v1', - 'docs/reference/javascript/v1/installing', - 'docs/reference/javascript/v1/initializing', - 'docs/reference/javascript/v1/generating-types', - 'docs/reference/dart', - 'docs/reference/dart/installing', - 'docs/reference/dart/initializing', - 'docs/reference/dart/v0/upgrade-guide', - 'docs/reference/dart/v0', - 'docs/reference/csharp', - 'docs/reference/csharp/installing', - 'docs/reference/csharp/initializing', - 'docs/reference/kotlin/installing', - 'docs/reference/kotlin/initializing', - 'docs/reference/api', - 'docs/reference/api/release-notes', - 'docs/reference/cli', - 'docs/reference/cli/release-notes', - 'docs/reference/auth', - 'docs/reference/auth/release-notes', - 'docs/reference/storage', - 'docs/reference/storage/release-notes', - 'docs/reference/realtime', - 'docs/reference/realtime/release-notes', -] - -export default nonGeneratedReferencePages diff --git a/apps/docs/data/repos/.github.json b/apps/docs/data/repos/.github.json deleted file mode 100644 index 6330c128238b5..0000000000000 --- a/apps/docs/data/repos/.github.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "id": 288653469, - "node_id": "MDEwOlJlcG9zaXRvcnkyODg2NTM0Njk=", - "name": ".github", - "full_name": "supabase/.github", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/.github", - "description": "Org-wide default community health files & templates.", - "fork": false, - "url": "https://api.github.com/repos/supabase/.github", - "forks_url": "https://api.github.com/repos/supabase/.github/forks", - "keys_url": "https://api.github.com/repos/supabase/.github/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/.github/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/.github/teams", - "hooks_url": "https://api.github.com/repos/supabase/.github/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/.github/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/.github/events", - "assignees_url": "https://api.github.com/repos/supabase/.github/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/.github/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/.github/tags", - "blobs_url": "https://api.github.com/repos/supabase/.github/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/.github/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/.github/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/.github/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/.github/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/.github/languages", - "stargazers_url": "https://api.github.com/repos/supabase/.github/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/.github/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/.github/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/.github/subscription", - "commits_url": "https://api.github.com/repos/supabase/.github/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/.github/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/.github/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/.github/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/.github/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/.github/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/.github/merges", - "archive_url": "https://api.github.com/repos/supabase/.github/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/.github/downloads", - "issues_url": "https://api.github.com/repos/supabase/.github/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/.github/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/.github/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/.github/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/.github/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/.github/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/.github/deployments", - "created_at": "2020-08-19T06:35:23Z", - "updated_at": "2020-12-04T06:26:42Z", - "pushed_at": "2020-09-18T03:24:56Z", - "git_url": "git://github.com/supabase/.github.git", - "ssh_url": "git@github.com:supabase/.github.git", - "clone_url": "https://github.com/supabase/.github.git", - "svn_url": "https://github.com/supabase/.github", - "homepage": "https://supabase.com/", - "size": 10, - "stargazers_count": 2, - "watchers_count": 2, - "language": null, - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 0, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 0, - "license": null, - "forks": 0, - "open_issues": 0, - "watchers": 2, - "default_branch": "main", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 0, - "subscribers_count": 2 -} diff --git a/apps/docs/data/repos/benchmarks.json b/apps/docs/data/repos/benchmarks.json deleted file mode 100644 index e140613307c4e..0000000000000 --- a/apps/docs/data/repos/benchmarks.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 298483351, - "node_id": "MDEwOlJlcG9zaXRvcnkyOTg0ODMzNTE=", - "name": "benchmarks", - "full_name": "supabase/benchmarks", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/benchmarks", - "description": "Infrastucture benchmarks", - "fork": false, - "url": "https://api.github.com/repos/supabase/benchmarks", - "forks_url": "https://api.github.com/repos/supabase/benchmarks/forks", - "keys_url": "https://api.github.com/repos/supabase/benchmarks/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/benchmarks/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/benchmarks/teams", - "hooks_url": "https://api.github.com/repos/supabase/benchmarks/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/benchmarks/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/benchmarks/events", - "assignees_url": "https://api.github.com/repos/supabase/benchmarks/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/benchmarks/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/benchmarks/tags", - "blobs_url": "https://api.github.com/repos/supabase/benchmarks/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/benchmarks/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/benchmarks/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/benchmarks/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/benchmarks/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/benchmarks/languages", - "stargazers_url": "https://api.github.com/repos/supabase/benchmarks/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/benchmarks/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/benchmarks/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/benchmarks/subscription", - "commits_url": "https://api.github.com/repos/supabase/benchmarks/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/benchmarks/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/benchmarks/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/benchmarks/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/benchmarks/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/benchmarks/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/benchmarks/merges", - "archive_url": "https://api.github.com/repos/supabase/benchmarks/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/benchmarks/downloads", - "issues_url": "https://api.github.com/repos/supabase/benchmarks/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/benchmarks/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/benchmarks/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/benchmarks/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/benchmarks/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/benchmarks/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/benchmarks/deployments", - "created_at": "2020-09-25T06:09:13Z", - "updated_at": "2021-02-06T11:51:48Z", - "pushed_at": "2021-02-06T11:51:44Z", - "git_url": "git://github.com/supabase/benchmarks.git", - "ssh_url": "git@github.com:supabase/benchmarks.git", - "clone_url": "https://github.com/supabase/benchmarks.git", - "svn_url": "https://github.com/supabase/benchmarks", - "homepage": "https://supabase.com", - "size": 9251, - "stargazers_count": 13, - "watchers_count": 13, - "language": "JavaScript", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 1, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 6, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 1, - "open_issues": 6, - "watchers": 13, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 1, - "subscribers_count": 6 -} diff --git a/apps/docs/data/repos/cli.json b/apps/docs/data/repos/cli.json deleted file mode 100644 index cf0db8475a044..0000000000000 --- a/apps/docs/data/repos/cli.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 314160187, - "node_id": "MDEwOlJlcG9zaXRvcnkzMTQxNjAxODc=", - "name": "cli", - "full_name": "supabase/cli", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/cli", - "description": "Developer tools and helpers.", - "fork": false, - "url": "https://api.github.com/repos/supabase/cli", - "forks_url": "https://api.github.com/repos/supabase/cli/forks", - "keys_url": "https://api.github.com/repos/supabase/cli/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/cli/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/cli/teams", - "hooks_url": "https://api.github.com/repos/supabase/cli/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/cli/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/cli/events", - "assignees_url": "https://api.github.com/repos/supabase/cli/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/cli/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/cli/tags", - "blobs_url": "https://api.github.com/repos/supabase/cli/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/cli/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/cli/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/cli/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/cli/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/cli/languages", - "stargazers_url": "https://api.github.com/repos/supabase/cli/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/cli/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/cli/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/cli/subscription", - "commits_url": "https://api.github.com/repos/supabase/cli/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/cli/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/cli/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/cli/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/cli/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/cli/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/cli/merges", - "archive_url": "https://api.github.com/repos/supabase/cli/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/cli/downloads", - "issues_url": "https://api.github.com/repos/supabase/cli/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/cli/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/cli/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/cli/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/cli/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/cli/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/cli/deployments", - "created_at": "2020-11-19T06:46:55Z", - "updated_at": "2021-02-14T08:01:54Z", - "pushed_at": "2021-02-14T08:04:07Z", - "git_url": "git://github.com/supabase/cli.git", - "ssh_url": "git@github.com:supabase/cli.git", - "clone_url": "https://github.com/supabase/cli.git", - "svn_url": "https://github.com/supabase/cli", - "homepage": "https://supabase.com", - "size": 131, - "stargazers_count": 7, - "watchers_count": 7, - "language": "TypeScript", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 1, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 2, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 1, - "open_issues": 2, - "watchers": 7, - "default_branch": "main", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 1, - "subscribers_count": 3 -} diff --git a/apps/docs/data/repos/doctest-js.json b/apps/docs/data/repos/doctest-js.json deleted file mode 100644 index 4c46b99216220..0000000000000 --- a/apps/docs/data/repos/doctest-js.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 236905403, - "node_id": "MDEwOlJlcG9zaXRvcnkyMzY5MDU0MDM=", - "name": "doctest-js", - "full_name": "supabase/doctest-js", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/doctest-js", - "description": "Run JSDoc style doc examples as tests within your test suite", - "fork": false, - "url": "https://api.github.com/repos/supabase/doctest-js", - "forks_url": "https://api.github.com/repos/supabase/doctest-js/forks", - "keys_url": "https://api.github.com/repos/supabase/doctest-js/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/doctest-js/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/doctest-js/teams", - "hooks_url": "https://api.github.com/repos/supabase/doctest-js/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/doctest-js/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/doctest-js/events", - "assignees_url": "https://api.github.com/repos/supabase/doctest-js/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/doctest-js/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/doctest-js/tags", - "blobs_url": "https://api.github.com/repos/supabase/doctest-js/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/doctest-js/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/doctest-js/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/doctest-js/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/doctest-js/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/doctest-js/languages", - "stargazers_url": "https://api.github.com/repos/supabase/doctest-js/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/doctest-js/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/doctest-js/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/doctest-js/subscription", - "commits_url": "https://api.github.com/repos/supabase/doctest-js/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/doctest-js/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/doctest-js/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/doctest-js/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/doctest-js/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/doctest-js/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/doctest-js/merges", - "archive_url": "https://api.github.com/repos/supabase/doctest-js/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/doctest-js/downloads", - "issues_url": "https://api.github.com/repos/supabase/doctest-js/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/doctest-js/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/doctest-js/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/doctest-js/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/doctest-js/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/doctest-js/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/doctest-js/deployments", - "created_at": "2020-01-29T04:51:25Z", - "updated_at": "2021-02-14T08:46:07Z", - "pushed_at": "2020-12-22T16:32:15Z", - "git_url": "git://github.com/supabase/doctest-js.git", - "ssh_url": "git@github.com:supabase/doctest-js.git", - "clone_url": "https://github.com/supabase/doctest-js.git", - "svn_url": "https://github.com/supabase/doctest-js", - "homepage": "", - "size": 1623, - "stargazers_count": 52, - "watchers_count": 52, - "language": "JavaScript", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": false, - "has_pages": false, - "forks_count": 2, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 2, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 2, - "open_issues": 2, - "watchers": 52, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 2, - "subscribers_count": 3 -} diff --git a/apps/docs/data/repos/gotrue-csharp.json b/apps/docs/data/repos/gotrue-csharp.json deleted file mode 100644 index d11fcbaea8333..0000000000000 --- a/apps/docs/data/repos/gotrue-csharp.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 334638542, - "node_id": "MDEwOlJlcG9zaXRvcnkzMzQ2Mzg1NDI=", - "name": "gotrue-csharp", - "full_name": "supabase/gotrue-csharp", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/gotrue-csharp", - "description": "A C# interface for gotrue", - "fork": false, - "url": "https://api.github.com/repos/supabase/gotrue-csharp", - "forks_url": "https://api.github.com/repos/supabase/gotrue-csharp/forks", - "keys_url": "https://api.github.com/repos/supabase/gotrue-csharp/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/gotrue-csharp/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/gotrue-csharp/teams", - "hooks_url": "https://api.github.com/repos/supabase/gotrue-csharp/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/gotrue-csharp/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/gotrue-csharp/events", - "assignees_url": "https://api.github.com/repos/supabase/gotrue-csharp/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/gotrue-csharp/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/gotrue-csharp/tags", - "blobs_url": "https://api.github.com/repos/supabase/gotrue-csharp/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/gotrue-csharp/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/gotrue-csharp/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/gotrue-csharp/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/gotrue-csharp/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/gotrue-csharp/languages", - "stargazers_url": "https://api.github.com/repos/supabase/gotrue-csharp/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/gotrue-csharp/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/gotrue-csharp/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/gotrue-csharp/subscription", - "commits_url": "https://api.github.com/repos/supabase/gotrue-csharp/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/gotrue-csharp/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/gotrue-csharp/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/gotrue-csharp/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/gotrue-csharp/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/gotrue-csharp/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/gotrue-csharp/merges", - "archive_url": "https://api.github.com/repos/supabase/gotrue-csharp/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/gotrue-csharp/downloads", - "issues_url": "https://api.github.com/repos/supabase/gotrue-csharp/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/gotrue-csharp/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/gotrue-csharp/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/gotrue-csharp/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/gotrue-csharp/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/gotrue-csharp/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/gotrue-csharp/deployments", - "created_at": "2021-01-31T11:27:09Z", - "updated_at": "2021-02-15T12:53:37Z", - "pushed_at": "2021-02-15T12:54:48Z", - "git_url": "git://github.com/supabase/gotrue-csharp.git", - "ssh_url": "git@github.com:supabase/gotrue-csharp.git", - "clone_url": "https://github.com/supabase/gotrue-csharp.git", - "svn_url": "https://github.com/supabase/gotrue-csharp", - "homepage": "https://supabase.github.io/gotrue-csharp/api/Supabase.Gotrue.Client.html", - "size": 610, - "stargazers_count": 1, - "watchers_count": 1, - "language": "C#", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": true, - "forks_count": 1, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 0, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 1, - "open_issues": 0, - "watchers": 1, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 1, - "subscribers_count": 3 -} diff --git a/apps/docs/data/repos/gotrue.json b/apps/docs/data/repos/gotrue.json deleted file mode 100644 index 97f613b6a2939..0000000000000 --- a/apps/docs/data/repos/gotrue.json +++ /dev/null @@ -1,323 +0,0 @@ -{ - "id": 279488921, - "node_id": "MDEwOlJlcG9zaXRvcnkyNzk0ODg5MjE=", - "name": "gotrue", - "full_name": "supabase/gotrue", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/gotrue", - "description": "A JWT based API for managing users and issuing JWT tokens", - "fork": true, - "url": "https://api.github.com/repos/supabase/gotrue", - "forks_url": "https://api.github.com/repos/supabase/gotrue/forks", - "keys_url": "https://api.github.com/repos/supabase/gotrue/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/gotrue/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/gotrue/teams", - "hooks_url": "https://api.github.com/repos/supabase/gotrue/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/gotrue/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/gotrue/events", - "assignees_url": "https://api.github.com/repos/supabase/gotrue/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/gotrue/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/gotrue/tags", - "blobs_url": "https://api.github.com/repos/supabase/gotrue/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/gotrue/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/gotrue/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/gotrue/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/gotrue/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/gotrue/languages", - "stargazers_url": "https://api.github.com/repos/supabase/gotrue/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/gotrue/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/gotrue/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/gotrue/subscription", - "commits_url": "https://api.github.com/repos/supabase/gotrue/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/gotrue/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/gotrue/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/gotrue/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/gotrue/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/gotrue/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/gotrue/merges", - "archive_url": "https://api.github.com/repos/supabase/gotrue/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/gotrue/downloads", - "issues_url": "https://api.github.com/repos/supabase/gotrue/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/gotrue/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/gotrue/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/gotrue/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/gotrue/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/gotrue/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/gotrue/deployments", - "created_at": "2020-07-14T05:14:31Z", - "updated_at": "2021-02-15T06:58:06Z", - "pushed_at": "2021-02-16T03:37:05Z", - "git_url": "git://github.com/supabase/gotrue.git", - "ssh_url": "git@github.com:supabase/gotrue.git", - "clone_url": "https://github.com/supabase/gotrue.git", - "svn_url": "https://github.com/supabase/gotrue", - "homepage": "https://supabase.com/docs/guides/auth", - "size": 7183, - "stargazers_count": 9, - "watchers_count": 9, - "language": "Go", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 7, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 17, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 7, - "open_issues": 17, - "watchers": 9, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "parent": { - "id": 58974323, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODk3NDMyMw==", - "name": "gotrue", - "full_name": "netlify/gotrue", - "private": false, - "owner": { - "login": "netlify", - "id": 7892489, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjc4OTI0ODk=", - "avatar_url": "https://avatars.githubusercontent.com/u/7892489?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/netlify", - "html_url": "https://github.com/netlify", - "followers_url": "https://api.github.com/users/netlify/followers", - "following_url": "https://api.github.com/users/netlify/following{/other_user}", - "gists_url": "https://api.github.com/users/netlify/gists{/gist_id}", - "starred_url": "https://api.github.com/users/netlify/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/netlify/subscriptions", - "organizations_url": "https://api.github.com/users/netlify/orgs", - "repos_url": "https://api.github.com/users/netlify/repos", - "events_url": "https://api.github.com/users/netlify/events{/privacy}", - "received_events_url": "https://api.github.com/users/netlify/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/netlify/gotrue", - "description": "An SWT based API for managing users and issuing SWT tokens", - "fork": false, - "url": "https://api.github.com/repos/netlify/gotrue", - "forks_url": "https://api.github.com/repos/netlify/gotrue/forks", - "keys_url": "https://api.github.com/repos/netlify/gotrue/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/netlify/gotrue/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/netlify/gotrue/teams", - "hooks_url": "https://api.github.com/repos/netlify/gotrue/hooks", - "issue_events_url": "https://api.github.com/repos/netlify/gotrue/issues/events{/number}", - "events_url": "https://api.github.com/repos/netlify/gotrue/events", - "assignees_url": "https://api.github.com/repos/netlify/gotrue/assignees{/user}", - "branches_url": "https://api.github.com/repos/netlify/gotrue/branches{/branch}", - "tags_url": "https://api.github.com/repos/netlify/gotrue/tags", - "blobs_url": "https://api.github.com/repos/netlify/gotrue/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/netlify/gotrue/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/netlify/gotrue/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/netlify/gotrue/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/netlify/gotrue/statuses/{sha}", - "languages_url": "https://api.github.com/repos/netlify/gotrue/languages", - "stargazers_url": "https://api.github.com/repos/netlify/gotrue/stargazers", - "contributors_url": "https://api.github.com/repos/netlify/gotrue/contributors", - "subscribers_url": "https://api.github.com/repos/netlify/gotrue/subscribers", - "subscription_url": "https://api.github.com/repos/netlify/gotrue/subscription", - "commits_url": "https://api.github.com/repos/netlify/gotrue/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/netlify/gotrue/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/netlify/gotrue/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/netlify/gotrue/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/netlify/gotrue/contents/{+path}", - "compare_url": "https://api.github.com/repos/netlify/gotrue/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/netlify/gotrue/merges", - "archive_url": "https://api.github.com/repos/netlify/gotrue/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/netlify/gotrue/downloads", - "issues_url": "https://api.github.com/repos/netlify/gotrue/issues{/number}", - "pulls_url": "https://api.github.com/repos/netlify/gotrue/pulls{/number}", - "milestones_url": "https://api.github.com/repos/netlify/gotrue/milestones{/number}", - "notifications_url": "https://api.github.com/repos/netlify/gotrue/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/netlify/gotrue/labels{/name}", - "releases_url": "https://api.github.com/repos/netlify/gotrue/releases{/id}", - "deployments_url": "https://api.github.com/repos/netlify/gotrue/deployments", - "created_at": "2016-05-16T23:14:24Z", - "updated_at": "2021-02-15T06:07:23Z", - "pushed_at": "2020-12-19T07:50:47Z", - "git_url": "git://github.com/netlify/gotrue.git", - "ssh_url": "git@github.com:netlify/gotrue.git", - "clone_url": "https://github.com/netlify/gotrue.git", - "svn_url": "https://github.com/netlify/gotrue", - "homepage": "https://www.gotrueapi.org", - "size": 6937, - "stargazers_count": 1643, - "watchers_count": 1643, - "language": "Go", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 155, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 54, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 155, - "open_issues": 54, - "watchers": 1643, - "default_branch": "master" - }, - "source": { - "id": 58974323, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODk3NDMyMw==", - "name": "gotrue", - "full_name": "netlify/gotrue", - "private": false, - "owner": { - "login": "netlify", - "id": 7892489, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjc4OTI0ODk=", - "avatar_url": "https://avatars.githubusercontent.com/u/7892489?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/netlify", - "html_url": "https://github.com/netlify", - "followers_url": "https://api.github.com/users/netlify/followers", - "following_url": "https://api.github.com/users/netlify/following{/other_user}", - "gists_url": "https://api.github.com/users/netlify/gists{/gist_id}", - "starred_url": "https://api.github.com/users/netlify/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/netlify/subscriptions", - "organizations_url": "https://api.github.com/users/netlify/orgs", - "repos_url": "https://api.github.com/users/netlify/repos", - "events_url": "https://api.github.com/users/netlify/events{/privacy}", - "received_events_url": "https://api.github.com/users/netlify/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/netlify/gotrue", - "description": "An SWT based API for managing users and issuing SWT tokens", - "fork": false, - "url": "https://api.github.com/repos/netlify/gotrue", - "forks_url": "https://api.github.com/repos/netlify/gotrue/forks", - "keys_url": "https://api.github.com/repos/netlify/gotrue/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/netlify/gotrue/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/netlify/gotrue/teams", - "hooks_url": "https://api.github.com/repos/netlify/gotrue/hooks", - "issue_events_url": "https://api.github.com/repos/netlify/gotrue/issues/events{/number}", - "events_url": "https://api.github.com/repos/netlify/gotrue/events", - "assignees_url": "https://api.github.com/repos/netlify/gotrue/assignees{/user}", - "branches_url": "https://api.github.com/repos/netlify/gotrue/branches{/branch}", - "tags_url": "https://api.github.com/repos/netlify/gotrue/tags", - "blobs_url": "https://api.github.com/repos/netlify/gotrue/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/netlify/gotrue/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/netlify/gotrue/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/netlify/gotrue/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/netlify/gotrue/statuses/{sha}", - "languages_url": "https://api.github.com/repos/netlify/gotrue/languages", - "stargazers_url": "https://api.github.com/repos/netlify/gotrue/stargazers", - "contributors_url": "https://api.github.com/repos/netlify/gotrue/contributors", - "subscribers_url": "https://api.github.com/repos/netlify/gotrue/subscribers", - "subscription_url": "https://api.github.com/repos/netlify/gotrue/subscription", - "commits_url": "https://api.github.com/repos/netlify/gotrue/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/netlify/gotrue/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/netlify/gotrue/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/netlify/gotrue/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/netlify/gotrue/contents/{+path}", - "compare_url": "https://api.github.com/repos/netlify/gotrue/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/netlify/gotrue/merges", - "archive_url": "https://api.github.com/repos/netlify/gotrue/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/netlify/gotrue/downloads", - "issues_url": "https://api.github.com/repos/netlify/gotrue/issues{/number}", - "pulls_url": "https://api.github.com/repos/netlify/gotrue/pulls{/number}", - "milestones_url": "https://api.github.com/repos/netlify/gotrue/milestones{/number}", - "notifications_url": "https://api.github.com/repos/netlify/gotrue/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/netlify/gotrue/labels{/name}", - "releases_url": "https://api.github.com/repos/netlify/gotrue/releases{/id}", - "deployments_url": "https://api.github.com/repos/netlify/gotrue/deployments", - "created_at": "2016-05-16T23:14:24Z", - "updated_at": "2021-02-15T06:07:23Z", - "pushed_at": "2020-12-19T07:50:47Z", - "git_url": "git://github.com/netlify/gotrue.git", - "ssh_url": "git@github.com:netlify/gotrue.git", - "clone_url": "https://github.com/netlify/gotrue.git", - "svn_url": "https://github.com/netlify/gotrue", - "homepage": "https://www.gotrueapi.org", - "size": 6937, - "stargazers_count": 1643, - "watchers_count": 1643, - "language": "Go", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 155, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 54, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 155, - "open_issues": 54, - "watchers": 1643, - "default_branch": "master" - }, - "network_count": 155, - "subscribers_count": 1 -} diff --git a/apps/docs/data/repos/jsdoc-template.json b/apps/docs/data/repos/jsdoc-template.json deleted file mode 100644 index 3b129f41f3edf..0000000000000 --- a/apps/docs/data/repos/jsdoc-template.json +++ /dev/null @@ -1,323 +0,0 @@ -{ - "id": 236916940, - "node_id": "MDEwOlJlcG9zaXRvcnkyMzY5MTY5NDA=", - "name": "jsdoc-template", - "full_name": "supabase/jsdoc-template", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/jsdoc-template", - "description": "A clean, responsive documentation template with search and navigation highlighting for JSDoc 3", - "fork": true, - "url": "https://api.github.com/repos/supabase/jsdoc-template", - "forks_url": "https://api.github.com/repos/supabase/jsdoc-template/forks", - "keys_url": "https://api.github.com/repos/supabase/jsdoc-template/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/jsdoc-template/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/jsdoc-template/teams", - "hooks_url": "https://api.github.com/repos/supabase/jsdoc-template/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/jsdoc-template/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/jsdoc-template/events", - "assignees_url": "https://api.github.com/repos/supabase/jsdoc-template/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/jsdoc-template/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/jsdoc-template/tags", - "blobs_url": "https://api.github.com/repos/supabase/jsdoc-template/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/jsdoc-template/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/jsdoc-template/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/jsdoc-template/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/jsdoc-template/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/jsdoc-template/languages", - "stargazers_url": "https://api.github.com/repos/supabase/jsdoc-template/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/jsdoc-template/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/jsdoc-template/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/jsdoc-template/subscription", - "commits_url": "https://api.github.com/repos/supabase/jsdoc-template/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/jsdoc-template/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/jsdoc-template/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/jsdoc-template/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/jsdoc-template/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/jsdoc-template/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/jsdoc-template/merges", - "archive_url": "https://api.github.com/repos/supabase/jsdoc-template/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/jsdoc-template/downloads", - "issues_url": "https://api.github.com/repos/supabase/jsdoc-template/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/jsdoc-template/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/jsdoc-template/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/jsdoc-template/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/jsdoc-template/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/jsdoc-template/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/jsdoc-template/deployments", - "created_at": "2020-01-29T06:16:50Z", - "updated_at": "2020-04-22T04:24:52Z", - "pushed_at": "2020-06-12T07:35:55Z", - "git_url": "git://github.com/supabase/jsdoc-template.git", - "ssh_url": "git@github.com:supabase/jsdoc-template.git", - "clone_url": "https://github.com/supabase/jsdoc-template.git", - "svn_url": "https://github.com/supabase/jsdoc-template", - "homepage": "", - "size": 654, - "stargazers_count": 2, - "watchers_count": 2, - "language": "CSS", - "has_issues": false, - "has_projects": true, - "has_downloads": true, - "has_wiki": false, - "has_pages": false, - "forks_count": 0, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 2, - "license": { - "key": "other", - "name": "Other", - "spdx_id": "NOASSERTION", - "url": null, - "node_id": "MDc6TGljZW5zZTA=" - }, - "forks": 0, - "open_issues": 2, - "watchers": 2, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "parent": { - "id": 59770336, - "node_id": "MDEwOlJlcG9zaXRvcnk1OTc3MDMzNg==", - "name": "jsdoc-template", - "full_name": "braintree/jsdoc-template", - "private": false, - "owner": { - "login": "braintree", - "id": 3453, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjM0NTM=", - "avatar_url": "https://avatars2.githubusercontent.com/u/3453?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/braintree", - "html_url": "https://github.com/braintree", - "followers_url": "https://api.github.com/users/braintree/followers", - "following_url": "https://api.github.com/users/braintree/following{/other_user}", - "gists_url": "https://api.github.com/users/braintree/gists{/gist_id}", - "starred_url": "https://api.github.com/users/braintree/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/braintree/subscriptions", - "organizations_url": "https://api.github.com/users/braintree/orgs", - "repos_url": "https://api.github.com/users/braintree/repos", - "events_url": "https://api.github.com/users/braintree/events{/privacy}", - "received_events_url": "https://api.github.com/users/braintree/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/braintree/jsdoc-template", - "description": "A clean, responsive documentation template with search and navigation highlighting for JSDoc 3", - "fork": false, - "url": "https://api.github.com/repos/braintree/jsdoc-template", - "forks_url": "https://api.github.com/repos/braintree/jsdoc-template/forks", - "keys_url": "https://api.github.com/repos/braintree/jsdoc-template/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/braintree/jsdoc-template/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/braintree/jsdoc-template/teams", - "hooks_url": "https://api.github.com/repos/braintree/jsdoc-template/hooks", - "issue_events_url": "https://api.github.com/repos/braintree/jsdoc-template/issues/events{/number}", - "events_url": "https://api.github.com/repos/braintree/jsdoc-template/events", - "assignees_url": "https://api.github.com/repos/braintree/jsdoc-template/assignees{/user}", - "branches_url": "https://api.github.com/repos/braintree/jsdoc-template/branches{/branch}", - "tags_url": "https://api.github.com/repos/braintree/jsdoc-template/tags", - "blobs_url": "https://api.github.com/repos/braintree/jsdoc-template/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/braintree/jsdoc-template/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/braintree/jsdoc-template/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/braintree/jsdoc-template/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/braintree/jsdoc-template/statuses/{sha}", - "languages_url": "https://api.github.com/repos/braintree/jsdoc-template/languages", - "stargazers_url": "https://api.github.com/repos/braintree/jsdoc-template/stargazers", - "contributors_url": "https://api.github.com/repos/braintree/jsdoc-template/contributors", - "subscribers_url": "https://api.github.com/repos/braintree/jsdoc-template/subscribers", - "subscription_url": "https://api.github.com/repos/braintree/jsdoc-template/subscription", - "commits_url": "https://api.github.com/repos/braintree/jsdoc-template/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/braintree/jsdoc-template/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/braintree/jsdoc-template/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/braintree/jsdoc-template/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/braintree/jsdoc-template/contents/{+path}", - "compare_url": "https://api.github.com/repos/braintree/jsdoc-template/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/braintree/jsdoc-template/merges", - "archive_url": "https://api.github.com/repos/braintree/jsdoc-template/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/braintree/jsdoc-template/downloads", - "issues_url": "https://api.github.com/repos/braintree/jsdoc-template/issues{/number}", - "pulls_url": "https://api.github.com/repos/braintree/jsdoc-template/pulls{/number}", - "milestones_url": "https://api.github.com/repos/braintree/jsdoc-template/milestones{/number}", - "notifications_url": "https://api.github.com/repos/braintree/jsdoc-template/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/braintree/jsdoc-template/labels{/name}", - "releases_url": "https://api.github.com/repos/braintree/jsdoc-template/releases{/id}", - "deployments_url": "https://api.github.com/repos/braintree/jsdoc-template/deployments", - "created_at": "2016-05-26T17:37:00Z", - "updated_at": "2020-06-23T01:52:09Z", - "pushed_at": "2020-03-24T18:02:57Z", - "git_url": "git://github.com/braintree/jsdoc-template.git", - "ssh_url": "git@github.com:braintree/jsdoc-template.git", - "clone_url": "https://github.com/braintree/jsdoc-template.git", - "svn_url": "https://github.com/braintree/jsdoc-template", - "homepage": "", - "size": 643, - "stargazers_count": 126, - "watchers_count": 126, - "language": "CSS", - "has_issues": false, - "has_projects": true, - "has_downloads": true, - "has_wiki": false, - "has_pages": false, - "forks_count": 50, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 0, - "license": { - "key": "other", - "name": "Other", - "spdx_id": "NOASSERTION", - "url": null, - "node_id": "MDc6TGljZW5zZTA=" - }, - "forks": 50, - "open_issues": 0, - "watchers": 126, - "default_branch": "master" - }, - "source": { - "id": 59770336, - "node_id": "MDEwOlJlcG9zaXRvcnk1OTc3MDMzNg==", - "name": "jsdoc-template", - "full_name": "braintree/jsdoc-template", - "private": false, - "owner": { - "login": "braintree", - "id": 3453, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjM0NTM=", - "avatar_url": "https://avatars2.githubusercontent.com/u/3453?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/braintree", - "html_url": "https://github.com/braintree", - "followers_url": "https://api.github.com/users/braintree/followers", - "following_url": "https://api.github.com/users/braintree/following{/other_user}", - "gists_url": "https://api.github.com/users/braintree/gists{/gist_id}", - "starred_url": "https://api.github.com/users/braintree/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/braintree/subscriptions", - "organizations_url": "https://api.github.com/users/braintree/orgs", - "repos_url": "https://api.github.com/users/braintree/repos", - "events_url": "https://api.github.com/users/braintree/events{/privacy}", - "received_events_url": "https://api.github.com/users/braintree/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/braintree/jsdoc-template", - "description": "A clean, responsive documentation template with search and navigation highlighting for JSDoc 3", - "fork": false, - "url": "https://api.github.com/repos/braintree/jsdoc-template", - "forks_url": "https://api.github.com/repos/braintree/jsdoc-template/forks", - "keys_url": "https://api.github.com/repos/braintree/jsdoc-template/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/braintree/jsdoc-template/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/braintree/jsdoc-template/teams", - "hooks_url": "https://api.github.com/repos/braintree/jsdoc-template/hooks", - "issue_events_url": "https://api.github.com/repos/braintree/jsdoc-template/issues/events{/number}", - "events_url": "https://api.github.com/repos/braintree/jsdoc-template/events", - "assignees_url": "https://api.github.com/repos/braintree/jsdoc-template/assignees{/user}", - "branches_url": "https://api.github.com/repos/braintree/jsdoc-template/branches{/branch}", - "tags_url": "https://api.github.com/repos/braintree/jsdoc-template/tags", - "blobs_url": "https://api.github.com/repos/braintree/jsdoc-template/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/braintree/jsdoc-template/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/braintree/jsdoc-template/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/braintree/jsdoc-template/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/braintree/jsdoc-template/statuses/{sha}", - "languages_url": "https://api.github.com/repos/braintree/jsdoc-template/languages", - "stargazers_url": "https://api.github.com/repos/braintree/jsdoc-template/stargazers", - "contributors_url": "https://api.github.com/repos/braintree/jsdoc-template/contributors", - "subscribers_url": "https://api.github.com/repos/braintree/jsdoc-template/subscribers", - "subscription_url": "https://api.github.com/repos/braintree/jsdoc-template/subscription", - "commits_url": "https://api.github.com/repos/braintree/jsdoc-template/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/braintree/jsdoc-template/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/braintree/jsdoc-template/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/braintree/jsdoc-template/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/braintree/jsdoc-template/contents/{+path}", - "compare_url": "https://api.github.com/repos/braintree/jsdoc-template/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/braintree/jsdoc-template/merges", - "archive_url": "https://api.github.com/repos/braintree/jsdoc-template/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/braintree/jsdoc-template/downloads", - "issues_url": "https://api.github.com/repos/braintree/jsdoc-template/issues{/number}", - "pulls_url": "https://api.github.com/repos/braintree/jsdoc-template/pulls{/number}", - "milestones_url": "https://api.github.com/repos/braintree/jsdoc-template/milestones{/number}", - "notifications_url": "https://api.github.com/repos/braintree/jsdoc-template/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/braintree/jsdoc-template/labels{/name}", - "releases_url": "https://api.github.com/repos/braintree/jsdoc-template/releases{/id}", - "deployments_url": "https://api.github.com/repos/braintree/jsdoc-template/deployments", - "created_at": "2016-05-26T17:37:00Z", - "updated_at": "2020-06-23T01:52:09Z", - "pushed_at": "2020-03-24T18:02:57Z", - "git_url": "git://github.com/braintree/jsdoc-template.git", - "ssh_url": "git@github.com:braintree/jsdoc-template.git", - "clone_url": "https://github.com/braintree/jsdoc-template.git", - "svn_url": "https://github.com/braintree/jsdoc-template", - "homepage": "", - "size": 643, - "stargazers_count": 126, - "watchers_count": 126, - "language": "CSS", - "has_issues": false, - "has_projects": true, - "has_downloads": true, - "has_wiki": false, - "has_pages": false, - "forks_count": 50, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 0, - "license": { - "key": "other", - "name": "Other", - "spdx_id": "NOASSERTION", - "url": null, - "node_id": "MDc6TGljZW5zZTA=" - }, - "forks": 50, - "open_issues": 0, - "watchers": 126, - "default_branch": "master" - }, - "network_count": 50, - "subscribers_count": 0 -} diff --git a/apps/docs/data/repos/marketplace.json b/apps/docs/data/repos/marketplace.json deleted file mode 100644 index 9deb90e1c2f03..0000000000000 --- a/apps/docs/data/repos/marketplace.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 231560476, - "node_id": "MDEwOlJlcG9zaXRvcnkyMzE1NjA0NzY=", - "name": "marketplace", - "full_name": "supabase/marketplace", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/marketplace", - "description": "An opensource repository of (PostgreSQL) SQL", - "fork": false, - "url": "https://api.github.com/repos/supabase/marketplace", - "forks_url": "https://api.github.com/repos/supabase/marketplace/forks", - "keys_url": "https://api.github.com/repos/supabase/marketplace/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/marketplace/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/marketplace/teams", - "hooks_url": "https://api.github.com/repos/supabase/marketplace/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/marketplace/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/marketplace/events", - "assignees_url": "https://api.github.com/repos/supabase/marketplace/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/marketplace/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/marketplace/tags", - "blobs_url": "https://api.github.com/repos/supabase/marketplace/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/marketplace/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/marketplace/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/marketplace/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/marketplace/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/marketplace/languages", - "stargazers_url": "https://api.github.com/repos/supabase/marketplace/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/marketplace/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/marketplace/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/marketplace/subscription", - "commits_url": "https://api.github.com/repos/supabase/marketplace/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/marketplace/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/marketplace/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/marketplace/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/marketplace/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/marketplace/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/marketplace/merges", - "archive_url": "https://api.github.com/repos/supabase/marketplace/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/marketplace/downloads", - "issues_url": "https://api.github.com/repos/supabase/marketplace/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/marketplace/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/marketplace/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/marketplace/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/marketplace/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/marketplace/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/marketplace/deployments", - "created_at": "2020-01-03T09:59:40Z", - "updated_at": "2020-06-29T02:36:36Z", - "pushed_at": "2020-04-27T06:28:08Z", - "git_url": "git://github.com/supabase/marketplace.git", - "ssh_url": "git@github.com:supabase/marketplace.git", - "clone_url": "https://github.com/supabase/marketplace.git", - "svn_url": "https://github.com/supabase/marketplace", - "homepage": "https://supabase.com", - "size": 112, - "stargazers_count": 9, - "watchers_count": 9, - "language": "TSQL", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 2, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 0, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 2, - "open_issues": 0, - "watchers": 9, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 2, - "subscribers_count": 3 -} diff --git a/apps/docs/data/repos/pg-api.json b/apps/docs/data/repos/pg-api.json deleted file mode 100644 index c9efd236928e4..0000000000000 --- a/apps/docs/data/repos/pg-api.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 265560320, - "node_id": "MDEwOlJlcG9zaXRvcnkyNjU1NjAzMjA=", - "name": "pg-api", - "full_name": "supabase/pg-api", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/pg-api", - "description": "A RESTful API for managing your Postgres. Fetch tables, add roles, and run queries", - "fork": false, - "url": "https://api.github.com/repos/supabase/pg-api", - "forks_url": "https://api.github.com/repos/supabase/pg-api/forks", - "keys_url": "https://api.github.com/repos/supabase/pg-api/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/pg-api/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/pg-api/teams", - "hooks_url": "https://api.github.com/repos/supabase/pg-api/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/pg-api/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/pg-api/events", - "assignees_url": "https://api.github.com/repos/supabase/pg-api/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/pg-api/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/pg-api/tags", - "blobs_url": "https://api.github.com/repos/supabase/pg-api/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/pg-api/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/pg-api/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/pg-api/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/pg-api/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/pg-api/languages", - "stargazers_url": "https://api.github.com/repos/supabase/pg-api/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/pg-api/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/pg-api/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/pg-api/subscription", - "commits_url": "https://api.github.com/repos/supabase/pg-api/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/pg-api/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/pg-api/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/pg-api/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/pg-api/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/pg-api/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/pg-api/merges", - "archive_url": "https://api.github.com/repos/supabase/pg-api/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/pg-api/downloads", - "issues_url": "https://api.github.com/repos/supabase/pg-api/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/pg-api/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/pg-api/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/pg-api/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/pg-api/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/pg-api/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/pg-api/deployments", - "created_at": "2020-05-20T12:36:37Z", - "updated_at": "2020-10-30T08:25:43Z", - "pushed_at": "2020-10-26T16:26:10Z", - "git_url": "git://github.com/supabase/pg-api.git", - "ssh_url": "git@github.com:supabase/pg-api.git", - "clone_url": "https://github.com/supabase/pg-api.git", - "svn_url": "https://github.com/supabase/pg-api", - "homepage": "https://supabase.com", - "size": 87982, - "stargazers_count": 72, - "watchers_count": 72, - "language": "TypeScript", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": true, - "forks_count": 5, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 6, - "license": { - "key": "apache-2.0", - "name": "Apache License 2.0", - "spdx_id": "Apache-2.0", - "url": "https://api.github.com/licenses/apache-2.0", - "node_id": "MDc6TGljZW5zZTI=" - }, - "forks": 5, - "open_issues": 6, - "watchers": 72, - "default_branch": "develop", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 5, - "subscribers_count": 6 -} diff --git a/apps/docs/data/repos/pg_listen.json b/apps/docs/data/repos/pg_listen.json deleted file mode 100644 index 9cc417ae95e3f..0000000000000 --- a/apps/docs/data/repos/pg_listen.json +++ /dev/null @@ -1,323 +0,0 @@ -{ - "id": 258239197, - "node_id": "MDEwOlJlcG9zaXRvcnkyNTgyMzkxOTc=", - "name": "pg_listen", - "full_name": "supabase/pg_listen", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/pg_listen", - "description": "Trigger shell command from NOTIFY", - "fork": true, - "url": "https://api.github.com/repos/supabase/pg_listen", - "forks_url": "https://api.github.com/repos/supabase/pg_listen/forks", - "keys_url": "https://api.github.com/repos/supabase/pg_listen/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/pg_listen/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/pg_listen/teams", - "hooks_url": "https://api.github.com/repos/supabase/pg_listen/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/pg_listen/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/pg_listen/events", - "assignees_url": "https://api.github.com/repos/supabase/pg_listen/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/pg_listen/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/pg_listen/tags", - "blobs_url": "https://api.github.com/repos/supabase/pg_listen/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/pg_listen/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/pg_listen/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/pg_listen/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/pg_listen/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/pg_listen/languages", - "stargazers_url": "https://api.github.com/repos/supabase/pg_listen/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/pg_listen/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/pg_listen/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/pg_listen/subscription", - "commits_url": "https://api.github.com/repos/supabase/pg_listen/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/pg_listen/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/pg_listen/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/pg_listen/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/pg_listen/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/pg_listen/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/pg_listen/merges", - "archive_url": "https://api.github.com/repos/supabase/pg_listen/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/pg_listen/downloads", - "issues_url": "https://api.github.com/repos/supabase/pg_listen/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/pg_listen/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/pg_listen/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/pg_listen/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/pg_listen/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/pg_listen/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/pg_listen/deployments", - "created_at": "2020-04-23T14:54:20Z", - "updated_at": "2020-06-19T01:12:20Z", - "pushed_at": "2020-04-23T15:16:06Z", - "git_url": "git://github.com/supabase/pg_listen.git", - "ssh_url": "git@github.com:supabase/pg_listen.git", - "clone_url": "https://github.com/supabase/pg_listen.git", - "svn_url": "https://github.com/supabase/pg_listen", - "homepage": null, - "size": 20, - "stargazers_count": 0, - "watchers_count": 0, - "language": "C", - "has_issues": false, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 0, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 0, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 0, - "open_issues": 0, - "watchers": 0, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "parent": { - "id": 124506929, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjQ1MDY5Mjk=", - "name": "pg_listen", - "full_name": "begriffs/pg_listen", - "private": false, - "owner": { - "login": "begriffs", - "id": 911911, - "node_id": "MDQ6VXNlcjkxMTkxMQ==", - "avatar_url": "https://avatars2.githubusercontent.com/u/911911?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/begriffs", - "html_url": "https://github.com/begriffs", - "followers_url": "https://api.github.com/users/begriffs/followers", - "following_url": "https://api.github.com/users/begriffs/following{/other_user}", - "gists_url": "https://api.github.com/users/begriffs/gists{/gist_id}", - "starred_url": "https://api.github.com/users/begriffs/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/begriffs/subscriptions", - "organizations_url": "https://api.github.com/users/begriffs/orgs", - "repos_url": "https://api.github.com/users/begriffs/repos", - "events_url": "https://api.github.com/users/begriffs/events{/privacy}", - "received_events_url": "https://api.github.com/users/begriffs/received_events", - "type": "User", - "site_admin": false - }, - "html_url": "https://github.com/begriffs/pg_listen", - "description": "Trigger shell command from NOTIFY", - "fork": false, - "url": "https://api.github.com/repos/begriffs/pg_listen", - "forks_url": "https://api.github.com/repos/begriffs/pg_listen/forks", - "keys_url": "https://api.github.com/repos/begriffs/pg_listen/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/begriffs/pg_listen/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/begriffs/pg_listen/teams", - "hooks_url": "https://api.github.com/repos/begriffs/pg_listen/hooks", - "issue_events_url": "https://api.github.com/repos/begriffs/pg_listen/issues/events{/number}", - "events_url": "https://api.github.com/repos/begriffs/pg_listen/events", - "assignees_url": "https://api.github.com/repos/begriffs/pg_listen/assignees{/user}", - "branches_url": "https://api.github.com/repos/begriffs/pg_listen/branches{/branch}", - "tags_url": "https://api.github.com/repos/begriffs/pg_listen/tags", - "blobs_url": "https://api.github.com/repos/begriffs/pg_listen/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/begriffs/pg_listen/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/begriffs/pg_listen/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/begriffs/pg_listen/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/begriffs/pg_listen/statuses/{sha}", - "languages_url": "https://api.github.com/repos/begriffs/pg_listen/languages", - "stargazers_url": "https://api.github.com/repos/begriffs/pg_listen/stargazers", - "contributors_url": "https://api.github.com/repos/begriffs/pg_listen/contributors", - "subscribers_url": "https://api.github.com/repos/begriffs/pg_listen/subscribers", - "subscription_url": "https://api.github.com/repos/begriffs/pg_listen/subscription", - "commits_url": "https://api.github.com/repos/begriffs/pg_listen/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/begriffs/pg_listen/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/begriffs/pg_listen/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/begriffs/pg_listen/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/begriffs/pg_listen/contents/{+path}", - "compare_url": "https://api.github.com/repos/begriffs/pg_listen/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/begriffs/pg_listen/merges", - "archive_url": "https://api.github.com/repos/begriffs/pg_listen/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/begriffs/pg_listen/downloads", - "issues_url": "https://api.github.com/repos/begriffs/pg_listen/issues{/number}", - "pulls_url": "https://api.github.com/repos/begriffs/pg_listen/pulls{/number}", - "milestones_url": "https://api.github.com/repos/begriffs/pg_listen/milestones{/number}", - "notifications_url": "https://api.github.com/repos/begriffs/pg_listen/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/begriffs/pg_listen/labels{/name}", - "releases_url": "https://api.github.com/repos/begriffs/pg_listen/releases{/id}", - "deployments_url": "https://api.github.com/repos/begriffs/pg_listen/deployments", - "created_at": "2018-03-09T07:51:43Z", - "updated_at": "2020-06-19T01:12:49Z", - "pushed_at": "2020-02-27T02:45:01Z", - "git_url": "git://github.com/begriffs/pg_listen.git", - "ssh_url": "git@github.com:begriffs/pg_listen.git", - "clone_url": "https://github.com/begriffs/pg_listen.git", - "svn_url": "https://github.com/begriffs/pg_listen", - "homepage": null, - "size": 19, - "stargazers_count": 69, - "watchers_count": 69, - "language": "C", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 9, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 1, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 9, - "open_issues": 1, - "watchers": 69, - "default_branch": "master" - }, - "source": { - "id": 124506929, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjQ1MDY5Mjk=", - "name": "pg_listen", - "full_name": "begriffs/pg_listen", - "private": false, - "owner": { - "login": "begriffs", - "id": 911911, - "node_id": "MDQ6VXNlcjkxMTkxMQ==", - "avatar_url": "https://avatars2.githubusercontent.com/u/911911?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/begriffs", - "html_url": "https://github.com/begriffs", - "followers_url": "https://api.github.com/users/begriffs/followers", - "following_url": "https://api.github.com/users/begriffs/following{/other_user}", - "gists_url": "https://api.github.com/users/begriffs/gists{/gist_id}", - "starred_url": "https://api.github.com/users/begriffs/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/begriffs/subscriptions", - "organizations_url": "https://api.github.com/users/begriffs/orgs", - "repos_url": "https://api.github.com/users/begriffs/repos", - "events_url": "https://api.github.com/users/begriffs/events{/privacy}", - "received_events_url": "https://api.github.com/users/begriffs/received_events", - "type": "User", - "site_admin": false - }, - "html_url": "https://github.com/begriffs/pg_listen", - "description": "Trigger shell command from NOTIFY", - "fork": false, - "url": "https://api.github.com/repos/begriffs/pg_listen", - "forks_url": "https://api.github.com/repos/begriffs/pg_listen/forks", - "keys_url": "https://api.github.com/repos/begriffs/pg_listen/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/begriffs/pg_listen/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/begriffs/pg_listen/teams", - "hooks_url": "https://api.github.com/repos/begriffs/pg_listen/hooks", - "issue_events_url": "https://api.github.com/repos/begriffs/pg_listen/issues/events{/number}", - "events_url": "https://api.github.com/repos/begriffs/pg_listen/events", - "assignees_url": "https://api.github.com/repos/begriffs/pg_listen/assignees{/user}", - "branches_url": "https://api.github.com/repos/begriffs/pg_listen/branches{/branch}", - "tags_url": "https://api.github.com/repos/begriffs/pg_listen/tags", - "blobs_url": "https://api.github.com/repos/begriffs/pg_listen/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/begriffs/pg_listen/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/begriffs/pg_listen/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/begriffs/pg_listen/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/begriffs/pg_listen/statuses/{sha}", - "languages_url": "https://api.github.com/repos/begriffs/pg_listen/languages", - "stargazers_url": "https://api.github.com/repos/begriffs/pg_listen/stargazers", - "contributors_url": "https://api.github.com/repos/begriffs/pg_listen/contributors", - "subscribers_url": "https://api.github.com/repos/begriffs/pg_listen/subscribers", - "subscription_url": "https://api.github.com/repos/begriffs/pg_listen/subscription", - "commits_url": "https://api.github.com/repos/begriffs/pg_listen/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/begriffs/pg_listen/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/begriffs/pg_listen/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/begriffs/pg_listen/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/begriffs/pg_listen/contents/{+path}", - "compare_url": "https://api.github.com/repos/begriffs/pg_listen/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/begriffs/pg_listen/merges", - "archive_url": "https://api.github.com/repos/begriffs/pg_listen/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/begriffs/pg_listen/downloads", - "issues_url": "https://api.github.com/repos/begriffs/pg_listen/issues{/number}", - "pulls_url": "https://api.github.com/repos/begriffs/pg_listen/pulls{/number}", - "milestones_url": "https://api.github.com/repos/begriffs/pg_listen/milestones{/number}", - "notifications_url": "https://api.github.com/repos/begriffs/pg_listen/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/begriffs/pg_listen/labels{/name}", - "releases_url": "https://api.github.com/repos/begriffs/pg_listen/releases{/id}", - "deployments_url": "https://api.github.com/repos/begriffs/pg_listen/deployments", - "created_at": "2018-03-09T07:51:43Z", - "updated_at": "2020-06-19T01:12:49Z", - "pushed_at": "2020-02-27T02:45:01Z", - "git_url": "git://github.com/begriffs/pg_listen.git", - "ssh_url": "git@github.com:begriffs/pg_listen.git", - "clone_url": "https://github.com/begriffs/pg_listen.git", - "svn_url": "https://github.com/begriffs/pg_listen", - "homepage": null, - "size": 19, - "stargazers_count": 69, - "watchers_count": 69, - "language": "C", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 9, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 1, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 9, - "open_issues": 1, - "watchers": 69, - "default_branch": "master" - }, - "network_count": 9, - "subscribers_count": 0 -} diff --git a/apps/docs/data/repos/postgres.json b/apps/docs/data/repos/postgres.json deleted file mode 100644 index c2a8e4250cf8a..0000000000000 --- a/apps/docs/data/repos/postgres.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 254578428, - "node_id": "MDEwOlJlcG9zaXRvcnkyNTQ1Nzg0Mjg=", - "name": "postgres", - "full_name": "supabase/postgres", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/postgres", - "description": "Unmodified Postgres with some useful plugins", - "fork": false, - "url": "https://api.github.com/repos/supabase/postgres", - "forks_url": "https://api.github.com/repos/supabase/postgres/forks", - "keys_url": "https://api.github.com/repos/supabase/postgres/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/postgres/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/postgres/teams", - "hooks_url": "https://api.github.com/repos/supabase/postgres/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/postgres/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/postgres/events", - "assignees_url": "https://api.github.com/repos/supabase/postgres/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/postgres/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/postgres/tags", - "blobs_url": "https://api.github.com/repos/supabase/postgres/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/postgres/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/postgres/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/postgres/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/postgres/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/postgres/languages", - "stargazers_url": "https://api.github.com/repos/supabase/postgres/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/postgres/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/postgres/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/postgres/subscription", - "commits_url": "https://api.github.com/repos/supabase/postgres/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/postgres/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/postgres/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/postgres/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/postgres/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/postgres/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/postgres/merges", - "archive_url": "https://api.github.com/repos/supabase/postgres/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/postgres/downloads", - "issues_url": "https://api.github.com/repos/supabase/postgres/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/postgres/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/postgres/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/postgres/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/postgres/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/postgres/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/postgres/deployments", - "created_at": "2020-04-10T08:02:57Z", - "updated_at": "2020-10-30T08:25:37Z", - "pushed_at": "2020-10-02T08:31:17Z", - "git_url": "git://github.com/supabase/postgres.git", - "ssh_url": "git@github.com:supabase/postgres.git", - "clone_url": "https://github.com/supabase/postgres.git", - "svn_url": "https://github.com/supabase/postgres", - "homepage": "https://supabase.com", - "size": 117, - "stargazers_count": 151, - "watchers_count": 151, - "language": "Shell", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 4, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 4, - "license": { - "key": "postgresql", - "name": "PostgreSQL License", - "spdx_id": "PostgreSQL", - "url": "https://api.github.com/licenses/postgresql", - "node_id": "MDc6TGljZW5zZTMx" - }, - "forks": 4, - "open_issues": 4, - "watchers": 151, - "default_branch": "develop", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 4, - "subscribers_count": 8 -} diff --git a/apps/docs/data/repos/postgrest-js.json b/apps/docs/data/repos/postgrest-js.json deleted file mode 100644 index 5719e6cf64df0..0000000000000 --- a/apps/docs/data/repos/postgrest-js.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 236425882, - "node_id": "MDEwOlJlcG9zaXRvcnkyMzY0MjU4ODI=", - "name": "postgrest-js", - "full_name": "supabase/postgrest-js", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/postgrest-js", - "description": "Isomorphic JavaScript client for PostgREST", - "fork": false, - "url": "https://api.github.com/repos/supabase/postgrest-js", - "forks_url": "https://api.github.com/repos/supabase/postgrest-js/forks", - "keys_url": "https://api.github.com/repos/supabase/postgrest-js/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/postgrest-js/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/postgrest-js/teams", - "hooks_url": "https://api.github.com/repos/supabase/postgrest-js/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/postgrest-js/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/postgrest-js/events", - "assignees_url": "https://api.github.com/repos/supabase/postgrest-js/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/postgrest-js/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/postgrest-js/tags", - "blobs_url": "https://api.github.com/repos/supabase/postgrest-js/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/postgrest-js/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/postgrest-js/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/postgrest-js/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/postgrest-js/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/postgrest-js/languages", - "stargazers_url": "https://api.github.com/repos/supabase/postgrest-js/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/postgrest-js/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/postgrest-js/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/postgrest-js/subscription", - "commits_url": "https://api.github.com/repos/supabase/postgrest-js/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/postgrest-js/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/postgrest-js/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/postgrest-js/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/postgrest-js/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/postgrest-js/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/postgrest-js/merges", - "archive_url": "https://api.github.com/repos/supabase/postgrest-js/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/postgrest-js/downloads", - "issues_url": "https://api.github.com/repos/supabase/postgrest-js/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/postgrest-js/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/postgrest-js/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/postgrest-js/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/postgrest-js/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/postgrest-js/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/postgrest-js/deployments", - "created_at": "2020-01-27T05:32:19Z", - "updated_at": "2020-08-23T03:34:50Z", - "pushed_at": "2020-08-23T03:34:51Z", - "git_url": "git://github.com/supabase/postgrest-js.git", - "ssh_url": "git@github.com:supabase/postgrest-js.git", - "clone_url": "https://github.com/supabase/postgrest-js.git", - "svn_url": "https://github.com/supabase/postgrest-js", - "homepage": "https://supabase.com", - "size": 3225, - "stargazers_count": 79, - "watchers_count": 79, - "language": "JavaScript", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 3, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 2, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 3, - "open_issues": 2, - "watchers": 79, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 3, - "subscribers_count": 9 -} diff --git a/apps/docs/data/repos/postgrest-py.json b/apps/docs/data/repos/postgrest-py.json deleted file mode 100644 index 0242cc79bd7cc..0000000000000 --- a/apps/docs/data/repos/postgrest-py.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "id": 263793262, - "node_id": "MDEwOlJlcG9zaXRvcnkyNjM3OTMyNjI=", - "name": "postgrest-py", - "full_name": "supabase/postgrest-py", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/postgrest-py", - "description": null, - "fork": false, - "url": "https://api.github.com/repos/supabase/postgrest-py", - "forks_url": "https://api.github.com/repos/supabase/postgrest-py/forks", - "keys_url": "https://api.github.com/repos/supabase/postgrest-py/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/postgrest-py/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/postgrest-py/teams", - "hooks_url": "https://api.github.com/repos/supabase/postgrest-py/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/postgrest-py/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/postgrest-py/events", - "assignees_url": "https://api.github.com/repos/supabase/postgrest-py/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/postgrest-py/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/postgrest-py/tags", - "blobs_url": "https://api.github.com/repos/supabase/postgrest-py/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/postgrest-py/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/postgrest-py/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/postgrest-py/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/postgrest-py/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/postgrest-py/languages", - "stargazers_url": "https://api.github.com/repos/supabase/postgrest-py/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/postgrest-py/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/postgrest-py/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/postgrest-py/subscription", - "commits_url": "https://api.github.com/repos/supabase/postgrest-py/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/postgrest-py/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/postgrest-py/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/postgrest-py/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/postgrest-py/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/postgrest-py/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/postgrest-py/merges", - "archive_url": "https://api.github.com/repos/supabase/postgrest-py/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/postgrest-py/downloads", - "issues_url": "https://api.github.com/repos/supabase/postgrest-py/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/postgrest-py/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/postgrest-py/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/postgrest-py/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/postgrest-py/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/postgrest-py/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/postgrest-py/deployments", - "created_at": "2020-05-14T02:18:24Z", - "updated_at": "2020-06-04T05:41:43Z", - "pushed_at": "2020-05-14T02:18:26Z", - "git_url": "git://github.com/supabase/postgrest-py.git", - "ssh_url": "git@github.com:supabase/postgrest-py.git", - "clone_url": "https://github.com/supabase/postgrest-py.git", - "svn_url": "https://github.com/supabase/postgrest-py", - "homepage": null, - "size": 0, - "stargazers_count": 2, - "watchers_count": 2, - "language": null, - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 0, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 0, - "license": null, - "forks": 0, - "open_issues": 0, - "watchers": 2, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 0, - "subscribers_count": 3 -} diff --git a/apps/docs/data/repos/postgrest-rs.json b/apps/docs/data/repos/postgrest-rs.json deleted file mode 100644 index bcf99e6a79805..0000000000000 --- a/apps/docs/data/repos/postgrest-rs.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 263793466, - "node_id": "MDEwOlJlcG9zaXRvcnkyNjM3OTM0NjY=", - "name": "postgrest-rs", - "full_name": "supabase/postgrest-rs", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/postgrest-rs", - "description": "Rust client for PostgREST", - "fork": false, - "url": "https://api.github.com/repos/supabase/postgrest-rs", - "forks_url": "https://api.github.com/repos/supabase/postgrest-rs/forks", - "keys_url": "https://api.github.com/repos/supabase/postgrest-rs/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/postgrest-rs/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/postgrest-rs/teams", - "hooks_url": "https://api.github.com/repos/supabase/postgrest-rs/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/postgrest-rs/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/postgrest-rs/events", - "assignees_url": "https://api.github.com/repos/supabase/postgrest-rs/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/postgrest-rs/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/postgrest-rs/tags", - "blobs_url": "https://api.github.com/repos/supabase/postgrest-rs/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/postgrest-rs/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/postgrest-rs/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/postgrest-rs/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/postgrest-rs/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/postgrest-rs/languages", - "stargazers_url": "https://api.github.com/repos/supabase/postgrest-rs/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/postgrest-rs/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/postgrest-rs/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/postgrest-rs/subscription", - "commits_url": "https://api.github.com/repos/supabase/postgrest-rs/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/postgrest-rs/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/postgrest-rs/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/postgrest-rs/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/postgrest-rs/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/postgrest-rs/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/postgrest-rs/merges", - "archive_url": "https://api.github.com/repos/supabase/postgrest-rs/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/postgrest-rs/downloads", - "issues_url": "https://api.github.com/repos/supabase/postgrest-rs/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/postgrest-rs/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/postgrest-rs/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/postgrest-rs/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/postgrest-rs/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/postgrest-rs/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/postgrest-rs/deployments", - "created_at": "2020-05-14T02:19:41Z", - "updated_at": "2020-06-23T09:29:03Z", - "pushed_at": "2020-06-10T14:01:27Z", - "git_url": "git://github.com/supabase/postgrest-rs.git", - "ssh_url": "git@github.com:supabase/postgrest-rs.git", - "clone_url": "https://github.com/supabase/postgrest-rs.git", - "svn_url": "https://github.com/supabase/postgrest-rs", - "homepage": "https://supabase.com", - "size": 49, - "stargazers_count": 28, - "watchers_count": 28, - "language": "Rust", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 1, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 1, - "license": { - "key": "other", - "name": "Other", - "spdx_id": "NOASSERTION", - "url": null, - "node_id": "MDc6TGljZW5zZTA=" - }, - "forks": 1, - "open_issues": 1, - "watchers": 28, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 1, - "subscribers_count": 4 -} diff --git a/apps/docs/data/repos/realtime-js.json b/apps/docs/data/repos/realtime-js.json deleted file mode 100644 index a961160c4bc27..0000000000000 --- a/apps/docs/data/repos/realtime-js.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 264389263, - "node_id": "MDEwOlJlcG9zaXRvcnkyNjQzODkyNjM=", - "name": "realtime-js", - "full_name": "supabase/realtime-js", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/realtime-js", - "description": null, - "fork": false, - "url": "https://api.github.com/repos/supabase/realtime-js", - "forks_url": "https://api.github.com/repos/supabase/realtime-js/forks", - "keys_url": "https://api.github.com/repos/supabase/realtime-js/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/realtime-js/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/realtime-js/teams", - "hooks_url": "https://api.github.com/repos/supabase/realtime-js/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/realtime-js/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/realtime-js/events", - "assignees_url": "https://api.github.com/repos/supabase/realtime-js/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/realtime-js/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/realtime-js/tags", - "blobs_url": "https://api.github.com/repos/supabase/realtime-js/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/realtime-js/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/realtime-js/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/realtime-js/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/realtime-js/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/realtime-js/languages", - "stargazers_url": "https://api.github.com/repos/supabase/realtime-js/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/realtime-js/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/realtime-js/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/realtime-js/subscription", - "commits_url": "https://api.github.com/repos/supabase/realtime-js/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/realtime-js/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/realtime-js/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/realtime-js/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/realtime-js/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/realtime-js/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/realtime-js/merges", - "archive_url": "https://api.github.com/repos/supabase/realtime-js/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/realtime-js/downloads", - "issues_url": "https://api.github.com/repos/supabase/realtime-js/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/realtime-js/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/realtime-js/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/realtime-js/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/realtime-js/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/realtime-js/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/realtime-js/deployments", - "created_at": "2020-05-16T08:08:00Z", - "updated_at": "2020-06-23T08:51:03Z", - "pushed_at": "2020-06-23T08:51:04Z", - "git_url": "git://github.com/supabase/realtime-js.git", - "ssh_url": "git@github.com:supabase/realtime-js.git", - "clone_url": "https://github.com/supabase/realtime-js.git", - "svn_url": "https://github.com/supabase/realtime-js", - "homepage": null, - "size": 936, - "stargazers_count": 5, - "watchers_count": 5, - "language": "JavaScript", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 1, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 1, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 1, - "open_issues": 1, - "watchers": 5, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 1, - "subscribers_count": 2 -} diff --git a/apps/docs/data/repos/realtime.json b/apps/docs/data/repos/realtime.json deleted file mode 100644 index 4c81ebe334d32..0000000000000 --- a/apps/docs/data/repos/realtime.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 210347143, - "node_id": "MDEwOlJlcG9zaXRvcnkyMTAzNDcxNDM=", - "name": "realtime", - "full_name": "supabase/realtime", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/realtime", - "description": "Listen to your PostgreSQL database in realtime via websockets. Built with Elixir.", - "fork": false, - "url": "https://api.github.com/repos/supabase/realtime", - "forks_url": "https://api.github.com/repos/supabase/realtime/forks", - "keys_url": "https://api.github.com/repos/supabase/realtime/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/realtime/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/realtime/teams", - "hooks_url": "https://api.github.com/repos/supabase/realtime/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/realtime/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/realtime/events", - "assignees_url": "https://api.github.com/repos/supabase/realtime/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/realtime/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/realtime/tags", - "blobs_url": "https://api.github.com/repos/supabase/realtime/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/realtime/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/realtime/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/realtime/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/realtime/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/realtime/languages", - "stargazers_url": "https://api.github.com/repos/supabase/realtime/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/realtime/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/realtime/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/realtime/subscription", - "commits_url": "https://api.github.com/repos/supabase/realtime/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/realtime/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/realtime/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/realtime/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/realtime/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/realtime/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/realtime/merges", - "archive_url": "https://api.github.com/repos/supabase/realtime/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/realtime/downloads", - "issues_url": "https://api.github.com/repos/supabase/realtime/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/realtime/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/realtime/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/realtime/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/realtime/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/realtime/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/realtime/deployments", - "created_at": "2019-09-23T12:15:45Z", - "updated_at": "2020-10-31T18:41:16Z", - "pushed_at": "2020-09-14T14:38:34Z", - "git_url": "git://github.com/supabase/realtime.git", - "ssh_url": "git@github.com:supabase/realtime.git", - "clone_url": "https://github.com/supabase/realtime.git", - "svn_url": "https://github.com/supabase/realtime", - "homepage": "https://supabase.com", - "size": 2322, - "stargazers_count": 1804, - "watchers_count": 1804, - "language": "Elixir", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 75, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 9, - "license": { - "key": "apache-2.0", - "name": "Apache License 2.0", - "spdx_id": "Apache-2.0", - "url": "https://api.github.com/licenses/apache-2.0", - "node_id": "MDc6TGljZW5zZTI=" - }, - "forks": 75, - "open_issues": 9, - "watchers": 1804, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 75, - "subscribers_count": 53 -} diff --git a/apps/docs/data/repos/schemas.json b/apps/docs/data/repos/schemas.json deleted file mode 100644 index ad700b16090e4..0000000000000 --- a/apps/docs/data/repos/schemas.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "message": "Moved Permanently", - "url": "https://api.github.com/repositories/231560476", - "documentation_url": "https://developer.github.com/v3/#http-redirects" -} diff --git a/apps/docs/data/repos/supabase-js.json b/apps/docs/data/repos/supabase-js.json deleted file mode 100644 index 319b839f8d755..0000000000000 --- a/apps/docs/data/repos/supabase-js.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 264192686, - "node_id": "MDEwOlJlcG9zaXRvcnkyNjQxOTI2ODY=", - "name": "supabase-js", - "full_name": "supabase/supabase-js", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/supabase-js", - "description": null, - "fork": false, - "url": "https://api.github.com/repos/supabase/supabase-js", - "forks_url": "https://api.github.com/repos/supabase/supabase-js/forks", - "keys_url": "https://api.github.com/repos/supabase/supabase-js/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/supabase-js/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/supabase-js/teams", - "hooks_url": "https://api.github.com/repos/supabase/supabase-js/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/supabase-js/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/supabase-js/events", - "assignees_url": "https://api.github.com/repos/supabase/supabase-js/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/supabase-js/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/supabase-js/tags", - "blobs_url": "https://api.github.com/repos/supabase/supabase-js/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/supabase-js/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/supabase-js/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/supabase-js/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/supabase-js/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/supabase-js/languages", - "stargazers_url": "https://api.github.com/repos/supabase/supabase-js/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/supabase-js/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/supabase-js/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/supabase-js/subscription", - "commits_url": "https://api.github.com/repos/supabase/supabase-js/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/supabase-js/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/supabase-js/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/supabase-js/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/supabase-js/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/supabase-js/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/supabase-js/merges", - "archive_url": "https://api.github.com/repos/supabase/supabase-js/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/supabase-js/downloads", - "issues_url": "https://api.github.com/repos/supabase/supabase-js/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/supabase-js/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/supabase-js/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/supabase-js/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/supabase-js/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/supabase-js/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/supabase-js/deployments", - "created_at": "2020-05-15T12:52:16Z", - "updated_at": "2020-06-11T08:30:37Z", - "pushed_at": "2020-06-12T14:52:51Z", - "git_url": "git://github.com/supabase/supabase-js.git", - "ssh_url": "git@github.com:supabase/supabase-js.git", - "clone_url": "https://github.com/supabase/supabase-js.git", - "svn_url": "https://github.com/supabase/supabase-js", - "homepage": null, - "size": 15, - "stargazers_count": 7, - "watchers_count": 7, - "language": "JavaScript", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 1, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 0, - "license": { - "key": "mit", - "name": "MIT License", - "spdx_id": "MIT", - "url": "https://api.github.com/licenses/mit", - "node_id": "MDc6TGljZW5zZTEz" - }, - "forks": 1, - "open_issues": 0, - "watchers": 7, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 1, - "subscribers_count": 0 -} diff --git a/apps/docs/data/repos/supabase.json b/apps/docs/data/repos/supabase.json deleted file mode 100644 index fed023886f738..0000000000000 --- a/apps/docs/data/repos/supabase.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "id": 214587193, - "node_id": "MDEwOlJlcG9zaXRvcnkyMTQ1ODcxOTM=", - "name": "supabase", - "full_name": "supabase/supabase", - "private": false, - "owner": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "html_url": "https://github.com/supabase/supabase", - "description": "Website, docs, and client libraries. Follow to stay updated about our public Beta.", - "fork": false, - "url": "https://api.github.com/repos/supabase/supabase", - "forks_url": "https://api.github.com/repos/supabase/supabase/forks", - "keys_url": "https://api.github.com/repos/supabase/supabase/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/supabase/supabase/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/supabase/supabase/teams", - "hooks_url": "https://api.github.com/repos/supabase/supabase/hooks", - "issue_events_url": "https://api.github.com/repos/supabase/supabase/issues/events{/number}", - "events_url": "https://api.github.com/repos/supabase/supabase/events", - "assignees_url": "https://api.github.com/repos/supabase/supabase/assignees{/user}", - "branches_url": "https://api.github.com/repos/supabase/supabase/branches{/branch}", - "tags_url": "https://api.github.com/repos/supabase/supabase/tags", - "blobs_url": "https://api.github.com/repos/supabase/supabase/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/supabase/supabase/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/supabase/supabase/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/supabase/supabase/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/supabase/supabase/statuses/{sha}", - "languages_url": "https://api.github.com/repos/supabase/supabase/languages", - "stargazers_url": "https://api.github.com/repos/supabase/supabase/stargazers", - "contributors_url": "https://api.github.com/repos/supabase/supabase/contributors", - "subscribers_url": "https://api.github.com/repos/supabase/supabase/subscribers", - "subscription_url": "https://api.github.com/repos/supabase/supabase/subscription", - "commits_url": "https://api.github.com/repos/supabase/supabase/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/supabase/supabase/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/supabase/supabase/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/supabase/supabase/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/supabase/supabase/contents/{+path}", - "compare_url": "https://api.github.com/repos/supabase/supabase/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/supabase/supabase/merges", - "archive_url": "https://api.github.com/repos/supabase/supabase/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/supabase/supabase/downloads", - "issues_url": "https://api.github.com/repos/supabase/supabase/issues{/number}", - "pulls_url": "https://api.github.com/repos/supabase/supabase/pulls{/number}", - "milestones_url": "https://api.github.com/repos/supabase/supabase/milestones{/number}", - "notifications_url": "https://api.github.com/repos/supabase/supabase/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/supabase/supabase/labels{/name}", - "releases_url": "https://api.github.com/repos/supabase/supabase/releases{/id}", - "deployments_url": "https://api.github.com/repos/supabase/supabase/deployments", - "created_at": "2019-10-12T05:56:49Z", - "updated_at": "2020-11-01T18:31:33Z", - "pushed_at": "2020-10-30T20:22:07Z", - "git_url": "git://github.com/supabase/supabase.git", - "ssh_url": "git@github.com:supabase/supabase.git", - "clone_url": "https://github.com/supabase/supabase.git", - "svn_url": "https://github.com/supabase/supabase", - "homepage": "https://supabase.com", - "size": 31094, - "stargazers_count": 2551, - "watchers_count": 2551, - "language": "JavaScript", - "has_issues": true, - "has_projects": true, - "has_downloads": true, - "has_wiki": true, - "has_pages": false, - "forks_count": 101, - "mirror_url": null, - "archived": false, - "disabled": false, - "open_issues_count": 30, - "license": { - "key": "apache-2.0", - "name": "Apache License 2.0", - "spdx_id": "Apache-2.0", - "url": "https://api.github.com/licenses/apache-2.0", - "node_id": "MDc6TGljZW5zZTI=" - }, - "forks": 101, - "open_issues": 30, - "watchers": 2551, - "default_branch": "master", - "temp_clone_token": null, - "organization": { - "login": "supabase", - "id": 54469796, - "node_id": "MDEyOk9yZ2FuaXphdGlvbjU0NDY5Nzk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/54469796?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/supabase", - "html_url": "https://github.com/supabase", - "followers_url": "https://api.github.com/users/supabase/followers", - "following_url": "https://api.github.com/users/supabase/following{/other_user}", - "gists_url": "https://api.github.com/users/supabase/gists{/gist_id}", - "starred_url": "https://api.github.com/users/supabase/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/supabase/subscriptions", - "organizations_url": "https://api.github.com/users/supabase/orgs", - "repos_url": "https://api.github.com/users/supabase/repos", - "events_url": "https://api.github.com/users/supabase/events{/privacy}", - "received_events_url": "https://api.github.com/users/supabase/received_events", - "type": "Organization", - "site_admin": false - }, - "network_count": 101, - "subscribers_count": 91 -} diff --git a/apps/docs/data/showcase.json b/apps/docs/data/showcase.json deleted file mode 100644 index fe51488c7066f..0000000000000 --- a/apps/docs/data/showcase.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/apps/docs/data/stars/stargazers.json b/apps/docs/data/stars/stargazers.json deleted file mode 100644 index a9336259f17e7..0000000000000 --- a/apps/docs/data/stars/stargazers.json +++ /dev/null @@ -1,2562 +0,0 @@ -[ - { - "name": "2019-10-15", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 0, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-10-25", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 33, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-10-26", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 41, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-10-27", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 46, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-10-28", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 51, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-10-29", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 52, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-10-30", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 53, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-10-31", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 54, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-11-03", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 55, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-11-09", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 58, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-11-10", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 59, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-11-11", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 60, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-11-21", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 61, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-11-23", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 62, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-12-10", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 63, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-12-13", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 64, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-12-17", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 157, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-12-18", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 171, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-12-19", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 174, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-12-20", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 177, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-12-21", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 179, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-12-23", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 180, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2019-12-29", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 181, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2020-01-07", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 182, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2020-01-11", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 183, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2020-01-14", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 184, - "realtime-js": 0, - "supabase": 1, - "supabase-js": 0 - }, - { - "name": "2020-01-15", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 0, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 184, - "realtime-js": 0, - "supabase": 2, - "supabase-js": 0 - }, - { - "name": "2020-01-16", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 2, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 193, - "realtime-js": 0, - "supabase": 16, - "supabase-js": 0 - }, - { - "name": "2020-01-17", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 2, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 194, - "realtime-js": 0, - "supabase": 17, - "supabase-js": 0 - }, - { - "name": "2020-01-18", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 2, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 195, - "realtime-js": 0, - "supabase": 19, - "supabase-js": 0 - }, - { - "name": "2020-01-19", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 2, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 195, - "realtime-js": 0, - "supabase": 20, - "supabase-js": 0 - }, - { - "name": "2020-01-20", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 2, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 196, - "realtime-js": 0, - "supabase": 21, - "supabase-js": 0 - }, - { - "name": "2020-01-21", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 2, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 201, - "realtime-js": 0, - "supabase": 28, - "supabase-js": 0 - }, - { - "name": "2020-01-22", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 2, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 272, - "realtime-js": 0, - "supabase": 45, - "supabase-js": 0 - }, - { - "name": "2020-01-23", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 4, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 301, - "realtime-js": 0, - "supabase": 55, - "supabase-js": 0 - }, - { - "name": "2020-01-24", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 4, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 321, - "realtime-js": 0, - "supabase": 57, - "supabase-js": 0 - }, - { - "name": "2020-01-25", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 4, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 325, - "realtime-js": 0, - "supabase": 59, - "supabase-js": 0 - }, - { - "name": "2020-01-26", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 4, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 328, - "realtime-js": 0, - "supabase": 59, - "supabase-js": 0 - }, - { - "name": "2020-01-27", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 5, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 331, - "realtime-js": 0, - "supabase": 60, - "supabase-js": 0 - }, - { - "name": "2020-01-28", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 5, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 0, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 334, - "realtime-js": 0, - "supabase": 62, - "supabase-js": 0 - }, - { - "name": "2020-01-29", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 5, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 1, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 342, - "realtime-js": 0, - "supabase": 62, - "supabase-js": 0 - }, - { - "name": "2020-01-30", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 5, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 2, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 346, - "realtime-js": 0, - "supabase": 63, - "supabase-js": 0 - }, - { - "name": "2020-01-31", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 5, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 2, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 350, - "realtime-js": 0, - "supabase": 65, - "supabase-js": 0 - }, - { - "name": "2020-02-01", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 5, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 2, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 351, - "realtime-js": 0, - "supabase": 67, - "supabase-js": 0 - }, - { - "name": "2020-02-02", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 7, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 353, - "realtime-js": 0, - "supabase": 70, - "supabase-js": 0 - }, - { - "name": "2020-02-03", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 19, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 354, - "realtime-js": 0, - "supabase": 72, - "supabase-js": 0 - }, - { - "name": "2020-02-04", - "doctest-js": 0, - "jsdoc-template": 0, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 22, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 354, - "realtime-js": 0, - "supabase": 72, - "supabase-js": 0 - }, - { - "name": "2020-02-05", - "doctest-js": 1, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 24, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 354, - "realtime-js": 0, - "supabase": 73, - "supabase-js": 0 - }, - { - "name": "2020-02-10", - "doctest-js": 1, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 354, - "realtime-js": 0, - "supabase": 73, - "supabase-js": 0 - }, - { - "name": "2020-02-11", - "doctest-js": 1, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 355, - "realtime-js": 0, - "supabase": 73, - "supabase-js": 0 - }, - { - "name": "2020-02-14", - "doctest-js": 1, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 356, - "realtime-js": 0, - "supabase": 73, - "supabase-js": 0 - }, - { - "name": "2020-02-16", - "doctest-js": 1, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 357, - "realtime-js": 0, - "supabase": 73, - "supabase-js": 0 - }, - { - "name": "2020-02-19", - "doctest-js": 1, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 364, - "realtime-js": 0, - "supabase": 73, - "supabase-js": 0 - }, - { - "name": "2020-02-20", - "doctest-js": 1, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 365, - "realtime-js": 0, - "supabase": 73, - "supabase-js": 0 - }, - { - "name": "2020-02-21", - "doctest-js": 1, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 366, - "realtime-js": 0, - "supabase": 73, - "supabase-js": 0 - }, - { - "name": "2020-02-22", - "doctest-js": 3, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 366, - "realtime-js": 0, - "supabase": 73, - "supabase-js": 0 - }, - { - "name": "2020-02-23", - "doctest-js": 10, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 367, - "realtime-js": 0, - "supabase": 73, - "supabase-js": 0 - }, - { - "name": "2020-02-24", - "doctest-js": 12, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 368, - "realtime-js": 0, - "supabase": 74, - "supabase-js": 0 - }, - { - "name": "2020-02-25", - "doctest-js": 15, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 369, - "realtime-js": 0, - "supabase": 74, - "supabase-js": 0 - }, - { - "name": "2020-02-26", - "doctest-js": 18, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 370, - "realtime-js": 0, - "supabase": 75, - "supabase-js": 0 - }, - { - "name": "2020-02-27", - "doctest-js": 18, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 371, - "realtime-js": 0, - "supabase": 75, - "supabase-js": 0 - }, - { - "name": "2020-02-28", - "doctest-js": 19, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 371, - "realtime-js": 0, - "supabase": 75, - "supabase-js": 0 - }, - { - "name": "2020-02-29", - "doctest-js": 19, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 25, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 371, - "realtime-js": 0, - "supabase": 76, - "supabase-js": 0 - }, - { - "name": "2020-03-02", - "doctest-js": 19, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 26, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 372, - "realtime-js": 0, - "supabase": 76, - "supabase-js": 0 - }, - { - "name": "2020-03-06", - "doctest-js": 19, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 26, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 373, - "realtime-js": 0, - "supabase": 77, - "supabase-js": 0 - }, - { - "name": "2020-03-07", - "doctest-js": 19, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 26, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 374, - "realtime-js": 0, - "supabase": 77, - "supabase-js": 0 - }, - { - "name": "2020-03-08", - "doctest-js": 20, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 26, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 374, - "realtime-js": 0, - "supabase": 77, - "supabase-js": 0 - }, - { - "name": "2020-03-09", - "doctest-js": 21, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 26, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 374, - "realtime-js": 0, - "supabase": 78, - "supabase-js": 0 - }, - { - "name": "2020-03-10", - "doctest-js": 21, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 26, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 375, - "realtime-js": 0, - "supabase": 78, - "supabase-js": 0 - }, - { - "name": "2020-03-11", - "doctest-js": 21, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 26, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 376, - "realtime-js": 0, - "supabase": 80, - "supabase-js": 0 - }, - { - "name": "2020-03-12", - "doctest-js": 21, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 26, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 376, - "realtime-js": 0, - "supabase": 81, - "supabase-js": 0 - }, - { - "name": "2020-03-13", - "doctest-js": 21, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 27, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 376, - "realtime-js": 0, - "supabase": 81, - "supabase-js": 0 - }, - { - "name": "2020-03-14", - "doctest-js": 22, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 27, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 377, - "realtime-js": 0, - "supabase": 81, - "supabase-js": 0 - }, - { - "name": "2020-03-15", - "doctest-js": 23, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 27, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 377, - "realtime-js": 0, - "supabase": 81, - "supabase-js": 0 - }, - { - "name": "2020-03-19", - "doctest-js": 23, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 27, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 379, - "realtime-js": 0, - "supabase": 82, - "supabase-js": 0 - }, - { - "name": "2020-03-21", - "doctest-js": 23, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 27, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 379, - "realtime-js": 0, - "supabase": 83, - "supabase-js": 0 - }, - { - "name": "2020-03-22", - "doctest-js": 27, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 28, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 382, - "realtime-js": 0, - "supabase": 83, - "supabase-js": 0 - }, - { - "name": "2020-03-24", - "doctest-js": 27, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 28, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 383, - "realtime-js": 0, - "supabase": 83, - "supabase-js": 0 - }, - { - "name": "2020-03-25", - "doctest-js": 28, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 28, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 384, - "realtime-js": 0, - "supabase": 83, - "supabase-js": 0 - }, - { - "name": "2020-03-26", - "doctest-js": 28, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 28, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 385, - "realtime-js": 0, - "supabase": 84, - "supabase-js": 0 - }, - { - "name": "2020-03-27", - "doctest-js": 28, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 28, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 386, - "realtime-js": 0, - "supabase": 84, - "supabase-js": 0 - }, - { - "name": "2020-03-29", - "doctest-js": 28, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 28, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 386, - "realtime-js": 0, - "supabase": 85, - "supabase-js": 0 - }, - { - "name": "2020-03-30", - "doctest-js": 28, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 28, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 387, - "realtime-js": 0, - "supabase": 85, - "supabase-js": 0 - }, - { - "name": "2020-03-31", - "doctest-js": 28, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 29, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 387, - "realtime-js": 0, - "supabase": 86, - "supabase-js": 0 - }, - { - "name": "2020-04-01", - "doctest-js": 28, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 30, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 388, - "realtime-js": 0, - "supabase": 86, - "supabase-js": 0 - }, - { - "name": "2020-04-04", - "doctest-js": 28, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 389, - "realtime-js": 0, - "supabase": 100, - "supabase-js": 0 - }, - { - "name": "2020-04-05", - "doctest-js": 28, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 391, - "realtime-js": 0, - "supabase": 109, - "supabase-js": 0 - }, - { - "name": "2020-04-06", - "doctest-js": 29, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 392, - "realtime-js": 0, - "supabase": 109, - "supabase-js": 0 - }, - { - "name": "2020-04-08", - "doctest-js": 29, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 392, - "realtime-js": 0, - "supabase": 110, - "supabase-js": 0 - }, - { - "name": "2020-04-10", - "doctest-js": 29, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 393, - "realtime-js": 0, - "supabase": 111, - "supabase-js": 0 - }, - { - "name": "2020-04-11", - "doctest-js": 30, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 393, - "realtime-js": 0, - "supabase": 111, - "supabase-js": 0 - }, - { - "name": "2020-04-12", - "doctest-js": 31, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 393, - "realtime-js": 0, - "supabase": 111, - "supabase-js": 0 - }, - { - "name": "2020-04-15", - "doctest-js": 31, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 396, - "realtime-js": 0, - "supabase": 141, - "supabase-js": 0 - }, - { - "name": "2020-04-16", - "doctest-js": 31, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 398, - "realtime-js": 0, - "supabase": 148, - "supabase-js": 0 - }, - { - "name": "2020-04-18", - "doctest-js": 31, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 398, - "realtime-js": 0, - "supabase": 149, - "supabase-js": 0 - }, - { - "name": "2020-04-19", - "doctest-js": 31, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 0, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 399, - "realtime-js": 0, - "supabase": 149, - "supabase-js": 0 - }, - { - "name": "2020-04-21", - "doctest-js": 31, - "jsdoc-template": 1, - "marketplace": 6, - "pg-api": 0, - "pg_listen": 0, - "postgres": 1, - "postgrest-js": 31, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 399, - "realtime-js": 0, - "supabase": 149, - "supabase-js": 0 - }, - { - "name": "2020-04-22", - "doctest-js": 32, - "jsdoc-template": 2, - "marketplace": 7, - "pg-api": 0, - "pg_listen": 0, - "postgres": 2, - "postgrest-js": 32, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 400, - "realtime-js": 0, - "supabase": 149, - "supabase-js": 0 - }, - { - "name": "2020-04-23", - "doctest-js": 32, - "jsdoc-template": 2, - "marketplace": 7, - "pg-api": 0, - "pg_listen": 0, - "postgres": 2, - "postgrest-js": 36, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 400, - "realtime-js": 0, - "supabase": 149, - "supabase-js": 0 - }, - { - "name": "2020-04-24", - "doctest-js": 32, - "jsdoc-template": 2, - "marketplace": 7, - "pg-api": 0, - "pg_listen": 0, - "postgres": 2, - "postgrest-js": 37, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 400, - "realtime-js": 0, - "supabase": 149, - "supabase-js": 0 - }, - { - "name": "2020-04-25", - "doctest-js": 32, - "jsdoc-template": 2, - "marketplace": 7, - "pg-api": 0, - "pg_listen": 0, - "postgres": 2, - "postgrest-js": 39, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 400, - "realtime-js": 0, - "supabase": 149, - "supabase-js": 0 - }, - { - "name": "2020-04-27", - "doctest-js": 32, - "jsdoc-template": 2, - "marketplace": 7, - "pg-api": 0, - "pg_listen": 0, - "postgres": 2, - "postgrest-js": 39, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 400, - "realtime-js": 0, - "supabase": 150, - "supabase-js": 0 - }, - { - "name": "2020-04-28", - "doctest-js": 32, - "jsdoc-template": 2, - "marketplace": 7, - "pg-api": 0, - "pg_listen": 0, - "postgres": 2, - "postgrest-js": 39, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 401, - "realtime-js": 0, - "supabase": 151, - "supabase-js": 0 - }, - { - "name": "2020-04-29", - "doctest-js": 33, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 5, - "postgrest-js": 39, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 419, - "realtime-js": 0, - "supabase": 151, - "supabase-js": 0 - }, - { - "name": "2020-04-30", - "doctest-js": 33, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 10, - "postgrest-js": 39, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 420, - "realtime-js": 0, - "supabase": 156, - "supabase-js": 0 - }, - { - "name": "2020-05-01", - "doctest-js": 33, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 14, - "postgrest-js": 39, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 488, - "realtime-js": 0, - "supabase": 158, - "supabase-js": 0 - }, - { - "name": "2020-05-02", - "doctest-js": 33, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 15, - "postgrest-js": 39, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 515, - "realtime-js": 0, - "supabase": 165, - "supabase-js": 0 - }, - { - "name": "2020-05-03", - "doctest-js": 33, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 15, - "postgrest-js": 39, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 525, - "realtime-js": 0, - "supabase": 167, - "supabase-js": 0 - }, - { - "name": "2020-05-04", - "doctest-js": 33, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 15, - "postgrest-js": 39, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 534, - "realtime-js": 0, - "supabase": 167, - "supabase-js": 0 - }, - { - "name": "2020-05-05", - "doctest-js": 33, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 15, - "postgrest-js": 40, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 542, - "realtime-js": 0, - "supabase": 168, - "supabase-js": 0 - }, - { - "name": "2020-05-06", - "doctest-js": 33, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 15, - "postgrest-js": 40, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 544, - "realtime-js": 0, - "supabase": 168, - "supabase-js": 0 - }, - { - "name": "2020-05-07", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 15, - "postgrest-js": 40, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 547, - "realtime-js": 0, - "supabase": 171, - "supabase-js": 0 - }, - { - "name": "2020-05-08", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 16, - "postgrest-js": 40, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 548, - "realtime-js": 0, - "supabase": 178, - "supabase-js": 0 - }, - { - "name": "2020-05-09", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 17, - "postgrest-js": 40, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 550, - "realtime-js": 0, - "supabase": 181, - "supabase-js": 0 - }, - { - "name": "2020-05-10", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 17, - "postgrest-js": 40, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 551, - "realtime-js": 0, - "supabase": 183, - "supabase-js": 0 - }, - { - "name": "2020-05-11", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 8, - "pg-api": 0, - "pg_listen": 0, - "postgres": 18, - "postgrest-js": 40, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 552, - "realtime-js": 0, - "supabase": 189, - "supabase-js": 0 - }, - { - "name": "2020-05-12", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 0, - "pg_listen": 0, - "postgres": 19, - "postgrest-js": 41, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 554, - "realtime-js": 0, - "supabase": 192, - "supabase-js": 0 - }, - { - "name": "2020-05-13", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 0, - "pg_listen": 0, - "postgres": 19, - "postgrest-js": 41, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 555, - "realtime-js": 0, - "supabase": 193, - "supabase-js": 0 - }, - { - "name": "2020-05-14", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 0, - "pg_listen": 0, - "postgres": 19, - "postgrest-js": 41, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 556, - "realtime-js": 0, - "supabase": 193, - "supabase-js": 0 - }, - { - "name": "2020-05-15", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 0, - "pg_listen": 0, - "postgres": 19, - "postgrest-js": 42, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 556, - "realtime-js": 0, - "supabase": 194, - "supabase-js": 0 - }, - { - "name": "2020-05-16", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 0, - "pg_listen": 0, - "postgres": 19, - "postgrest-js": 42, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 556, - "realtime-js": 0, - "supabase": 195, - "supabase-js": 0 - }, - { - "name": "2020-05-17", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 0, - "pg_listen": 0, - "postgres": 20, - "postgrest-js": 42, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 556, - "realtime-js": 1, - "supabase": 197, - "supabase-js": 0 - }, - { - "name": "2020-05-18", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 0, - "pg_listen": 0, - "postgres": 20, - "postgrest-js": 42, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 556, - "realtime-js": 1, - "supabase": 199, - "supabase-js": 0 - }, - { - "name": "2020-05-19", - "doctest-js": 34, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 0, - "pg_listen": 0, - "postgres": 21, - "postgrest-js": 42, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 558, - "realtime-js": 1, - "supabase": 200, - "supabase-js": 0 - }, - { - "name": "2020-05-20", - "doctest-js": 36, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 0, - "pg_listen": 0, - "postgres": 21, - "postgrest-js": 42, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 558, - "realtime-js": 1, - "supabase": 200, - "supabase-js": 0 - }, - { - "name": "2020-05-21", - "doctest-js": 36, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 1, - "pg_listen": 0, - "postgres": 21, - "postgrest-js": 42, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 559, - "realtime-js": 1, - "supabase": 201, - "supabase-js": 0 - }, - { - "name": "2020-05-23", - "doctest-js": 36, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 1, - "pg_listen": 0, - "postgres": 21, - "postgrest-js": 44, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 561, - "realtime-js": 1, - "supabase": 202, - "supabase-js": 0 - }, - { - "name": "2020-05-24", - "doctest-js": 36, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 1, - "pg_listen": 0, - "postgres": 21, - "postgrest-js": 44, - "postgrest-py": 0, - "postgrest-rs": 0, - "realtime": 562, - "realtime-js": 1, - "supabase": 204, - "supabase-js": 0 - }, - { - "name": "2020-05-25", - "doctest-js": 36, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 1, - "pg_listen": 0, - "postgres": 21, - "postgrest-js": 44, - "postgrest-py": 0, - "postgrest-rs": 1, - "realtime": 563, - "realtime-js": 1, - "supabase": 204, - "supabase-js": 0 - }, - { - "name": "2020-05-26", - "doctest-js": 36, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 1, - "pg_listen": 0, - "postgres": 23, - "postgrest-js": 45, - "postgrest-py": 0, - "postgrest-rs": 1, - "realtime": 563, - "realtime-js": 1, - "supabase": 204, - "supabase-js": 0 - }, - { - "name": "2020-05-27", - "doctest-js": 36, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 15, - "pg_listen": 0, - "postgres": 56, - "postgrest-js": 53, - "postgrest-py": 1, - "postgrest-rs": 5, - "realtime": 725, - "realtime-js": 1, - "supabase": 734, - "supabase-js": 2 - }, - { - "name": "2020-05-28", - "doctest-js": 37, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 23, - "pg_listen": 0, - "postgres": 75, - "postgrest-js": 59, - "postgrest-py": 1, - "postgrest-rs": 5, - "realtime": 791, - "realtime-js": 3, - "supabase": 1027, - "supabase-js": 3 - }, - { - "name": "2020-05-29", - "doctest-js": 37, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 24, - "pg_listen": 0, - "postgres": 80, - "postgrest-js": 59, - "postgrest-py": 1, - "postgrest-rs": 5, - "realtime": 822, - "realtime-js": 3, - "supabase": 1166, - "supabase-js": 3 - }, - { - "name": "2020-05-30", - "doctest-js": 37, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 24, - "pg_listen": 0, - "postgres": 82, - "postgrest-js": 60, - "postgrest-py": 1, - "postgrest-rs": 6, - "realtime": 834, - "realtime-js": 3, - "supabase": 1217, - "supabase-js": 3 - }, - { - "name": "2020-05-31", - "doctest-js": 37, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 24, - "pg_listen": 0, - "postgres": 83, - "postgrest-js": 60, - "postgrest-py": 1, - "postgrest-rs": 6, - "realtime": 859, - "realtime-js": 3, - "supabase": 1262, - "supabase-js": 3 - }, - { - "name": "2020-06-01", - "doctest-js": 37, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 25, - "pg_listen": 0, - "postgres": 87, - "postgrest-js": 61, - "postgrest-py": 1, - "postgrest-rs": 6, - "realtime": 915, - "realtime-js": 3, - "supabase": 1321, - "supabase-js": 5 - }, - { - "name": "2020-06-02", - "doctest-js": 38, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 26, - "pg_listen": 0, - "postgres": 87, - "postgrest-js": 64, - "postgrest-py": 1, - "postgrest-rs": 6, - "realtime": 1084, - "realtime-js": 3, - "supabase": 1375, - "supabase-js": 5 - }, - { - "name": "2020-06-03", - "doctest-js": 38, - "jsdoc-template": 2, - "marketplace": 9, - "pg-api": 27, - "pg_listen": 0, - "postgres": 90, - "postgrest-js": 64, - "postgrest-py": 1, - "postgrest-rs": 6, - "realtime": 1255, - "realtime-js": 3, - "supabase": 1429, - "supabase-js": 5 - }, - { - "name": "2020-06-04", - "doctest-js": 39, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 28, - "pg_listen": 0, - "postgres": 91, - "postgrest-js": 66, - "postgrest-py": 2, - "postgrest-rs": 7, - "realtime": 1357, - "realtime-js": 4, - "supabase": 1490, - "supabase-js": 6 - }, - { - "name": "2020-06-05", - "doctest-js": 39, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 28, - "pg_listen": 0, - "postgres": 92, - "postgrest-js": 66, - "postgrest-py": 2, - "postgrest-rs": 7, - "realtime": 1388, - "realtime-js": 4, - "supabase": 1528, - "supabase-js": 6 - }, - { - "name": "2020-06-06", - "doctest-js": 39, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 28, - "pg_listen": 0, - "postgres": 92, - "postgrest-js": 67, - "postgrest-py": 2, - "postgrest-rs": 7, - "realtime": 1399, - "realtime-js": 4, - "supabase": 1542, - "supabase-js": 6 - }, - { - "name": "2020-06-07", - "doctest-js": 39, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 29, - "pg_listen": 0, - "postgres": 95, - "postgrest-js": 68, - "postgrest-py": 2, - "postgrest-rs": 7, - "realtime": 1404, - "realtime-js": 5, - "supabase": 1553, - "supabase-js": 6 - }, - { - "name": "2020-06-08", - "doctest-js": 39, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 30, - "pg_listen": 0, - "postgres": 97, - "postgrest-js": 68, - "postgrest-py": 2, - "postgrest-rs": 7, - "realtime": 1419, - "realtime-js": 5, - "supabase": 1588, - "supabase-js": 6 - }, - { - "name": "2020-06-09", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 30, - "pg_listen": 0, - "postgres": 97, - "postgrest-js": 68, - "postgrest-py": 2, - "postgrest-rs": 7, - "realtime": 1431, - "realtime-js": 5, - "supabase": 1604, - "supabase-js": 6 - }, - { - "name": "2020-06-10", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 31, - "pg_listen": 0, - "postgres": 97, - "postgrest-js": 69, - "postgrest-py": 2, - "postgrest-rs": 10, - "realtime": 1444, - "realtime-js": 5, - "supabase": 1616, - "supabase-js": 7 - }, - { - "name": "2020-06-11", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 31, - "pg_listen": 0, - "postgres": 97, - "postgrest-js": 69, - "postgrest-py": 2, - "postgrest-rs": 17, - "realtime": 1445, - "realtime-js": 5, - "supabase": 1631, - "supabase-js": 7 - }, - { - "name": "2020-06-12", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 31, - "pg_listen": 0, - "postgres": 98, - "postgrest-js": 70, - "postgrest-py": 2, - "postgrest-rs": 25, - "realtime": 1451, - "realtime-js": 5, - "supabase": 1637, - "supabase-js": 7 - }, - { - "name": "2020-06-13", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 32, - "pg_listen": 0, - "postgres": 98, - "postgrest-js": 70, - "postgrest-py": 2, - "postgrest-rs": 25, - "realtime": 1453, - "realtime-js": 5, - "supabase": 1643, - "supabase-js": 7 - }, - { - "name": "2020-06-14", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 32, - "pg_listen": 0, - "postgres": 98, - "postgrest-js": 70, - "postgrest-py": 2, - "postgrest-rs": 25, - "realtime": 1459, - "realtime-js": 5, - "supabase": 1651, - "supabase-js": 7 - }, - { - "name": "2020-06-15", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 32, - "pg_listen": 0, - "postgres": 98, - "postgrest-js": 70, - "postgrest-py": 2, - "postgrest-rs": 26, - "realtime": 1467, - "realtime-js": 5, - "supabase": 1660, - "supabase-js": 7 - }, - { - "name": "2020-06-16", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 34, - "pg_listen": 0, - "postgres": 99, - "postgrest-js": 70, - "postgrest-py": 2, - "postgrest-rs": 26, - "realtime": 1472, - "realtime-js": 5, - "supabase": 1663, - "supabase-js": 7 - }, - { - "name": "2020-06-17", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 34, - "pg_listen": 0, - "postgres": 99, - "postgrest-js": 70, - "postgrest-py": 2, - "postgrest-rs": 26, - "realtime": 1475, - "realtime-js": 5, - "supabase": 1668, - "supabase-js": 7 - }, - { - "name": "2020-06-18", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 34, - "pg_listen": 0, - "postgres": 100, - "postgrest-js": 70, - "postgrest-py": 2, - "postgrest-rs": 27, - "realtime": 1476, - "realtime-js": 5, - "supabase": 1678, - "supabase-js": 7 - }, - { - "name": "2020-06-19", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 34, - "pg_listen": 0, - "postgres": 101, - "postgrest-js": 70, - "postgrest-py": 2, - "postgrest-rs": 27, - "realtime": 1479, - "realtime-js": 5, - "supabase": 1682, - "supabase-js": 7 - }, - { - "name": "2020-06-20", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 34, - "pg_listen": 0, - "postgres": 101, - "postgrest-js": 71, - "postgrest-py": 2, - "postgrest-rs": 27, - "realtime": 1480, - "realtime-js": 5, - "supabase": 1688, - "supabase-js": 7 - }, - { - "name": "2020-06-21", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 35, - "pg_listen": 0, - "postgres": 101, - "postgrest-js": 71, - "postgrest-py": 2, - "postgrest-rs": 27, - "realtime": 1482, - "realtime-js": 5, - "supabase": 1697, - "supabase-js": 7 - }, - { - "name": "2020-06-22", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 35, - "pg_listen": 0, - "postgres": 101, - "postgrest-js": 71, - "postgrest-py": 2, - "postgrest-rs": 27, - "realtime": 1488, - "realtime-js": 5, - "supabase": 1703, - "supabase-js": 7 - }, - { - "name": "2020-06-23", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 35, - "pg_listen": 0, - "postgres": 101, - "postgrest-js": 71, - "postgrest-py": 2, - "postgrest-rs": 28, - "realtime": 1491, - "realtime-js": 5, - "supabase": 1713, - "supabase-js": 7 - }, - { - "name": "2020-06-24", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 36, - "pg_listen": 0, - "postgres": 101, - "postgrest-js": 71, - "postgrest-py": 2, - "postgrest-rs": 28, - "realtime": 1494, - "realtime-js": 5, - "supabase": 1718, - "supabase-js": 7 - }, - { - "name": "2020-06-25", - "doctest-js": 41, - "jsdoc-template": 2, - "marketplace": 10, - "pg-api": 36, - "pg_listen": 0, - "postgres": 101, - "postgrest-js": 71, - "postgrest-py": 2, - "postgrest-rs": 28, - "realtime": 1496, - "realtime-js": 5, - "supabase": 1724, - "supabase-js": 7 - } -] diff --git a/apps/docs/docs/.gitkeep b/apps/docs/docs/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/apps/docs/docs/ref/README.md b/apps/docs/docs/ref/README.md deleted file mode 100644 index 3b50031fdf487..0000000000000 --- a/apps/docs/docs/ref/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# 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 deleted file mode 100644 index 70bb75ee9f68e..0000000000000 --- a/apps/docs/docs/ref/api/api.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -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/global-flags.mdx b/apps/docs/docs/ref/cli/global-flags.mdx deleted file mode 100644 index 088a10a07a0f2..0000000000000 --- a/apps/docs/docs/ref/cli/global-flags.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Global Flags -subtitle: 'Supabase CLI supports global flags for every command.' -description: 'Supabase CLI supports global flags for every command.' ---- - -Supabase CLI supports global flags for every command. - - diff --git a/apps/docs/docs/ref/cli/introduction.mdx b/apps/docs/docs/ref/cli/introduction.mdx deleted file mode 100644 index 010c563ea35e6..0000000000000 --- a/apps/docs/docs/ref/cli/introduction.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -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 init`](/docs/reference/cli/usage#supabase-init) and [`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/csharp/installing.mdx b/apps/docs/docs/ref/csharp/installing.mdx deleted file mode 100644 index e274af8e28032..0000000000000 --- a/apps/docs/docs/ref/csharp/installing.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -id: installing -title: 'Installing & Initialization' -slug: installing -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml ---- - -### Install from NuGet - - - - - You can install Supabase package from [nuget.org](https://www.nuget.org/packages/supabase-csharp/) - - - - - - - - - ```sh Terminal - dotnet add package supabase-csharp - ``` - - - - - - diff --git a/apps/docs/docs/ref/csharp/introduction.mdx b/apps/docs/docs/ref/csharp/introduction.mdx deleted file mode 100644 index 49d483975c7c9..0000000000000 --- a/apps/docs/docs/ref/csharp/introduction.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    C# Client Library

    -

    @supabase-community/supabase-csharp

    -
    -
    - -{/* prettier-ignore */} -
    - This reference documents every object and method available in Supabase's C# library, [supabase-csharp](https://www.nuget.org/packages/supabase-csharp). You can use supabase-csharp to interact with your Postgres database, listen to database changes, invoke Deno Edge Functions, build login and user management functionality, and manage large files. -
    - -{/* prettier-ignore */} -
    -

    - The C# client library is created and maintained by the Supabase community, and is not an official library. Please be tolerant of areas where the library is still being developed, and — as with all the libraries — feel free to contribute wherever you find issues. -

    - -

    - Huge thanks to official maintainer, [Joseph Schultz](https://github.com/acupofjose), and to [Ben Randall](https://github.com/veleek) and [Rhuan Barros](https://github.com/rhuanbarros) for their help. -

    -
    diff --git a/apps/docs/docs/ref/csharp/release-notes.mdx b/apps/docs/docs/ref/csharp/release-notes.mdx deleted file mode 100644 index 291636cfb0848..0000000000000 --- a/apps/docs/docs/ref/csharp/release-notes.mdx +++ /dev/null @@ -1,374 +0,0 @@ ---- -id: release-notes -title: Release Notes ---- - -## 0.11.0 - 2023-05-24 - -- Update dependency: postgrest-csharp@3.2.0 - - General codebase and QOL improvements. Exceptions are generally thrown through `PostgrestException` now instead - of `Exception`. A `FailureHint.Reason` is provided with failures if possible to parse. - - `AddDebugListener` is now available on the client to help with debugging - - Merges [#65](https://github.com/supabase-community/postgrest-csharp/pull/65) Cleanup + Add better exception handling - - Merges [#66](https://github.com/supabase-community/postgrest-csharp/pull/66) Local test Fixes - - Fixes [#67](https://github.com/supabase-community/postgrest-csharp/issues/67) Postgrest Reference attribute is - producing StackOverflow for circular references -- Update dependency: gotrue-csharp@4.0.2 - - [#58](https://github.com/supabase-community/gotrue-csharp/issues/58) - Add support for the `reauthentication` endpoint which allows for secure password changes. -- Update dependency: realtime-csharp@6.0.1 - - Updates publishing action for future packages, includes README and icon. - - Merges [#28](https://github.com/supabase-community/realtime-csharp/pull/28) and [#30](https://github.com/supabase-community/realtime-csharp/pull/30) - - The realtime client now takes a "fail-fast" approach. On establishing an initial connection, client will throw - a `RealtimeException` in `ConnectAsync()` if the socket server is unreachable. After an initial connection has been - established, the **client will continue attempting reconnections indefinitely until disconnected.** - - [Major, New] C# `EventHandlers` have been changed to `delegates`. This should allow for cleaner event data access over - the previous subclassed `EventArgs` setup. Events are scoped accordingly. For example, the `RealtimeSocket` error - handlers will receive events regarding socket connectivity; whereas the `RealtimeChannel` error handlers will receive - events according to `Channel` joining/leaving/etc. This is implemented with the following methods prefixed by ( - Add/Remove/Clear): - - `RealtimeBroadcast.AddBroadcastEventHandler` - - `RealtimePresence.AddPresenceEventHandler` - - `RealtimeSocket.AddStateChangedHandler` - - `RealtimeSocket.AddMessageReceivedHandler` - - `RealtimeSocket.AddHeartbeatHandler` - - `RealtimeSocket.AddErrorHandler` - - `RealtimeClient.AddDebugHandler` - - `RealtimeClient.AddStateChangedHandler` - - `RealtimeChannel.AddPostgresChangeHandler` - - `RealtimeChannel.AddMessageReceivedHandler` - - `RealtimeChannel.AddErrorHandler` - - `Push.AddMessageReceivedHandler` - - [Major, new] `ClientOptions.Logger` has been removed in favor of `Client.AddDebugHandler()` which allows for - implementing custom logging solutions if desired. - - A simple logger can be set up with the following: - ```c# - client.AddDebugHandler((sender, message, exception) => Debug.WriteLine(message)); - ``` - - [Major] `Connect()` has been marked `Obsolete` in favor of `ConnectAsync()` - - Custom reconnection logic has been removed in favor of using the built-in logic from `Websocket.Client@4.6.1`. - - Exceptions that are handled within this library have been marked as `RealtimeException`s. - - The local, docker-composed test suite has been brought back (as opposed to remotely testing on live supabase servers) - to test against. - - Comments have been added throughout the entire codebase and an `XML` file is now generated on build. - -## 0.10.0 - 2023-05-14 - -- Changes options to require `Supabase.SupabaseOptions.SessionPersistor` from using `ISupabaseSessionHandler` - to `IGotrueSessionPersistance` (these are now synchronous operations). -- Update dependency: gotrue-csharp@4.0.1 - - [#60](https://github.com/supabase-community/gotrue-csharp/pull/60) - Add interfaces, bug fixes, additional error - reason detection. Thanks [@wiverson](https://github.com/wiverson)! - - [#57](https://github.com/supabase-community/gotrue-csharp/pull/57) Refactor exceptions, code cleanup, and move to - delegate auth state changes - - Huge thank you to [@wiverson](https://github.com/wiverson) for his help on this refactor and release! - - Changes - - Exceptions have been simplified to a single `GotrueException`. A `Reason` field has been added - to `GotrueException` to clarify what happened. This should also be easier to manage as the Gotrue - server API & messages evolve. - - The session delegates for `Save`/`Load`/`Destroy` have been simplified to no longer require `async`. - - Console logging in a few places (most notable the background refresh thread) has been removed - in favor of a notification method. See `Client.AddDebugListener()` and the test cases for examples. - This will allow you to implement your own logging strategy (write to temp file, console, user visible - err console, etc). - - The client now more reliably emits AuthState changes. - - There is now a single source of truth for headers in the stateful Client - the `Options` headers. - - New feature: - - Added a `Settings` request to the stateless API only - you can now query the server instance to - determine if it's got the settings you need. This might allow for things like a visual - component in a tool to verify the GoTrue settings are working correctly, or tests that run differently - depending on the server configuration. - - Implementation notes: - - Test cases have been added to help ensure reliability of auth state change notifications - and persistence. - - Persistence is now managed via the same notifications as auth state change - -## 0.9.1 - 2023-04-28 - -- Update dependency: gotrue-csharp@3.1.1 - - Implements `SignInWithIdToken` for Apple/Google signing from LW7. A HUGE thank you - to [@wiverson](https://github.com/wiverson)! -- Update dependency: realtime-csharp@5.0.5 - - Re: [#27](https://github.com/supabase-community/realtime-csharp/issues/27) `PostgresChangesOptions` was not - setting `listenType` in constructor. Thanks [@Kuffs2205](https://github.com/Kuffs2205) -- Update dependency: supabase-storage-csharp@1.2.10 - - Re: [#7](https://github.com/supabase-community/storage-csharp/issues/7) Implements a `DownloadPublicFile` method. - -## 0.9.0 - 2023-04-12 - -- Update dependency: gotrue-csharp@3.1.0 - - - [Minor] Implements PKCE auth flow. SignIn using a provider now returns an instance of `ProviderAuthState` rather - than a `string`. - -- Update dependency: supabase-storage-csharp@1.2.9 - - Implements storage features from LW7: - - feat: custom file size limit and mime types at bucket - level [supabase/storage-js#151](https://github.com/supabase/storage-js/pull/151) file size and mime type - limits per bucket - - feat: quality option, image - transformation [supabase/storage-js#145](https://github.com/supabase/storage-js/pull/152) quality option for - image transformations - - feat: format option for webp - support [supabase/storage-js#142](https://github.com/supabase/storage-js/pull/142) format option for image - transformation - -## 0.8.8 - 2023-03-29 - -- Update dependency: gotrue-csharp@3.0.6 - - Supports adding `SignInOptions` (i.e. `RedirectTo`) on `OAuth Provider` SignIn requests. - -## 0.8.7 - 2023-03-23 - -- Update dependency: realtime-csharp@5.0.4 - - Re: [#26](https://github.com/supabase-community/realtime-csharp/pull/26) - Fixes Connect() not returning callback - result when the socket isn't null. Thanks [@BlueWaterCrystal](https://github.com/BlueWaterCrystal)! - -## 0.8.6 - 2023-03-23 - -- Update dependency: supabase-storage-csharp@1.2.8 - - [Merge #5](https://github.com/supabase-community/storage-csharp/pull/5) Added search string as an optional search - parameter. Thanks [@ElectroKnight22](https://github.com/ElectroKnight22)! - -## 0.8.5 - 2023-03-10 - -- Update dependency: realtime-csharp@5.0.3 - - Re: [#25](https://github.com/supabase-community/realtime-csharp/issues/25) - Support Channel being resubscribed - after having been unsubscribed, fixes rejoin timer being erroneously called on channel `Unsubscribe`. - Thanks [@Kuffs2205](https://github.com/Kuffs2205)! - -## 0.8.4 - 2023-03-03 - -- Update dependency: supabase-storage-csharp@1.2.7 - - Re: [#4](https://github.com/supabase-community/storage-csharp/issues/4) Implementation for `ClientOptions` which - supports specifying Upload, Download, and Request timeouts. -- Update dependency: realtime-csharp@5.0.2 - - Re: [#24](https://github.com/supabase-community/realtime-csharp/issues/24) - Fixes join failing until reconnect - happened + adds access token push on channel join. Big thank you to [@Honeyhead](https://github.com/honeyhead) for - the help debugging and identifying! - -## 0.8.3 - 2023-02-26 - -- Update dependency: supabase-storage-csharp@1.2.5 - - Provides fix - for [supabase-community/supabase-csharp#54](https://github.com/supabase-community/supabase-csharp/issues/54) - - Dynamic headers were always being overwritten by initialized token headers, so the storage client would not - receive user's access token as expected. - - Provides fix for upload progress not reporting - in [supabase-community/storage-csharp#3](https://github.com/supabase-community/storage-csharp/issues/3) -- Update dependency: gotrue-csharp@3.0.5 - - Fixes [#44](https://github.com/supabase-community/gotrue-csharp/issues/44) - refresh timer should automatically - reattempt (interval of 5s) for HTTP exceptions - gracefully exits on invalid refresh and triggers - an `AuthState.Changed` event - -## 0.8.2 - 2023-02-26 - -- Update dependency: supabase-storage-csharp@1.2.4 - - `UploadOrUpdate` now appropriately throws request exceptions - -## 0.8.1 - 2023-02-06 - -- Update dependency: realtime-csharp@5.0.1 - - Re: [#22](https://github.com/supabase-community/realtime-csharp/issues/22) - `SerializerSettings` were not being - passed to `PostgresChangesResponse` - Thanks [@Shenrak](https://github.com/Shenrak) for the help debugging! - -## 0.8.0 - 2023-01-31 - -- Update dependency: realtime-csharp@5.0.0 - - Re: [#21](https://github.com/supabase-community/realtime-csharp/pull/21) Provide API for `presence`, `broadcast` and `postgres_changes` - - [Major, New] `Channel.PostgresChanges` event will receive the wildcard `*` changes event, not `Channel.OnMessage`. - - [Major] `Channel.OnInsert`, `Channel.OnUpdate`, and `Channel.OnDelete` now conform to the server's payload of `Response.Payload.**Data**` - - [Major] `Channel.OnInsert`, `Channel.OnUpdate`, and `Channel.OnDelete` now return `PostgresChangesEventArgs` - - [Minor] Rename `Channel` to `RealtimeChannel` - - Supports better handling of disconnects in `RealtimeSocket` and adds a `Client.OnReconnect` event. - - [Minor] Moves `ChannelOptions` to `Channel.ChannelOptions` - - [Minor] Moves `ChannelStateChangedEventArgs` to `Channel.ChannelStateChangedEventArgs` - - [Minor] Moves `Push` to `Channel.Push` - - [Minor] Moves `Channel.ChannelState` to `Constants.ChannelState` - - [Minor] Moves `SocketResponse`, `SocketRequest`, `SocketResponsePayload`, `SocketResponseEventArgs`, and `SocketStateChangedEventArgs` to `Socket` namespace. - - [New] Adds `RealtimeBroadcast` - - [New] Adds `RealtimePresence` - - [Improvement] Better handling of disconnection/reconnection -- Update dependency: postgrest-csharp@3.1.3 - - Another fix for [#61](https://github.com/supabase-community/postgrest-csharp/issues/61) which further typechecks nullable values. - -## 0.7.2 - 2023-01-27 - -- Update dependency: gotrue-csharp@3.0.4 - - Makes `Session.CreatedAt` a publicly settable property, which should fix incorrect dates on retrieved `Session`s. -- Update dependency: postgrest-csharp@3.1.2 - - Fix [#61](https://github.com/supabase-community/postgrest-csharp/issues/61) which did not correctly parse Linq `Where` when encountering a nullable type. - - Add missing support for transforming for `== null` and `!= null` - -## 0.7.1 - 2023-01-17 - -- Update dependency: postgrest-csharp@3.1.1 - - Fix issue from supabase-community/supabase-csharp#48 where boolean model properties would not be evaluated in predicate expressions - -## 0.7.0 - 2023-01-16 - -- Update dependency: postgrest-csharp@3.1.0 - - [Minor] Breaking API Change: `PrimaryKey` attribute defaults to `shouldInsert: false` as most uses will have the Database generate the primary key. - - Merged [#60](https://github.com/supabase-community/postgrest-csharp/pull/60) which Added linq support for `Select`, `Where`, `OnConflict`, `Columns`, `Order`, `Update`, `Set`, and `Delete` - -## 0.6.2 - 2022-11-22 - -- Update dependency: postgrest-csharp@3.0.4 - - `GetHeaders` is now passed to `ModeledResponse` and `BaseModel` so that the default `Update` and `Delete` methods use the latest credentials - - `GetHeaders` is used in `Rpc` calls (re: [#39](https://github.com/supabase-community/supabase-csharp/issues/39)) - -## 0.6.1 - 2022-11-12 - -- [Hotfix] `GetHeaders` was not passing properly to `SupabaseTable` and `Gotrue.Api` - -## 0.6.0 - 2022-11-12 - -[BREAKING CHANGES] - -- `Client` is no longer a singleton, singleton interactions (if desired) are left to the developer to implement. -- `Client` supports injection of dependent clients after initialization via property: - - `Auth` - - `Functions` - - `Realtime` - - `Postgrest` - - `Storage` -- `SupabaseModel` contains no logic but remains for backwards compatibility. (Marked `Obsolete`) -- `ClientOptions.ShouldInitializeRealtime` was removed (no longer auto initialized) -- `ClientOptions` now references an `ISupabaseSessionHandler` which specifies expected functionality for session persistence on Gotrue (replaces `ClientOptions.SessionPersistor`, `ClientOptions.SessionRetriever`, and `ClientOptions.SessionDestroyer`). -- `supabase-csharp` and all child libraries now have support `nullity` - -Other Changes: - -- Update dependency: functions-csharp@1.2.1 -- Update dependency: gotrue-csharp@3.0.2 -- Update dependency: postgrest-csharp@3.0.2 -- Update dependency: realtime-csharp@4.0.1 -- Update dependency: supabase-storage-csharp@1.2.3 -- Update dependency: supabase-core@0.0.2 - -Big thank you to [@veleek](https://github.com/veleek) for his insight into these changes. - -Re: [#35](https://github.com/supabase-community/supabase-csharp/issues/35), [#34](https://github.com/supabase-community/supabase-csharp/issues/34), [#23](https://github.com/supabase-community/supabase-csharp/issues/23), [#36](https://github.com/supabase-community/supabase-csharp/pull/36) - -## 0.5.3 - 2022-10-11 - -- Update dependency: postgrest-csharp@2.1.0 - - [Minor] Breaking API change: Remove `BaseModel.PrimaryKeyValue` and `BaseModel.PrimaryKeyColumn` in favor of a `PrimaryKey` dictionary with support for composite keys. - - Re: [#48](https://github.com/supabase-community/postgrest-csharp/issues/48) - Add support for derived models on `ReferenceAttribute` - - Re: [#49](https://github.com/supabase-community/postgrest-csharp/issues/49) - Added `Match(T model)` - -## 0.5.2 - 2022-9-13 - -- Update dependency: postgrest-csharp@2.0.12 - - Merged [#47](https://github.com/supabase-community/postgrest-csharp/pull/49) which added cancellation token support to `Table` methods. Thanks [@devpikachu](https://github.com/devpikachu)! - -## 0.5.1 - 2022-8-1 - -- Update dependency: postgrest-csharp@2.0.11 -- Update dependency: supabase-storage-csharp@1.1.1 - -## 0.5.0 - 2022-7-17 - -- Update dependency: postgrest-csharp@2.0.9 -- Update dependency: realtime-csharp@3.0.1 -- Update dependency: supabase-storage-csharp@1.1.0 - - API Change [Breaking/Minor] Library no longer uses `WebClient` and instead leverages `HttpClient`. Progress events on `Upload` and `Download` are now handled with `EventHandler` instead of `WebClient` EventHandlers. - -## 0.4.4 - 2022-5-24 - -- Update dependency: gotrue-csharp@2.4.5 -- Update dependency: postgrest-csharp@2.0.8 - -## 0.4.3 - 2022-5-13 - -- Update dependency: gotrue-csharp@2.4.4 - -## 0.4.2 - 2022-4-30 - -- Update dependency: gotrue-csharp@2.4.3 - -## 0.4.1 - 2022-4-23 - -- Update dependency: gotrue-csharp@2.4.2 - -## 0.4.0 - 2022-4-12 - -- Add support for functions-csharp@1.0.1, giving access to invoking Supabase's edge functions. -- Update dependency: gotrue-csharp@2.4.1 - -## 0.3.5 - 2022-4-11 - -- Update dependency: postgres-csharp@2.0.7 - -## 0.3.4 - 2022-03-28 - -- Update dependency: gotrue-csharp@2.4.0 - -## 0.3.3 - 2022-02-27 - -- Update dependency: gotrue-csharp@2.3.6 -- Update dependency: supabase-storage-csharp@1.0.2 - -## 0.3.2 - 2022-02-18 - -- Update dependency: realtime-csharp@3.0.0 - - Exchange existing websocket client: [WebSocketSharp](https://github.com/sta/websocket-sharp) for [Marfusios/websocket-client](https://github.com/Marfusios/websocket-client) which adds support for Blazor WASM apps. - Ref: [#14](https://github.com/supabase-community/realtime-csharp/pull/14) - -## 0.3.1 - 2022-01-20 - -- Update dependency: gotrue-csharp@2.3.5 - - [#23](https://github.com/supabase-community/gotrue-csharp/pull/23) Added `redirect_url` option for MagicLink sign in (Thanks [@MisterJimson](https://github.com/MisterJimson)) - - [#21](https://github.com/supabase-community/gotrue-csharp/pull/21) Added SignOut method to Stateless Client (Thanks [@fplaras](https://github.com/fplaras)) - -## 0.3.0 - 2021-12-30 - -- Update dependency: postgrest-csharp@2.0.6 - - Add support for `NullValueHandling` to be specified on a `Column` Attribute and for it to be honored on Inserts and Updates. Defaults to: `NullValueHandling.Include`. - - Implements [#38](https://github.com/supabase-community/postgrest-csharp/issues/38) -- Update dependency: realtime-csharp@2.0.8 - - Implement Upstream Realtime RLS Error Broadcast Handler - - Implements [#12](https://github.com/supabase-community/realtime-csharp/issues/12) - - `SocketResponse` now exposes a method: `OldModel`, that hydrates the `OldRecord` property into a model. - -## 0.2.12 - 2021-12-29 - -- Update dependency: gotrue-csharp@2.3.3 - - `SignUp` will return a `Session` with a _populated `User` object_ on an unconfirmed signup. - - Fixes [#19](https://github.com/supabase-community/gotrue-csharp/issues/19) - - Developers who were using a `null` check on `Session.User` will need to adjust accordingly. -- Update dependency: postgrest-csharp@2.0.5 - - Fix for [#37](https://github.com/supabase-community/postgrest-csharp/issues/37) - Return Type `minimal` would fail to resolve because of incorrect `Accept` headers. Added header and test to verify for future. - - Fix for [#36](https://github.com/supabase-community/postgrest-csharp/issues/36) - Inserting/Upserting bulk records would fail while doing an unnecessary generic coercion. - -## 0.2.11 - 2021-12-24 - -- Update dependency: gotrue-csharp@2.3.2 (changes CreateUser parameters to conform to `AdminUserAttributes`) - - See [#15](https://github.com/supabase-community/supabase-csharp/issues/15) - - See [#16](https://github.com/supabase-community/supabase-csharp/issues/16) -- Update dependency: realtime-csharp@2.0.7 - - See [#13](https://github.com/supabase-community/supabase-csharp/issues/13) - -## 0.2.10 - 2021-12-23 - -- Update dependency: gotrue-csharp@2.3.0 (adds metadata support for user signup, see [#14](https://github.com/supabase/community/issues/14)) - -## 0.2.9 - 2021-12-9 - -- Separate Storage client from Supabase repo and into `storage-csharp`, `supabase-csharp` now references new repo. - -## 0.2.8 - 2021-12-4 - -- Update gotrue-csharp to 2.2.4 - - Adds support for `ListUsers` (paginate, sort, filter), `GetUserById`, `CreateUser`, and `UpdateById` - -## 0.2.7 - 2021-12-2 - -- Update gotrue-csharp to 2.2.3 - - Adds support for sending password resets to users. - -## 0.2.6 - 2021-11-29 - -- Support for [#12](https://github.com/supabase-community/supabase-csharp/issues/12) -- Update realtime-csharp to 2.0.6 -- Update gotrue-csharp to 2.2.2 -- Add `StatelessClient` re:[#7](https://github.com/supabase-community/supabase-csharp/issues/7) diff --git a/apps/docs/docs/ref/csharp/v0/release-notes.mdx b/apps/docs/docs/ref/csharp/v0/release-notes.mdx deleted file mode 100644 index 2ecb0ef3990e7..0000000000000 --- a/apps/docs/docs/ref/csharp/v0/release-notes.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -id: release-notes -title: Release Notes ---- - -## dart v0 this is the release notes file. diff --git a/apps/docs/docs/ref/dart/installing.mdx b/apps/docs/docs/ref/dart/installing.mdx deleted file mode 100644 index d53e3c9921811..0000000000000 --- a/apps/docs/docs/ref/dart/installing.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -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 deleted file mode 100644 index 5e4b88648b38b..0000000000000 --- a/apps/docs/docs/ref/dart/introduction.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    Flutter Client Library

    -

    supabase-flutter

    -
    -
    - -{/* prettier-ignore */} -
    - 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 a [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 deleted file mode 100644 index b5e0e21891883..0000000000000 --- a/apps/docs/docs/ref/dart/release-notes.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -id: release-notes -title: Release Notes ---- - -## dart this is the release notes file. diff --git a/apps/docs/docs/ref/dart/v0/introduction.mdx b/apps/docs/docs/ref/dart/v0/introduction.mdx deleted file mode 100644 index 43aaaee0333f1..0000000000000 --- a/apps/docs/docs/ref/dart/v0/introduction.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    Flutter Client Library

    -

    supabase-flutter

    -
    -
    - -{/* prettier-ignore */} -
    - - You're viewing the docs for an older version of the `supabase-flutter` library. Learn how to [upgrade to the latest version](/docs/reference/dart/v0/upgrade-guide). - - 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 a [supabase](https://pub.dev/packages/supabase) package for non-Flutter projects. -
    diff --git a/apps/docs/docs/ref/dart/v0/release-notes.mdx b/apps/docs/docs/ref/dart/v0/release-notes.mdx deleted file mode 100644 index 2ecb0ef3990e7..0000000000000 --- a/apps/docs/docs/ref/dart/v0/release-notes.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -id: release-notes -title: Release Notes ---- - -## dart v0 this is the release notes file. diff --git a/apps/docs/docs/ref/dart/v0/upgrade-guide.mdx b/apps/docs/docs/ref/dart/v0/upgrade-guide.mdx deleted file mode 100644 index 6da7b0c0fe503..0000000000000 --- a/apps/docs/docs/ref/dart/v0/upgrade-guide.mdx +++ /dev/null @@ -1,704 +0,0 @@ ---- -id: upgrade-guide -title: Upgrade to supabase-flutter v1 -description: 'Learn how to upgrade to supabase-flutter v1.' ---- - -supabase-flutter focuses on improving the developer experience and making it easier to use. This guide demonstrates how to upgrade from supabase-flutter v0 to v1. - -## Upgrade the client library - - - - -Update the package in your pubspec.yaml file. - - - - -```yaml -supabase_flutter: ^1.0.0 -``` - - - - -## Error handling - - - - -The way supabase-flutter throws error has changed in v1. In v0, errors were returned as a response. In v1, errors are thrown as exceptions. This makes it more intuitive as a Flutter developer to handle errors. - - - - - - - -```dart -final res = await supabase.from('my_table').select().execute(); -final error = res.error; -if (error != null) { - // handle error -} -final data = res.data; -``` - - - - -```dart -try { - final data = supabase.from('my_table').select(); -} catch (error) { - // handle error -} -``` - - - - - - - -## Auth classes and methods - -### Usage of `SupabaseAuthState` and `SupabaseAuthRequiredState` classes - - - - -In v0, `SupabaseAuthState` and `SupabaseAuthRequiredState` were required to handle automatic token refresh and to listen to auth state change. In v1, `SupabaseAuthState` and `SupabaseAuthRequiredState` are deprecated, and token refresh will happen automatically just by initializing Supabase. [`onAuthStateChange`](#listening-to-auth-state-change) can be used to action on auth state change. - - - - - - - -```dart -await Supabase.initialize( - url: 'SUPABASE_URL', - anonKey: 'SUPABASE_ANON_KEY', -); -... - -class AuthState extends SupabaseAuthState { - ... -} - -... - -class AuthRequiredState extends SupabaseAuthState { - ... -} -``` - - - - -```dart -await Supabase.initialize( - url: 'SUPABASE_URL', - anonKey: 'SUPABASE_ANON_KEY', -); -``` - - - - - - - -### Listening to auth state change - - - - -`onAuthStateChange` now returns a `Stream`. - - - - - - - -```dart -final authSubscription = supabase.auth.onAuthStateChange((event, session) { - // handle auth state change -}); - -// Unsubscribe when no longer needed -authSubscription.data?.unsubscribe(); -``` - - - - -```dart -final authSubscription = supabase.auth.onAuthStateChange.listen((data) { - final AuthChangeEvent event = data.event; - final Session? session = data.session; - // handle auth state change - }); - -// Unsubscribe when no longer needed -authSubscription.cancel(); -``` - - - - - - - -### Sign in with email and password - - - - -`signIn()` has been deprecated in favor of more explicit method signatures to help with type hinting. Previously it was difficult for developers to know what they were missing (e.g., a lot of developers didn't realize they could use passwordless magic links). - - - - - - - -```dart -await supabase.auth.signIn(email: email, password: password); -``` - - - - -```dart -await supabase.auth.signInWithPassword(email: email, password: password); -``` - - - - - - - - - - -### Sign in with magic link - - - - - - - -```dart -await supabase.auth.signIn(email: email); -``` - - - - -```dart -await supabase.auth.signInWithOtp(email: email); -``` - - - - - - - - - - -### Sign in with a third-party OAuth provider - - - - - - - -```dart -await supabase.auth.signInWithProvider( - Provider.github, - options: AuthOptions( - redirectTo: kIsWeb - ? null - : 'io.supabase.flutter://reset-callback/'), -); -``` - - - - -```dart -await supabase.auth.signInWithOAuth( - Provider.github, - redirectTo: kIsWeb ? null : 'io.supabase.flutter://reset-callback/', -); -``` - - - - - - - - - - -### Sign in with phone - - - - - - - -```dart -await supabase.auth.signIn( - phone: '+13334445555', - password: 'example-password', -); -``` - - - - -```dart -await supabase.auth.signInWithPassword( - phone: '+13334445555', - password: 'example-password', -); -``` - - - - - - - - - - -### Sign in with phone using OTP - - - - - - - -```dart -final res = await supabase.auth.signIn(phone: phone); -``` - - - - -```dart -await supabase.auth.signInWithOtp( - phone: phone, -); - -// After receiving a SMS with a OTP. -await supabase.auth.verifyOTP( - type: OtpType.sms, - token: token, - phone: phone, -); -``` - - - - - - - - - - -### Reset password for email - - - - - - - -```dart -await supabase.auth.api.resetPasswordForEmail( - email, - options: - AuthOptions(redirectTo: 'io.supabase.flutter://reset-callback/'), -); -``` - - - - -```dart -await supabase.auth.resetPasswordForEmail( - email, - redirectTo: kIsWeb ? null : 'io.supabase.flutter://reset-callback/', -); -``` - - - - - - - - - - -### Get the user's current session - - - - - - - -```dart -final session = supabase.auth.session(); -``` - - - - -```dart -final Session? session = supabase.auth.currentSession; -``` - - - - - - - - - - -### Get the logged-in user - - - - - - - -```dart -final user = supabase.auth.user(); -``` - - - - -```dart -final User? user = supabase.auth.currentUser; -``` - - - - - - - - - - -### Update user data for a logged-in user - - - - - - - -```dart -await supabase.auth.update( - UserAttributes(data: {'hello': 'world'}) -); -``` - - - - -```dart -await supabase.updateUser( - UserAttributes( - data: { 'hello': 'world' }, - ), -); -``` - - - - - - - -## Data methods - -`.insert()` / `.upsert()` / `.update()` / `.delete()` no longer return rows by default. 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. - -Also, calling `.execute()` at the end of the query was a requirement in v0, but deprecated in v1. - - - - -### Insert without returning inserted data - - - - - - - -```dart -await supabase - .from('my_table') - .insert(data, returning: ReturningOption.minimal) - .execute(); - -``` - - - - -```dart -await supabase.from('my_table').insert(data); -``` - - - - - - - - - - -### Insert with returning inserted data - - - - - - - -```dart -final res = await supabase - .from('my_table') - .insert(data) - .execute(); -``` - - - - -```dart -final insertedData = await supabase.from('my_table').insert(data).select(); -``` - - - - - - - -## Realtime methods - - - - -### Stream - -`.stream()` no longer needs the `.execute()` at the end. Also, filtering by `eq` is a lot easier now. `primaryKey` is now a named parameter to make it more obvious what to pass. - - - - - - - -```dart -supabase.from('my_table:id=eq.120') - .stream(['id']) - .listen(); -``` - - - - -```dart -supabase.from('my_table') - .stream(primaryKey: ['id']) - .eq('id', '120') - .listen(); -``` - - - - - - - - - - -### Subscribe - - - - - - - -```dart -final subscription = supabase - .from('countries') - .on(SupabaseEventTypes.all, (payload) { - // Handle realtime payload - }) - .subscribe(); -``` - - - - -```dart -final channel = supabase.channel('*'); -channel.on( - RealtimeListenTypes.postgresChanges, - ChannelFilter(event: '*', schema: '*'), - (payload, [ref]) { - // Handle realtime payload - }, -).subscribe(); -``` - - - - - - - - - - -### Unsubscribe - - - - - - - -```dart -supabase.removeSubscription(subscription); -``` - - - - -```dart -await supabase.removeChannel(channel); -``` - - - - - - diff --git a/apps/docs/docs/ref/javascript/auth.mdx b/apps/docs/docs/ref/javascript/auth.mdx deleted file mode 100644 index 387db9bdfa81a..0000000000000 --- a/apps/docs/docs/ref/javascript/auth.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -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 deleted file mode 100644 index 900107af0b485..0000000000000 --- a/apps/docs/docs/ref/javascript/database.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -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 deleted file mode 100644 index fb4e334389e43..0000000000000 --- a/apps/docs/docs/ref/javascript/installing.mdx +++ /dev/null @@ -1,79 +0,0 @@ ---- -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 deleted file mode 100644 index 07c889bf1c7ba..0000000000000 --- a/apps/docs/docs/ref/javascript/introduction.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    JavaScript Client Library

    -

    @supabase/supabase-js

    -
    -
    - -{/* prettier-ignore */} -
    - 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 deleted file mode 100644 index f997c312e777a..0000000000000 --- a/apps/docs/docs/ref/javascript/release-notes.mdx +++ /dev/null @@ -1,309 +0,0 @@ ---- -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 deleted file mode 100644 index dd555315a8490..0000000000000 --- a/apps/docs/docs/ref/javascript/typescript-support.mdx +++ /dev/null @@ -1,189 +0,0 @@ ---- -id: typescript-support -title: TypeScript Support ---- - -`supabase-js` has TypeScript support for type inference, autocompletion, type-safe queries, and more. - -With TypeScript, `supabase-js` detects things like `not null` constraints and [generated columns](https://www.postgresql.org/docs/current/ddl-generated-columns.html). Nullable columns are typed as `T | null` when you select the column. Generated columns will show a type error when you insert to it. - -`supabase-js` also detects relationships between tables. A foreign table with one-to-many relationship is typed as `T[]`. Likewise, a foreign table with many-to-one relationship is typed as `T | null`. - -## Generating types - - - - - You can use the Supabase CLI to [generate the types](/docs/reference/cli/supabase-gen-types-typescript). You can also generate the types [from the dashboard](https://supabase.com/dashboard/project/_/api?page=tables-intro). - - - - - ```bash Terminal - supabase gen types typescript --project-id abcdefghijklmnopqrst > database.types.ts - ``` - - - - - - - - These types are generated from your database schema. Given a table `public.movies`, the generated types will look like: - - - - - ```sql - create table public.movies ( - id bigint generated always as identity primary key, - name text not null, - data jsonb null - ); - ``` - - ```ts ./database.types.ts - export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[] - - export interface Database { - public: { - Tables: { - movies: { - Row: { // the data expected from .select() - id: number - name: string - data: Json | null - } - Insert: { // the data to be passed to .insert() - id?: never // generated columns must not be supplied - name: string // `not null` columns with no default must be supplied - data?: Json | null // nullable columns can be omitted - } - Update: { // the data to be passed to .update() - id?: never - name?: string // `not null` columns are optional on .update() - data?: Json | null - } - } - } - } - } - ``` - - - - -## Using type definitions - - - - - You can supply the type definitions to `supabase-js` like so: - - - - ```ts ./index.tsx - import { createClient } from '@supabase/supabase-js' - import { Database } from './database.types' - - const supabase = createClient( - process.env.SUPABASE_URL, - process.env.SUPABASE_ANON_KEY - ) - ``` - - - - -## Helper types - -You can use the following helper types to make the TypeScript support easier to use. - - - - - Sometimes the generated types are not what you expect. For example, a view's column may show up as nullable when you expect it to be `not null`. Using [type-fest](https://github.com/sindresorhus/type-fest), you can override the types like so: - - - - ```ts ./database-generated.types.ts - export type Json = // ... - - export interface Database { - // ... - } - ``` - - ```ts ./database.types.ts - import { MergeDeep } from 'type-fest' - import { Database as DatabaseGenerated } from './database-generated.types' - export { Json } from './database-generated.types' - - export type Database = MergeDeep< - DatabaseGenerated, - { - public: { - Views: { - movies_view: { - Row: { - // id is a primary key in public.movies, so it must be `not null` - id: number - } - } - } - } - } - > - ``` - - - - - - - - It's convenient to have shorthands for your most-used types. - - - - ```ts ./database.types.ts - export type Tables = Database['public']['Tables'][T]['Row'] - export type Enums = Database['public']['Enums'][T] - // etc. - ``` - - ```ts ./index.ts - // Before 😕 - let movie: Database['public']['Tables']['movies']['Row'] = // ... - - // After 😍 - let movie: Tables<'movies'> - ``` - - - - - - - - `supabase-js` always returns a `data` object (for success), and an `error` object (for unsuccessful requests). - - These helper types provide the result types from any query: - - - - ```ts - import { PostgrestError } from '@supabase/supabase-js' - - export type DbResult = T extends PromiseLike ? U : never - export type DbResultOk = T extends PromiseLike<{ data: infer U }> ? Exclude : never - export type DbResultErr = PostgrestError - ``` - - ```ts - const query = supabase.from('movies').select(`id, title`) - const movies: DbResult = await query - ``` - - - diff --git a/apps/docs/docs/ref/javascript/v1/introduction.mdx b/apps/docs/docs/ref/javascript/v1/introduction.mdx deleted file mode 100644 index 6a3e4bde9bc94..0000000000000 --- a/apps/docs/docs/ref/javascript/v1/introduction.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    JavaScript Client Library

    -

    @supabase/supabase-js

    -
    -
    - -{/* prettier-ignore */} -
    - - You're viewing the docs for an older version of the `supabase-js` library. Learn how to [upgrade to the latest version](/docs/reference/javascript/v1/upgrade-guide). - - -

    - 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 deleted file mode 100644 index 725cbb5201e6b..0000000000000 --- a/apps/docs/docs/ref/javascript/v1/release-notes.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -id: release-notes -title: Release Notes ---- - -## js v1 this is the release notes file. diff --git a/apps/docs/docs/ref/javascript/v1/upgrade-guide.mdx b/apps/docs/docs/ref/javascript/v1/upgrade-guide.mdx deleted file mode 100644 index d031f4a077814..0000000000000 --- a/apps/docs/docs/ref/javascript/v1/upgrade-guide.mdx +++ /dev/null @@ -1,682 +0,0 @@ ---- -id: upgrade-guide -title: Upgrade to supabase-js v2 -description: 'Learn how to upgrade to supabase-js v2.' ---- - -supabase-js v2 focuses on "quality-of-life" improvements for developers and addresses some of the largest pain points in v1. v2 includes type support, a rebuilt Auth library with async methods, improved errors, and more. - -No new features will be added to supabase-js v1 , but we'll continuing merging security fixes to v1, with maintenance patches for the next 3 months. - -## Upgrade the client library - - - - - Install the latest version - - - - -```sh -npm install @supabase/supabase-js@2 -``` - - - - - - - -_Optionally_ if you are using custom configuration with `createClient` then follow below: - - - - - - - -```ts src/supabaseClient.ts -const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, { - schema: 'custom', - persistSession: false, -}) -``` - - - - -```ts src/supabaseClient.ts -const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, { - db: { - schema: 'custom', - }, - auth: { - persistSession: true, - }, -}) -``` - - - - - - - -Read more about the [constructor options](/docs/reference/javascript/release-notes#explicit-constructor-options). - -### Auth methods - -The signIn() method has been deprecated in favor of more explicit method signatures to help with type hinting. Previously it was difficult for developers to know what they were missing (e.g., a lot of developers didn't realize they could use passwordless magic links). - - - - -#### Sign in with email and password - - - - - - -```ts -const { user, error } = await supabase - .auth - .signIn({ email, password }) -``` - - - -```ts -const { - data: { user }, - error, -} = await supabase - .auth - .signInWithPassword({ email, password }) -``` - - - - - - - - - - -#### Sign in with magic link - - - - - -```ts -const { error } = await supabase - .auth - .signIn({ email }) -``` - - - -```ts -const { error } = await supabase - .auth - .signInWithOtp({ email }) -``` - - - - - - - - - - -#### Sign in with a third-party provider - - - - - - -```ts -const { error } = await supabase - .auth - .signIn({ provider }) -``` - - - -```ts -const { error } = await supabase - .auth - .signInWithOAuth({ provider }) -``` - - - - - - - - - - -#### Sign in with phone - - - - - -```ts -const { error } = await supabase - .auth - .signIn({ phone, password }) -``` - - - -```ts -const { error } = await supabase - .auth - .signInWithPassword({ phone, password }) -``` - - - - - - - - - - -#### Sign in with phone using OTP - - - - - - -```ts -const { error } = await supabase - .auth - .api - .sendMobileOTP(phone) -``` - - - -```ts -const { data, error } = await supabase - .auth - .signInWithOtp({ phone }) - -// After receiving a SMS with a OTP. -const { data, error } = await supabase - .auth - .verifyOtp({ phone, token }) -``` - - - - - - - - - - -#### Reset password for email - - - - - - -```ts -const { data, error } = await supabase - .auth - .api - .resetPasswordForEmail(email) -``` - - - -```ts -const { data, error } = await supabase - .auth - .resetPasswordForEmail(email) -``` - - - - - - - - - - -#### Get the user's current session - - - - - - - -```ts -const session = supabase.auth.session() -``` - - - - -```ts -const { - data: { session }, -} = await supabase.auth.getSession() -``` - - - - - - - - - - -#### Get the logged-in user - - - - - - - -```ts -const user = supabase.auth.user() -``` - - - - -```ts -const { - data: { session }, -} = await supabase.auth.getSession() -const { user } = session -``` - - - - - - - - - - -#### Update user data for a logged-in user - - - - - - -```ts -const { user, error } = await supabase - .auth - .update({ attributes }) -``` - - - - -```ts -const { - data: { user }, - error, -} = await supabase.auth.updateUser({ attributes }) -``` - - - - - - - - - - -#### Use a custom `access_token` JWT with Supabase - - - - - - - -```ts -const { user, error } = supabase.auth.setAuth(access_token) -``` - - - -```ts -const supabase = createClient( - SUPABASE_URL, - SUPABASE_ANON_KEY, - { - global: { - headers: { - Authorization: `Bearer ${access_token}`, - }, - }, - } -) -``` - - - - - - - -### Cookie methods - -The cookie-related methods like `setAuthCookie` and `getUserByCookie` have been removed. - -For Next.js you can use the [Auth Helpers](https://supabase.com/docs/guides/auth/auth-helpers/nextjs) to help you manage cookies. -If you can't use the Auth Helpers, you can use [server-side rendering](https://supabase.com/docs/guides/auth/server-side-rendering). - -Some the [PR](https://github.com/supabase/gotrue-js/pull/340) for additional background information. - -### Data methods - -`.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. - - - - -#### Insert and return data - - - - - - -```ts -const { data, error } = await supabase - .from('my_table') - .insert({ new_data }) -``` - - - -```ts -const { data, error } = await supabase - .from('my_table') - .insert({ new_data }) - .select() -``` - - - - - - - - - - -#### Update and return data - - - - - - -```ts -const { data, error } = await supabase - .from('my_table') - .update({ new_data }) - .eq('id', id) -``` - - - -```ts -const { data, error } = await supabase - .from('my_table') - .update({ new_data }) - .eq('id', id) - .select() -``` - - - - - - - - - - -#### Upsert and return data - - - - - - -```ts -const { data, error } = await supabase - .from('my_table') - .upsert({ new_data }) -``` - - - -```ts -const { data, error } = await supabase - .from('my_table') - .upsert({ new_data }) - .select() -``` - - - - - - - - - - -#### Delete and return data - - - - - - -```ts -const { data, error } = await supabase - .from('my_table') - .delete() - .eq('id', id) -``` - - - -```ts -const { data, error } = await supabase - .from('my_table') - .delete() - .eq('id', id) - .select() -``` - - - - - - - -### Realtime methods - - - - -#### Subscribe - - - - - - - -```ts -const userListener = supabase - .from('users') - .on('*', (payload) => handleAllEventsPayload(payload.new)) - .subscribe() -``` - - - - -```ts -const userListener = supabase - .channel('public:user') - .on('postgres_changes', { event: '*', schema: 'public', table: 'user' }, (payload) => - handleAllEventsPayload() - ) - .subscribe() -``` - - - - - - - - - - -#### Unsubscribe - - - - - - - -```ts -userListener.unsubscribe() -``` - - - - -```ts -supabase.removeChannel(userListener) -``` - - - - - - diff --git a/apps/docs/docs/ref/kotlin/installing.mdx b/apps/docs/docs/ref/kotlin/installing.mdx deleted file mode 100644 index 72e10be54fd61..0000000000000 --- a/apps/docs/docs/ref/kotlin/installing.mdx +++ /dev/null @@ -1,388 +0,0 @@ ---- -id: installing -title: 'Installing & Initialization' -slug: installing -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml ---- - -### Add one or more modules to your project - - - - - Add dependency to your build file: - - - - ```kotlin - implementation("io.github.jan-tennert.supabase:[module]:VERSION") - ``` - - - - - ```groovy - implementation 'io.github.jan-tennert.supabase:[module]:VERSION' - ``` - - - - - ```xml - - io.github.jan-tennert.supabase - [module] - VERSION - - ``` - - - - - The available modules are: **gotrue-kt**, **realtime-kt**, **storage-kt**, **functions-kt**, **postgrest-kt** and **apollo-graphql** - - When using multiple modules, you can also use the BOM dependency to ensure that all modules use the same version: - - - - - ```kotlin - implementation(platform("io.github.jan-tennert.supabase:bom:VERSION")) - implementation("io.github.jan-tennert.supabase:postgrest-kt") - implementation("io.github.jan-tennert.supabase:realtime-kt") - ``` - - - - - ```groovy - implementation platform("io.github.jan-tennert.supabase:bom:VERSION") - implementation 'io.github.jan-tennert.supabase:postgrest-kt' - implementation 'io.github.jan-tennert.supabase:realtime-kt' - ``` - - - - - ```xml - - io.github.jan-tennert.supabase - bom - VERSION - pom - import - - - io.github.jan-tennert.supabase - postgrest-kt - - - io.github.jan-tennert.supabase - realtime-kt - - ``` - - - - - - - - -### Add Ktor Client Engine to each of your Kotlin targets (required) - - - - - You can find a list of engines [here](https://ktor.io/docs/http-client-engines.html) - - - - - ```kotlin - implementation("io.ktor:ktor-client-[engine]:KTOR_VERSION") - ``` - - - - - ```groovy - implementation 'io.ktor:ktor-client-[engine]:KTOR_VERSION' - ``` - - - - - ```xml - - io.ktor - ktor-client-[engine] - KTOR_VERSION - - ``` - - - - - Multiplatform example: - - - - - ```kotlin - val commonMain by getting { - dependencies { - //supabase modules - } - } - val jvmMain by getting { - dependencies { - implementation("io.ktor:ktor-client-cio:KTOR_VERSION") - } - } - val androidMain by getting { - dependsOn(jvmMain) - } - val jsMain by getting { - dependencies { - implementation("io.ktor:ktor-client-js:KTOR_VERSION") - } - } - val iosMain by getting { - dependencies { - implementation("io.ktor:ktor-client-darwin:KTOR_VERSION") - } - } - ``` - - - - - - - - -### Serialization - -supabase-kt provides several different ways to encode and decode your custom objects. -By default, [KotlinX Serialization](https://github.com/Kotlin/kotlinx.serialization) is used. - - - - - Use [KotlinX Serialization](https://github.com/Kotlin/kotlinx.serialization). - - - - - - - - ```kotlin - plugins { - kotlin("plugin.serialization") version "KOTLIN_VERSION" - } - ``` - - - - - ```groovy - plugins { - id 'org.jetbrains.kotlin.plugin.serialization' version 'KOTLIN_VERSION' - } - ``` - - - - - ```xml - - - - org.jetbrains.kotlin - kotlin-maven-plugin - ${kotlin.version} - - - compile - compile - - compile - - - - - - kotlinx-serialization - - - - - org.jetbrains.kotlin - kotlin-maven-serialization - ${kotlin.version} - - - - - - ``` - - - - ```kotlin - val client = createSupabaseClient(supabaseUrl, supabaseKey) { - //Already the default serializer - } - ``` - - - - - - - Use [Moshi](https://github.com/square/moshi). - - - - - - - - ```kotlin - implementation("io.github.jan-tennert.supabase:serializer-moshi:VERSION") - ``` - - - - - ```groovy - implementation 'io.github.jan-tennert.supabase:serializer-moshi:VERSION' - ``` - - - - - ```xml - - io.github.jan-tennert.supabase - serializer-moshi - VERSION - - ``` - - - - ```kotlin - val client = createSupabaseClient(supabaseUrl, supabaseKey) { - defaultSerializer = MoshiSerializer() - } - ``` - - - - - - - - Use [Jackson](https://github.com/FasterXML/jackson-module-kotlin). - - - - - - - - ```kotlin - implementation("io.github.jan-tennert.supabase:serializer-jackson:VERSION") - ``` - - - - - ```groovy - implementation 'io.github.jan-tennert.supabase:serializer-jackson:VERSION' - ``` - - - - - ```xml - - io.github.jan-tennert.supabase - serializer-jackson - VERSION - - ``` - - - - ```kotlin - val client = createSupabaseClient(supabaseUrl, supabaseKey) { - defaultSerializer = JacksonSerializer() - } - ``` - - - - - - - - Use custom serializer. - - - - - ```kotlin - class CustomSerializer: SupabaseSerializer { - - override fun encode(type: KType, value: T): String { - //encode value to string - } - - override fun decode(type: KType, value: String): T { - //decode value - } - - } - ``` - - ```kotlin - val client = createSupabaseClient(supabaseUrl, supabaseKey) { - defaultSerializer = CustomSerializer() - } - ``` - - - - diff --git a/apps/docs/docs/ref/kotlin/introduction.mdx b/apps/docs/docs/ref/kotlin/introduction.mdx deleted file mode 100644 index 914310ba347f6..0000000000000 --- a/apps/docs/docs/ref/kotlin/introduction.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    Kotlin Client Library

    -

    @supabase-community/supabase-kt

    -
    -
    - -
    - -This reference documents every object and method available in Supabase's Kotlin Multiplatform library, [supabase-kt](https://github.com/supabase-community/supabase-kt). You can use supabase-kt to interact with your Postgres database, listen to database changes, invoke Deno Edge Functions, build login and user management functionality, and manage large files. - -Supported Kotlin targets: - -| | **GoTrue** | **Realtime** | **Postgrest** | **Storage** | **Functions** | **Apollo-GraphQL** | -| ------------------------------------------------------------------ | ---------- | ------------ | ------------- | ----------- | ------------- | ------------------ | -| **JVM** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| **Android** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| **JS** _(Browser, NodeJS)_ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| **IOS** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| **tvOS** _(tvosArm64, tvosX64, tvosSimulatorArm64)_ 🚧 | ☑️ | ✅ | ✅ | ✅ | ✅ | ✅ | -| **watchOS** _(watchosArm64, watchosX64, watchosSimulatorArm64)_ 🚧 | ☑️ | ✅ | ✅ | ✅ | ✅ | ✅ | -| **MacOS** _(macosX64 & macosArm64)_ 🚧 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| **Windows** _(mingwX64)_ 🚧 | ☑️ | ✅ | ✅ | ✅ | ✅ | ❌ | -| **Linux** _(linuxX64)_ 🚧 | ☑️ | ✅ | ✅ | ✅ | ✅ | ❌ | - -✅ = full support - -☑️ = partial support: no built-in OAuth/OTP link handling. Linux also has no persistent storage. - -🚧 = experimental/needs feedback - -❌ = not supported - -
    - -
    -

    The Kotlin client library is created and maintained by the Supabase community, and is not an official library. Please be tolerant of areas where the library is still being developed, and — as with all the libraries — feel free to contribute wherever you find issues.

    - -

    Huge thanks to official maintainer, [jan-tennert](https://github.com/jan-tennert).

    - -
    diff --git a/apps/docs/docs/ref/python/introduction.mdx b/apps/docs/docs/ref/python/introduction.mdx deleted file mode 100644 index 8b163faa74544..0000000000000 --- a/apps/docs/docs/ref/python/introduction.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    Python Client Library

    -

    @supabase-community/supabase-py

    -
    -
    - -
    - This reference documents every object and method available in the - [supabase-py](https://github.com/supabase-community/supabase-py) library from the Supabase - community. You can use `supabase-py` to interact with your Postgres database, listen to database - changes, invoke Deno Edge Functions, build login and user management functionality, and manage - large files. -
    - -
    -

    The Python client library is created and maintained by the Supabase community, and is not an official library. Please be tolerant of areas where the library is still being developed, and — as with all the libraries — feel free to contribute wherever you find issues.

    - -

    - Huge thanks to official maintainers, [anand2312](https://github.com/anand2312/), [dreinon](https://github.com/dreinon), [J0](https://github.com/j0), and [Leynier](https://github.com/leynier). -

    -

    - Shoutout to [timkpaine](https://github.com/timkpaine) for maintaining our Conda libraries as well. -

    -
    diff --git a/apps/docs/docs/ref/python/release-notes.mdx b/apps/docs/docs/ref/python/release-notes.mdx deleted file mode 100644 index 1deb6705f7e1c..0000000000000 --- a/apps/docs/docs/ref/python/release-notes.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -id: release-notes -title: Release Notes ---- - -The community is actively working on the library and we will be upgrading the Authentication library, `gotrue-py`, to mirror the Supabase-js v2 lib. - -## Storage Transformations - -We currently support [image transformations](https://supabase.com/docs/guides/storage/image-transformations) in our storage library. diff --git a/apps/docs/docs/ref/realtime/realtime.mdx b/apps/docs/docs/ref/realtime/realtime.mdx deleted file mode 100644 index 890440d0ee922..0000000000000 --- a/apps/docs/docs/ref/realtime/realtime.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -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-analytics/introduction.mdx b/apps/docs/docs/ref/self-hosting-analytics/introduction.mdx deleted file mode 100644 index b020dd6110b82..0000000000000 --- a/apps/docs/docs/ref/self-hosting-analytics/introduction.mdx +++ /dev/null @@ -1,205 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    Self-Hosting Analytics

    -
    -
    - - - - -The Supabase Analytics server is a Logflare self-hostable instance that manages the ingestion and query pipelines for searching and aggregating structured analytics events. - -When self-hosting the Analytics server, the full logging experience matching that of the Supabase Platform is available in the Studio instance, allowing for an integrated and enhanced development experience. -However, it's important to note that certain [differences](#differences) may arise due to the platform's infrastructure. - - - -All Logflare technical documentation is available at https://docs.logflare.app. - - - -## Backends Supported - -The Analytics server supports either **Postgres** or **BigQuery** as the backend. The `supabase-cli` experience uses the Postgres backend out-of-the-box. However, the Supabase Platform uses the BigQuery backend for storing all platform logs. - -When using the BigQuery backend, a BigQuery dataset is created in the provided Google Cloud project, and tables are created for each source. Log events are streamed into each table, and all queries generated by Studio or by the Logs Explorer are executed against the BigQuery API. This backend requires internet access to work, and cannot be run fully locally. - -When using the Postgres backend, tables are created for each source within the provided schema (for supabase-cli, this would be `_analytics`). Log events received by Logflare are inserted directly into the respective tables. All BigQuery-dialect SQL queries from Studio will be handled by a translation layer within the Analytics server. This translation layer translates the query to PostgreSQL dialect, and then executes it against the Postgres database. - -The Postgres backend is not yet optimized for a high volume of inserts, or for heavy query usage. Today the translation layer only handles a limited subset of the BigQuery dialect. As such, the [Log Explorer](https://supabase.com/docs/guides/platform/logs#logs-explorer) may produce errors for more advanced queries when using the Postgres Backend. - -## Getting Started - -The Postgres backend is recommended when familiarizing and experimenting with self-hosting Supabase. For production, we recommend using the BigQuery backend. See [production recommendations](#production-recommendations) for more information. - -To set up logging in self-hosted Supabase, see the [docker-compose example](https://github.com/supabase/supabase/tree/master/docker). -Two compose services are required: Logflare, and Vector. Logflare is the HTTP Analytics server, while Vector is the logging pipeline to route all compose services' syslog to the Logflare sever. - -Regardless of the backend chosen, the following environment variables **must** be set for the `supabase/logflare` docker image: - -- `LOGFLARE_SINGLE_TENANT_MODE=true`: The feature flag for enabling single tenant mode for Logflare. Must be set to `true` -- `LOGFLARE_SUPABASE_MODE=true`: The feature flag for seeding Supabase-related data. Must be set to `true` - -For all other configuration environment variables, please refer to the [Logflare self-hosting documentation](https://docs.logflare.app/self-hosting/#configuration). - -## Postgres Backend Setup - -The [example docker-compose](https://github.com/supabase/supabase/tree/master/docker) uses the Postgres backend out of the box. - -```bash -# clone the supabase/supabase repo, and run the following -cd docker -docker compose -f docker-compose.yml up -``` - -### Configuration and Requirements - -- `supabase/logflare:1.4.0` or above -- Relevant environment variables: - - `POSTGRES_BACKEND_URL` : Required. The connection string to the Postgres database. - - `POSTGRES_BACKEND_SCHEMA` : Optional. Allows customization of the schema used to scope all backend operations within the database. - -## BigQuery Backend Setup - -The BigQuery backend is a more robust and scalable backend option that is battle-tested and production ready. Use this backend if you intend to have heavy logging usage and require advanced querying features such as the Logs Explorer. - -### Configuration and Requirements - -The requirements are as follows after creating the project: - -- Google Cloud project with billing enabled -- Project ID -- Project number -- A service account key. - - - -You must enable billing on your Google Cloud project, as a valid billing account is required for streaming inserts. - - - -#### Setting up BigQuery Service Account - -The service account used must have sufficient permissions to insert into your Google Cloud BigQuery. Ensure that the service account has either: - -- BigQuery Admin role; or -- The following permissions: - - `bigquery.datasets.create` - - `bigquery.datasets.get` - - `bigquery.datasets.getIamPolicy` - - `bigquery.datasets.update` - - `bigquery.jobs.create` - - `bigquery.routines.create` - - `bigquery.routines.update` - - `bigquery.tables.create` - - `bigquery.tables.delete` - - `bigquery.tables.get` - - `bigquery.tables.getData` - - `bigquery.tables.update` - - `bigquery.tables.updateData` - -You can create the service account via the web console or `gcloud` CLI, as per the [Google Cloud documentation](https://cloud.google.com/iam/docs/keys-create-delete). In the web console, you can create the key by navigating to IAM > Service Accounts > Actions (dropdown) > Manage Keys - -We recommend setting the BigQuery Admin role, as it simplifies permissions setup. - -#### Download the Service Account Keys - -After the service account is created, you will need to create a key for the service account. This key will sign the JWTs for API requests that the Analytics server makes with BigQuery. This can be done through the IAM section in Google Cloud console. - -#### Docker Image Configuration - -Using the example [self-hosting stack based on docker-compose](https://github.com/supabase/supabase/tree/master/docker), you include the logging related services using the following command - -1. Update the `.env.example` file with the necessary environment variables. - -- `GOOGLE_PROJECT_ID` -- `GOOGLE_PROJECT_NUMBER` - -2. Place your Service Account key in your present working directory with the filename `gcloud.json`. -3. On `docker-compose.yml`, uncomment the block section below the commentary `# Uncomment to use Big Query backend for analytics` -4. On `docker-compose.yml`, comment the block section below the commentary `# Comment variables to use Big Query backend for analytics` - -Thereafter, you can start the example stack using the following command: - -```bash -# assuming you clone the supabase/supabase repo. -cd docker -docker compose -f docker-compose.yml -``` - -#### BigQuery Datset Storage Location - -Currently, all BigQuery datasets stored and managed by Analytics, whether via CLI or self-hosted, will default to the US region. - -## Vector Usage - -In the Docker Compose example, Vector is used for the logging pipieline, where log events are forwarded to the Analytics API for ingestion. - -Please refer to the [Vector configuration file](https://github.com/supabase/supabase/blob/master/docker/volumes/logs/vector.yml) when customizing your own setup. - -You **must** ensure that the payloads matches the expected event schema structure. Without the correct structure, it would cause the Studio Logs UI features to break. - -## Differences from Platform - -API logs rely on Kong instead of the Supabase Cloud API Gateway. Logs from Kong are not enriched with platform-only data. - -Within the self-hosted setup, all logs are routed to Logflare via Vector. As Kong routes API requests to PostgREST, self-hosted or local deployments will result in Kong request logs instead. -This would result in differences in the log event metadata between self-hosted API requests and Supabase Platform requests. - -## Production Recommendations - -To self-host in a production setting, we recommend performing the following for a better experience. - -### Ensure that Logflare is behind a firewall and restrict all network access to it besides safe requests. - -Self-hosted Logflare has UI authentication disabled and is intended for exposure to the internet. We recommend restricting access to the dashboard, accessible at the `/dashboard` path. -If dashboard access is required for managing sources, we recommend having an authentication layer, such as a VPN. - -### Use a different Postgres Database to store Logflare data. - -Logflare requires a Postgres database to function. However, if there is an issue with you self-hosted Postgres service, you would not be able to debug it as it would also bring Logflare down together. - -The self-hosted example is only used as a minimal example on running the entire stack, however it is not recommended to use the same database server for both production and observability. - -### Use Big Query as the Logflare Backend - -The current Postgres Ingestion backend isn't optimized for production usage. We recommend using Big Query for more heavy use cases. - -**We recommend using the BigQuery backend for production environments as it offers better scaling and querying/debugging experiences.** - - - - - - ### Client libraries - - - [JavaScript - Pino Transport](https://github.com/Logflare/pino-logflare) - - [Elixir](https://github.com/Logflare/logflare_api_client) - - [Elixir - Logger Backend](https://github.com/Logflare/logflare_logger_backend) - - [Erlang](https://github.com/Logflare/logflare_erl) - - [Erlang - Lager Backend](https://github.com/Logflare/logflare_lager_backend) - - [Cloudflare Worker](https://gist.github.com/chasers/c7a220e91820a1084b27fcfdb18ad6bd) - - ### Integrations - - - [Fly - Logs](https://github.com/Logflare/fly-log-shipper) - - [Vercel Integration - Logs](https://vercel.com/integrations/logflare) - - [Cloudflare App - Logs](https://www.cloudflare.com/apps/logflare/install) - - ### Additional links - - - [Source code](https://github.com/logflare/logflare) - - [OpenAPI docs](https://logflare.app/api/openapi) - - [Supabase Acquires Logflare](https://supabase.com/blog/supabase-acquires-logflare) - - [Logflare self-hosting docs](https://docs.logflare.app/self-hosting) - - - - diff --git a/apps/docs/docs/ref/self-hosting-auth/introduction.mdx b/apps/docs/docs/ref/self-hosting-auth/introduction.mdx deleted file mode 100644 index 0fe820ce9b3e1..0000000000000 --- a/apps/docs/docs/ref/self-hosting-auth/introduction.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -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-functions/introduction.mdx b/apps/docs/docs/ref/self-hosting-functions/introduction.mdx deleted file mode 100644 index f5624ed9f1f6d..0000000000000 --- a/apps/docs/docs/ref/self-hosting-functions/introduction.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    Self-Hosting Functions

    -
    -
    - - - - -A web server based on [Deno](https://deno.land) runtime, capable of running JavaScript, TypeScript, and WASM services. - -You can use it to: - -- Locally test and self-host Supabase's Edge Functions (or any Deno Edge Function) -- As a programmable HTTP Proxy: You can intercept / route HTTP requests - - - Self hosted Edge functions are in beta. There will be breaking changes to APIs / Configuration - Options. - - -## How to run locally - -```bash -./run.sh start --main-service /path/to/supabase/functions -p 9000 -``` - -using Docker: - -```bash -docker build -t edge-runtime . -docker run -it --rm -p 9000:9000 -v /path/to/supabase/functions:/usr/services supabase/edge-runtime start --main-service /usr/services -``` - -## How to update to a newer Deno version - -- Select the Deno version to upgrade and visit its tag on GitHub (eg: https://github.com/denoland/deno/blob/v1.30.3/Cargo.toml) -- Open the `Cargo.toml` at the root of this repo and modify all `deno_*` modules to match to the selected tag of Deno. - -## Self hosting Edge Functions on Fly.io - -We have put together a demo on how to self-host edge functions on [Fly.io](http://Fly.io) (you can also use other providers like Digital Ocean or AWS). - -To try it yourself, - -1. Sign up for an [Fly.io](http://Fly.io) account and install [flyctl](https://fly.io/docs/hands-on/install-flyctl/) -2. Clone the demo repository to your machine - https://github.com/supabase/self-hosted-edge-functions-demo -3. Copy your Edge Function into the `./functions` directory in the demo repo. -4. Update the Dockerfile to pull the latest edge-runtime image (check [releases](https://github.com/supabase/edge-runtime/pkgs/container/edge-runtime)) -5. [Optional] Edit `./functions/main/index.ts`, adding any other request preprocessing logic (for example, you can enable JWT validation, handle CORS requests) -6. Run `fly launch` to create a new app to serve your Edge Functions -7. Access your Edge Function by visiting: - `https://{your-app-name}.fly.dev/{your-function-name}` - -You can view the logs for the Edge Runtime, by visiting Fly.io’s Dashboard > Your App > Metrics. Also, you can serve edge-runtime from multiple regions by running `fly regions add [REGION]`. - - - - - - ### Client libraries - - [JavaScript](https://supabase.com/docs/reference/javascript/functions-invoke) - - [Dart](https://supabase.com/docs/reference/dart/functions-invoke) - - ### Additional Links - - - [Source code](https://github.com/supabase/edge-runtime/) - - - - diff --git a/apps/docs/docs/ref/self-hosting-realtime/introduction.mdx b/apps/docs/docs/ref/self-hosting-realtime/introduction.mdx deleted file mode 100644 index 310e0c9619217..0000000000000 --- a/apps/docs/docs/ref/self-hosting-realtime/introduction.mdx +++ /dev/null @@ -1,73 +0,0 @@ ---- -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 deleted file mode 100644 index 150820d09b28e..0000000000000 --- a/apps/docs/docs/ref/self-hosting-storage/introduction.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -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/ref/swift/introduction.mdx b/apps/docs/docs/ref/swift/introduction.mdx deleted file mode 100644 index ead2719a10d41..0000000000000 --- a/apps/docs/docs/ref/swift/introduction.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    Swift Client Library

    -

    @supabase-community/supabase-swift

    -
    -
    - -{/* prettier-ignore */} -
    -

    - This reference documents every object and method available in Supabase's Swift library, [supabase-swift](https://github.com/supabase-community/supabase-swift). You can use supabase-swift 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 a [supabase](https://pub.dev/packages/supabase) package for non-Swift projects. -

    -
    - -{/* prettier-ignore */} -
    -

    The Swift client library is created and maintained by the Supabase community, and is not an official library. Please be tolerant of areas where the library is still being developed, and — as with all the libraries — feel free to contribute wherever you find issues.

    - -

    Huge thanks to official maintainer, [Maail](https://github.com/maail).

    -
    diff --git a/apps/docs/docs/reference/api.mdx b/apps/docs/docs/reference/api.mdx deleted file mode 100644 index 70bb75ee9f68e..0000000000000 --- a/apps/docs/docs/reference/api.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -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 - - -Initializing a new client is pretty straightforward. Find your project url and public key from the -admin panel and pass it into your client initialization function. - - - - - - - - - ```csharp - var url = Environment.GetEnvironmentVariable("SUPABASE_URL"); - var key = Environment.GetEnvironmentVariable("SUPABASE_KEY"); - - var options = new Supabase.SupabaseOptions - { - AutoConnectRealtime = true - }; - - var supabase = new Supabase.Client(url, key, options); - await supabase.InitializeAsync(); - ``` - - - - - - ```csharp - public static MauiApp CreateMauiApp() - { - // ... - var builder = MauiApp.CreateBuilder(); - - var url = Environment.GetEnvironmentVariable("SUPABASE_URL"); - var key = Environment.GetEnvironmentVariable("SUPABASE_KEY"); - var options = new SupabaseOptions - { - AutoRefreshToken = true, - AutoConnectRealtime = true, - SessionHandler = new SupabaseSessionHandler() - }; - - // Note the creation as a singleton. - builder.Services.AddSingleton(provider => new Supabase.Client(url, key, options)); - } - ``` - - - - - - diff --git a/apps/docs/docs/reference/csharp/installing.mdx b/apps/docs/docs/reference/csharp/installing.mdx deleted file mode 100644 index e274af8e28032..0000000000000 --- a/apps/docs/docs/reference/csharp/installing.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -id: installing -title: 'Installing & Initialization' -slug: installing -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml ---- - -### Install from NuGet - - - - - You can install Supabase package from [nuget.org](https://www.nuget.org/packages/supabase-csharp/) - - - - - - - - - ```sh Terminal - dotnet add package supabase-csharp - ``` - - - - - - diff --git a/apps/docs/docs/reference/csharp/introduction.mdx b/apps/docs/docs/reference/csharp/introduction.mdx deleted file mode 100644 index a65afeeb2947c..0000000000000 --- a/apps/docs/docs/reference/csharp/introduction.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -id: introduction -title: Introduction -hideTitle: true ---- - -
    - -
    -

    C# Client Library

    -

    supabase-csharp

    -
    -
    - -{/* prettier-ignore */} -
    - This reference documents every object and method available in Supabase's C# library, [supabase-csharp](https://www.nuget.org/packages/supabase-csharp). You can use supabase-csharp 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/reference/csharp/v0/release-notes.mdx b/apps/docs/docs/reference/csharp/v0/release-notes.mdx deleted file mode 100644 index 2ecb0ef3990e7..0000000000000 --- a/apps/docs/docs/reference/csharp/v0/release-notes.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -id: release-notes -title: Release Notes ---- - -## dart v0 this is the release notes file. diff --git a/apps/docs/docs/reference/dart.mdx b/apps/docs/docs/reference/dart.mdx deleted file mode 100644 index c947324bc8ebd..0000000000000 --- a/apps/docs/docs/reference/dart.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -id: intro -slug: / -title: Supabase Flutter Library -sidebar_label: Supabase Flutter Library ---- - -This reference documents every object and method available in Supabase's isomorphic Flutter library, [`supabase-flutter`](https://pub.dev/packages/supabase_flutter). - -You can use the `supabase-flutter` library to: - -- interact with your Postgres database -- listen to database changes -- invoke Deno Edge Functions -- build login and user management functionality -- manage large files - -## For non-Flutter projects - -{/* prettier-ignore */} -We also have [supabase-dart](https://github.com/supabase-community/supabase-dart) for non-Flutter Dart projects, such as server-side Dart or Angular-Dart. supabase-dart shares most of the APIs with supabase-flutter without being dependent on Flutter so that you can use Supabase anywhere you can run Dart! - -## Additional Links - -- Source Code: [github.com/supabase/supabase-flutter](https://github.com/supabase/supabase-flutter) -- [Known bugs and issues](https://github.com/supabase/supabase-flutter/issues) diff --git a/apps/docs/docs/reference/dart/generated/.gitkeep b/apps/docs/docs/reference/dart/generated/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/apps/docs/docs/reference/dart/initializing.mdx b/apps/docs/docs/reference/dart/initializing.mdx deleted file mode 100644 index 80c69925a6a54..0000000000000 --- a/apps/docs/docs/reference/dart/initializing.mdx +++ /dev/null @@ -1,67 +0,0 @@ ---- -id: initializing -title: 'Initializing' -slug: initializing ---- - -## Flutter - -For `supabase-flutter`, you will be using the static `initialize()` method on `Supabase` class. - -### Flutter `initialize()` - -```dart main.dart -Future main() async { - await Supabase.initialize(url: 'https://xyzcompany.supabase.co', anonKey: 'public-anon-key'); - runApp(MyApp()); -} -``` - -### Access `SupabaseClient` instance - -Once you initialize Supabase in your `main()` method, you can access the `SupabaseClient` instance from anywhere in your app. - -```dart -final supabase = Supabase.instance.client; -``` - -### Call `initialize()` with custom headers - -You can pass `headers` to initialize your Supabase client with customer headers. -Here is an example of passing a custom auth header to Supabase client. - -```dart main.dart -Future main() async { - await Supabase.initialize( - url: 'https://xyzcompany.supabase.co', - anonKey: 'public-anon-key', - headers: { - 'Authorization': 'Bearer $accessToken', - }, - ); - runApp(const MyApp()); -} -``` - -### Call `initialize()`multiple times - -You can initialize Supabase multiple times in your app. When doing so, call `dispose()` each time before you initialize again. - -```dart -Supabase.instance.dispose(); - -await Supabase.initialize(url: 'https://xyzcompany.supabase.co', anonKey: 'public-anon-key'); -``` - -## Other Dart Projects - -You can initialize a new Supabase client using the `SupabaseClient()` method. - -The Supabase client is your entrypoint to the rest of the Supabase functionality -and is the easiest way to interact with everything we offer within the Supabase ecosystem. - -### Dart `SupabaseClient()` - -```dart -final supabase = SupabaseClient('https://xyzcompany.supabase.co', 'public-anon-key'); -``` diff --git a/apps/docs/docs/reference/dart/installing.mdx b/apps/docs/docs/reference/dart/installing.mdx deleted file mode 100644 index 5565c145a91b4..0000000000000 --- a/apps/docs/docs/reference/dart/installing.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: installing -title: 'Installing' -slug: installing ---- - -## Flutter - -For Flutter project, you can use [supabase_flutter](https://pub.dev/packages/supabase_flutter) package. - -```bash -flutter pub add supabase_flutter -``` - -## Other Dart projects - -For non-Flutter projects using Dart, such as server-side Dart or Angular-Dart, you can use the [supabase](https://pub.dev/packages/supabase) package. - -```bash -dart pub add supabase -``` diff --git a/apps/docs/docs/reference/dart/v0.mdx b/apps/docs/docs/reference/dart/v0.mdx deleted file mode 100644 index 9d8f0a3c03e77..0000000000000 --- a/apps/docs/docs/reference/dart/v0.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -id: intro -slug: / -sidebar_label: Supabase Dart Library -title: Supabase Dart Library ---- - - - -You're viewing the docs for an older version of the `supabase-flutter` library. - - - -This reference documents every object and method available in Supabase's isomorphic Dart library, `supabase-dart`. - -You can use the `supabase-dart` library to: - -- interact with your Postgres database -- listen to database changes -- invoke Deno Edge Functions -- build login and user management functionality -- manage large files - -## Additional Links - -- Source Code: [github.com/supabase/supabase-dart](https://github.com/supabase/supabase-dart) -- [Known bugs and issues](https://github.com/supabase/supabase-dart/issues) diff --git a/apps/docs/docs/reference/dart/v0/generated/.gitkeep b/apps/docs/docs/reference/dart/v0/generated/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/apps/docs/docs/reference/javascript.mdx b/apps/docs/docs/reference/javascript.mdx deleted file mode 100644 index 8f800d33dfc7c..0000000000000 --- a/apps/docs/docs/reference/javascript.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -slug: / -sidebar_position: 1 -id: supabase-js -title: Supabase JavaScript Library -sidebar_label: Supabase JavaScript Library -hide_table_of_contents: true ---- - -This reference documents every object and method available in Supabase's isomorphic JavaScript library, `supabase-js`. - -You can use the `supabase-js` library to: - -- interact with your Postgres database -- listen to database changes -- invoke Deno Edge Functions -- build login and user management functionality -- manage large files - -## Additional Links - -- Source Code: [github.com/supabase/supabase-js](https://github.com/supabase/supabase-js) -- TypeDoc: [supabase.github.io/supabase-js](https://supabase.github.io/supabase-js/v2/) -- NPM: [npmjs.com/package/@supabase/supabase-js](https://www.npmjs.com/package/@supabase/supabase-js) -- [Known bugs and issues](https://github.com/supabase/supabase-js/issues) diff --git a/apps/docs/docs/reference/javascript/generated/.gitkeep b/apps/docs/docs/reference/javascript/generated/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/apps/docs/docs/reference/javascript/installing.mdx b/apps/docs/docs/reference/javascript/installing.mdx deleted file mode 100644 index b948b44d38e0e..0000000000000 --- a/apps/docs/docs/reference/javascript/installing.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: installing -title: 'Installing' -slug: installing -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml ---- - -## JavaScript - - - - -```sh -npm install @supabase/supabase-js -``` - - - - -```sh -yarn add @supabase/supabase-js -``` - - - - -### CDN - -```js - -//or - -``` - -## 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/reference/javascript/release-notes.mdx b/apps/docs/docs/reference/javascript/release-notes.mdx deleted file mode 100644 index 5204c4517b72e..0000000000000 --- a/apps/docs/docs/reference/javascript/release-notes.mdx +++ /dev/null @@ -1,210 +0,0 @@ ---- -id: release-notes -title: Release Notes ---- - -Supabase.js v2 release notes. - -## 2.0.0 - -Install the latest with `npm install @supabase/supabase-js`. - -### Explicit constructor options - -All client specific options within the constructor are keyed to the library: [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 -// v2 - definitions are injected in `createClient()` -import type { Database } from './DatabaseDefinitions' -const supabase = createClient(SUPABASE_URL, ANON_KEY) -const { data } = await supabase.from('messages').select().match({ id: 1 }) - -// v1 -- previously definitions were injected in the `from()` method -supabase.from('messages').select('*') -``` - -Types can be generated via the CLI: - -```bash -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 -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 -// v2 -const { data } = await supabase.auth.signInWithPassword({ - email: 'hello@example', - password: 'pass', -}) -// v1 -const { data } = await supabase.auth.signIn({ - 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. - -```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() -``` - -We will deprecate the `.from().on().subscribe()` method previosuly used for listening to postgres changes. - -### 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://www.notion.so/LW5-supabase-js-v2-7b0bfcdf571d4f20b9b7a9308883f24b)) - - `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/reference/javascript/typescript-support.mdx b/apps/docs/docs/reference/javascript/typescript-support.mdx deleted file mode 100644 index ca747ef105b6c..0000000000000 --- a/apps/docs/docs/reference/javascript/typescript-support.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -id: typescript-support -title: Typescript Support ---- - -`supabase-js` supports Typescript. - -## Generating types - -You can use our CLI to generate types: - -```bash -supabase start -supabase gen types typescript --local > lib/database.types.ts -``` - -These types are generated directly from your database. Given a table `public.movies`, the definition will provide the following data: - -```tsx hello.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. - } - } - } -} -``` - -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. - -## Injecting type definitions - -You can enrich the supabase client with the types you generated with Supabase. - -```ts -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 -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/reference/javascript/v1.mdx b/apps/docs/docs/reference/javascript/v1.mdx deleted file mode 100644 index d31fd56873905..0000000000000 --- a/apps/docs/docs/reference/javascript/v1.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -id: intro -title: 'Supabase JavaScript Library' -slug: / -sidebar_label: Supabase JavaScript Library ---- - - - -You're viewing the docs for an older version of the `supabase-js` library. - - - -This reference documents every object and method available in Supabase's isomorphic JavaScript library, `supabase-js`. - -You can use the `supabase-js` library to: - -- interact with your Postgres database -- listen to database changes -- invoke Deno Edge Functions -- build login and user management functionality -- manage large files diff --git a/apps/docs/docs/reference/javascript/v1/generated/.gitkeep b/apps/docs/docs/reference/javascript/v1/generated/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/apps/docs/docs/reference/javascript/v1/generating-types.mdx b/apps/docs/docs/reference/javascript/v1/generating-types.mdx deleted file mode 100644 index 8878f4c191169..0000000000000 --- a/apps/docs/docs/reference/javascript/v1/generating-types.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: generating-types -title: 'Generating Types' -slug: generating-types -custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_js_v1.yml ---- - -Supabase will soon release native type generators that dump your database types for various languages. For now, we support TypeScript [through third-party tools](/docs/guides/database/api/generating-types). - -## Usage with TypeScript - -`supabase-js` ships with type definitions for usage with TypeScript and for convenient IntelliSense auto-complete and documentation in your editor. - -When using TypeScript, you can pass the type of database row as a type parameter to the `from` method to get better auto-completion support down the chain. -If you don't provide a type for the row you need to explicitly pass `from('tableName')`. - -```ts -type Message = { - id: number - inserted_at: string - message: string - user_id: string - channel_id: number - author: { username: string } -} - -const response = await supabase - .from('messages') // Message maps to the type of the row in your database. - .select('*, author:user_id(username)') - .match({ channel_id: 2 }) // Your IDE will be able to help with auto-completion. -response.data // Response data will be of type Array. - -// If you don't provide a type for the row you need to explicitly pass `from('tableName')`. -const response = await supabase - .from('messages') - .select('*, author:user_id(username)') - .match({ channel_id: 2 }) -response.data // Response data will be of type Array. -``` diff --git a/apps/docs/docs/reference/javascript/v1/initializing.mdx b/apps/docs/docs/reference/javascript/v1/initializing.mdx deleted file mode 100644 index 5672bd80f5749..0000000000000 --- a/apps/docs/docs/reference/javascript/v1/initializing.mdx +++ /dev/null @@ -1,133 +0,0 @@ ---- -id: initializing -title: 'Initializing' -slug: initializing -custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_js_v1.yml ---- - -You can initialize a new Supabase client using the `createClient()` method. - -The Supabase client is your entrypoint to the rest of the Supabase functionality -and is the easiest way to interact with everything we offer within the Supabase ecosystem. - -## Parameters - -
      - -
    • -

      - - supabaseUrl - - - required - - - string - -

      -
      - -The unique Supabase URL which is supplied when you create a new project in your project dashboard. - -
      - -
    • - -
    • -

      - - supabaseKey - - - required - - - string - -

      -
      - -The unique Supabase Key which is supplied when you create a new project in your project dashboard. - -
      - -
    • - -
    • -

      - - options - - - optional - - - SupabaseClientOptions - -

      -
      - -No description provided. - -
      - -
    • - -
    - -## Examples - -### createClient() - -```js -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') -``` - -### With additional parameters - -```js -import { createClient } from '@supabase/supabase-js' - -const options = { - schema: 'public', - headers: { 'x-my-custom-header': 'my-app-name' }, - autoRefreshToken: true, - persistSession: true, - detectSessionInUrl: true, -} -const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options) -``` - -### API schemas - -```js -import { createClient } from '@supabase/supabase-js' - -// Provide a custom schema. Defaults to "public". -const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { - schema: 'other_schema', -}) -``` - -By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard. -Go to `Settings > API > Schema` and add the schema which you want to expose to the API. You also need to grant `USAGE` on your new schema with the grants you desire, such as `SELECT, INSERT, UPDATE, DELETE`. - -Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema. - -### Custom `fetch` implementation - -```js -import { createClient } from '@supabase/supabase-js' - -const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { - fetch: fetch.bind(globalThis), -}) -``` - -`supabase-js` uses the [`cross-fetch`](https://www.npmjs.com/package/cross-fetch) library to make HTTP requests, -but an alternative `fetch` implementation can be provided as an option. -This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers). diff --git a/apps/docs/docs/reference/javascript/v1/installing.mdx b/apps/docs/docs/reference/javascript/v1/installing.mdx deleted file mode 100644 index e6e3abb615122..0000000000000 --- a/apps/docs/docs/reference/javascript/v1/installing.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -id: installing -title: 'Installing' -slug: installing -custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_js_v1.yml ---- - -All JavaScript libraries are built directly by the Supabase team. - -Other languages are built by the community and supported by Supabase. - -## JavaScript - -Via NPM - -```bash -npm install @supabase/supabase-js -``` - -Via Yarn - -```bash -yarn add @supabase/supabase-js -``` - -Find the source code on [GitHub](https://github.com/supabase/supabase-js). - -Or via CDN - -```js - -//or - -``` diff --git a/apps/docs/docs/reference/postgres/changing-timezones.mdx b/apps/docs/docs/reference/postgres/changing-timezones.mdx deleted file mode 100644 index e836b1bf2526d..0000000000000 --- a/apps/docs/docs/reference/postgres/changing-timezones.mdx +++ /dev/null @@ -1,95 +0,0 @@ ---- -id: changing-timezones -title: 'Changing Timezones' -slug: changing-timezones -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml ---- - -Data types. - - - - - -```sql -alter database postgres -set timezone to 'America/New_York'; -``` - - - - - -## Notes - -- View a full list of timezones on [Wikipedia](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). - -## Examples - -### Change timezone - - - - - -```sql -alter database postgres -set timezone to 'America/New_York'; -``` - - - - - -### Full list of timezones - -Get a full list of timezones supported by your database. This will return the following columns: - -- `name`: Time zone name -- `abbrev`: Time zone abbreviation -- `utc_offset`: Offset from UTC (positive means east of Greenwich) -- `is_dst`: True if currently observing daylight savings - - - - - -```sql -select name, abbrev, utc_offset, is_dst -from pg_timezone_names() -order by name; -``` - - - - - -### Search for a specific timezone - -Use `ilike` (case insensitive search) to find specific timezones. - - - - - -```sql -select * -from pg_timezone_names() -where name ilike '%york%'; -``` - - - - diff --git a/apps/docs/docs/reference/postgres/columns.mdx b/apps/docs/docs/reference/postgres/columns.mdx deleted file mode 100644 index 8ec74a21db25c..0000000000000 --- a/apps/docs/docs/reference/postgres/columns.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -id: columns -title: 'Columns' -slug: columns -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml ---- - -Creating columns. - - - - - -```sql -create table table_name ( - id integer primary key, - data jsonb, - name text -); -``` - - - - - -## Examples - -### During table creation - - - - - -```sql -create table table_name ( - id integer primary key, - data jsonb, - name text -); -``` - - - - - -### Create column - - - - - -```sql -alter table new_table -add new_column text; -``` - - - - diff --git a/apps/docs/docs/reference/postgres/connection-strings.mdx b/apps/docs/docs/reference/postgres/connection-strings.mdx deleted file mode 100644 index 4d7a60ae51643..0000000000000 --- a/apps/docs/docs/reference/postgres/connection-strings.mdx +++ /dev/null @@ -1,112 +0,0 @@ ---- -id: connection-strings -title: 'Connection Strings' -slug: connection-strings -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml ---- - -There are various ways to connect to your database, depending on the configuration of your Postgres instance and the tool which you are connecting with. - - - - - -```bash -postgres://postgres:postgres@localhost:5432/postgres -# or -postgresql://postgres:postgres@localhost:5432/postgres -``` - - - - - -## Notes - -- [Official Documentation](https://www.postgresql.org/docs/current/libpq-connect.html). -- Avoid using special characters usernames and passwords. If you use special characters in a connection URL, you'll need to URL encode any special characters. - -## Examples - -### Basic connection string - -If you're using a default setup, your postgres connection string will likely be in the format: - -`postgres://{user}:{password}@{host}:{port}/{database_name}` - - - - - -```bash -postgres://postgres:postgres@localhost:5432/postgres -# or -postgresql://postgres:postgres@localhost:5432/postgres -``` - - - - - -### JDBC - -See full [documentation](http://jdbc.postgresql.org/documentation/head/connect.html). - - - - - -```bash -jdbc:postgresql://{host}:{port}/{database_name} -``` - - - - - -### ADO.NET - -See full [documentation](http://npgsql.projects.postgresql.org/docs/manual/UserManual.html). - - - - - -```bash -Server=host;Port=5432;User Id=username;Password=secret;Database=database_name; -``` - - - - - -### PHP - -See full [documentation](http://php.net/manual/en/book.pgsql.php). - - - - - -```bash -host=hostname port=5432 dbname=databasename user=username password=secret -``` - - - - diff --git a/apps/docs/docs/reference/postgres/database-passwords.mdx b/apps/docs/docs/reference/postgres/database-passwords.mdx deleted file mode 100644 index 4cc8ec9fa8e29..0000000000000 --- a/apps/docs/docs/reference/postgres/database-passwords.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -id: database-passwords -title: 'Database Passwords' -slug: database-passwords -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml ---- - -Manage the passwords of your database users using any super user. - -## Examples - -### Password reset - - - - - -```sql -alter user postgres -with password 'new_password'; -``` - - - - diff --git a/apps/docs/docs/reference/postgres/database-users.mdx b/apps/docs/docs/reference/postgres/database-users.mdx deleted file mode 100644 index d13e862167962..0000000000000 --- a/apps/docs/docs/reference/postgres/database-users.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -id: database-users -title: 'Database Users' -slug: database-users -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml ---- - -Users and Roles are almost interchangeable. - -## Examples - -### Create New User - - - - - -```sql -create user new_user -with password 'hello'; -``` - - - - diff --git a/apps/docs/docs/reference/postgres/index.mdx b/apps/docs/docs/reference/postgres/index.mdx deleted file mode 100644 index 5d4e2e7a73114..0000000000000 --- a/apps/docs/docs/reference/postgres/index.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: index -title: 'Getting started' -slug: getting-started -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml ---- - -PostgreSQL, also known as Postgres, is a free and open-source relational -database management system emphasizing extensibility and SQL compliance. -It was originally named POSTGRES, referring to its origins as a successor -to the Ingres database developed at the University of California, Berkeley. diff --git a/apps/docs/docs/reference/postgres/publications.mdx b/apps/docs/docs/reference/postgres/publications.mdx deleted file mode 100644 index aabcc783c9925..0000000000000 --- a/apps/docs/docs/reference/postgres/publications.mdx +++ /dev/null @@ -1,166 +0,0 @@ ---- -id: publications -title: 'Publications' -slug: publications -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml ---- - -Publications are a way of grouping changes generated from a table or a group of tables. -These changes can then be sent to other systems (usually another Postgres database). - -## Examples - -### Create a Publication - -This publication will contain all changes to all tables. - - - - - -```sql -create publication publication_name -for all tables; -``` - - - - - -### Create a Publication which listens to individual tables - - - - - -```sql -create publication publication_name -for table table_one, table_two; -``` - - - - - -### Add tables to an existing publication - - - - - -```sql -alter publication publication_name -add table table_name; -``` - - - - - -### Listens to inserts only - - - - - -```sql -create publication publication_name -for all tables -with (publish = 'insert'); -``` - - - - - -### Listens to updates only - - - - - -```sql -create publication publication_name -for all tables -with (publish = 'update'); -``` - - - - - -### Listens to deletions only - - - - - -```sql -create publication publication_name -for all tables -with (publish = 'delete'); -``` - - - - - -### Remove a Publication - - - - - -```sql -drop publication if exists publication_name; -``` - - - - - -### Recreate a Publication - -If you are planning to re-create a publication, it's best to do it in a transaction to ensure the operation succeeds. - - - - - -```sql -begin; - -- remove the realtime publication - drop publication if exists publication_name; - - -- re-create the publication but don't enable it for any tables - create publication publication_name; -commit; -``` - - - - diff --git a/apps/docs/docs/reference/postgres/schemas.mdx b/apps/docs/docs/reference/postgres/schemas.mdx deleted file mode 100644 index 7b77f396b418c..0000000000000 --- a/apps/docs/docs/reference/postgres/schemas.mdx +++ /dev/null @@ -1,88 +0,0 @@ ---- -id: schemas -title: 'Schemas' -slug: schemas -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml ---- - -Schemas are like "folders". They help to keep your database organized. - -Schemas are particularly useful for security. You can set different permissions on each schema. -For example, you might want to use a `public` schema for user-facing data, and an `auth` schema for all logins and secured data. - - - - - -```sql -create schema schema_name; -``` - - - - - -## Notes - -- Schemas contain [tables](/docs/reference/postgres/tables), columns, triggers, functions, etc. -- Postgres comes with a `public` schema set up by default. -- It is best practice to use lowercase and underscores when naming schemas. For example: `schema_name`, not `Schema Name`. - -## Examples - -### Creating a schema - - - - - -```sql -create schema schema_name; -``` - - - - - -### Removing a schema - - - - - -```sql -drop schema if exists schema_name; -``` - - - - - -### Using special characters - -Although it's not recommended, you can use uppercase and spaces when naming your schema by wrapping the name with double-quotes. -As a result, you will always need to use double-quotes when referencing your schema. - - - - - -```sql -create schema "Schema Name"; -``` - - - - diff --git a/apps/docs/docs/reference/postgres/tables.mdx b/apps/docs/docs/reference/postgres/tables.mdx deleted file mode 100644 index ad95ca5fda1ce..0000000000000 --- a/apps/docs/docs/reference/postgres/tables.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -id: tables -title: 'Tables' -slug: tables -custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml ---- - -Tables are similar to excel spreadsheets. They contain columns & rows of data. There are a few key differences from a spreadsheet however: - -- Every column is a strict type of data. When you set up a column, you must define what "data type" it is. -- Tables can be joined together through relationships. For example you can have a "users" table, which is joined to a "teams" table. - - - - - -```sql -create table table_name ( - id integer primary key, - data jsonb, - name text -); - -# with schema -create table schema_name.table_name ( - id integer primary key, - data jsonb, - name text -); -``` - - - - - -## Notes - -- Tables contain columns, rows, triggers, comments, -- It is best practice to use lowercase and underscores when naming tables. For example: `table_name`, not `Table Name`. -- Tables belong to [schemas](/docs/reference/postgres/schemas). If you don't explicitly pass the schema, Postgres will assume that you want to create the table in the `public` schema. - -## Examples - -### Create table - - - - - -```sql -create table table_name ( - id integer primary key, - data jsonb, - name text -); - -# with schema -create table schema_name.table_name ( - id integer primary key, - data jsonb, - name text -); -``` - - - - - -### Primary keys using multiple columns - - - - - -```sql -create table table_name ( - column_1 data_type, - column_2 data_type - -- Constraints: - primary key (column_1, column_2) -); -``` - - - - - -### Multiple foreign keys to the same table - - - - - -```sql -alter table table_name - add constraint constraint_name_1 foreign key (column_1) references foreign_table(id), - add constraint constraint_name_2 foreign key (column_2) references foreign_table(id); -``` - - - - - -### Delete a table - - - - - -```sql -delete table if exists table_name; -``` - - - - diff --git a/apps/docs/docs/reference/realtime.mdx b/apps/docs/docs/reference/realtime.mdx deleted file mode 100644 index 890440d0ee922..0000000000000 --- a/apps/docs/docs/reference/realtime.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -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/reference/realtime/generated/.gitkeep b/apps/docs/docs/reference/realtime/generated/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/apps/docs/docs/reference/realtime/release-notes.mdx b/apps/docs/docs/reference/realtime/release-notes.mdx deleted file mode 100644 index b402b0d27087f..0000000000000 --- a/apps/docs/docs/reference/realtime/release-notes.mdx +++ /dev/null @@ -1,7 +0,0 @@ ---- -id: release-notes ---- - -# Release Notes - -All release notes can be found in the [GitHub Releases](https://github.com/supabase/realtime/releases) page. diff --git a/apps/docs/docs/reference/storage.mdx b/apps/docs/docs/reference/storage.mdx deleted file mode 100644 index e56f8949e7ea7..0000000000000 --- a/apps/docs/docs/reference/storage.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -slug: / -sidebar_position: 1 -id: storage-server -title: Supabase Storage Server -sidebar_label: Supabase Storage Server ---- - -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 - -Read [this post](https://supabase.com/blog/supabase-storage) on why we decided to build a new object storage service. - -## 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/) diff --git a/apps/docs/docs/reference/storage/generated/.gitkeep b/apps/docs/docs/reference/storage/generated/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/apps/docs/docs/reference/storage/release-notes.mdx b/apps/docs/docs/reference/storage/release-notes.mdx deleted file mode 100644 index 52c333f12fb2f..0000000000000 --- a/apps/docs/docs/reference/storage/release-notes.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -id: release-notes -title: Release Notes ---- - -All release notes can be found in the [GitHub Releases](https://github.com/supabase/storage-api/releases) page. diff --git a/apps/docs/generator/api.ts b/apps/docs/generator/api.ts deleted file mode 100644 index 6682e3a65ffab..0000000000000 --- a/apps/docs/generator/api.ts +++ /dev/null @@ -1,120 +0,0 @@ -import template from './templates/ApiTemplate' -import { slugify, toArrayWithKey, toTitle, writeToDisk } from './helpers' -import { OpenAPIV3, OpenAPIV2 } from 'openapi-types' -import * as fs from 'fs' -import * as ejs from 'ejs' - -export default async function gen(inputFileName: string, outputDir: string, apiUrl: string) { - const specRaw = fs.readFileSync(inputFileName, 'utf8') - const spec = JSON.parse(specRaw) as any - // console.log('spec', spec) - - switch (spec.openapi || spec.swagger) { - case '3.0.0': - case '3.0.3': - await gen_v3(spec, outputDir, { apiUrl }) - break - - case '2.0': - await gen_v2(spec, outputDir, { apiUrl }) - break - - default: - console.log('Unrecognized specification version:', spec.openapi) - break - } -} - -/** - * Versioned Generator - */ - -// OPENAPI-SPEC-VERSION: 3.0.0 -type v3OperationWithPath = OpenAPIV3.OperationObject & { - path: string -} -export type enrichedOperation = OpenAPIV3.OperationObject & { - path: string - fullPath: string - operationId: string -} -async 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') || [], - } - 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 = ejs.render(template, { - info: spec.info, - sections, - operations, - }) - // console.log(content) - // Write to disk - await writeToDisk(dest, content) - console.log('Saved: ', dest) -} - -// OPENAPI-SPEC-VERSION: 2.0 -async function gen_v2(spec: OpenAPIV2.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') || [], - } - 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 = ejs.render(template, { - info: spec.info, - sections, - operations, - }) - // console.log(content) - // Write to disk - await writeToDisk(dest, content) - console.log('Saved: ', dest) -} diff --git a/apps/docs/generator/cli.ts b/apps/docs/generator/cli.ts deleted file mode 100644 index 86013beb52d0d..0000000000000 --- a/apps/docs/generator/cli.ts +++ /dev/null @@ -1,47 +0,0 @@ -import * as fs from 'fs' -import * as ejs from 'ejs' -import * as yaml from 'js-yaml' -import { writeToDisk } from './helpers' -import template from './templates/CliTemplate' -import type { CliSpec } from './types/CliSpec' - -export default async function gen(inputFileName: string, outputDir: string) { - const spec = yaml.load(fs.readFileSync(inputFileName, 'utf8')) as any - - switch (spec.clispec) { - case '001': - await gen_v001(spec, outputDir) - break - - default: - console.log('Unrecognized specification version:', spec.clispec) - break - } -} - -/** - * Versioned Generator - */ -async function gen_v001(spec: CliSpec, dest: string) { - let commandMap = new Map(spec.commands.map((item) => [item.id, item])) - - const commands = spec.commands.map((x) => { - const isChild = x.subcommands.length < 1 - const heading = isChild ? `### ${x.summary} [#${x.id}]` : `## ${x.summary} [#${x.id}]` - - return { - ...x, - heading, - subcommandList: x.subcommands.map((c) => commandMap.get(c)), - } - }) - - const content = ejs.render(template, { - info: spec.info, - commands, - }) - // console.log(content) - // Write to disk - await writeToDisk(dest, content) - console.log('Saved: ', dest) -} diff --git a/apps/docs/generator/config.ts b/apps/docs/generator/config.ts deleted file mode 100644 index cb6af22cf004f..0000000000000 --- a/apps/docs/generator/config.ts +++ /dev/null @@ -1,44 +0,0 @@ -import template from './templates/ConfigTemplate' -import type { ConfigSpec } from './types/ConfigSpec' - -import * as fs from 'fs' -import * as ejs from 'ejs' -import * as yaml from 'js-yaml' -import { writeToDisk } from './helpers' - -type Section = { - id: string - title: string -} - -export default async function gen(inputFileName: string, outputDir: string) { - const spec = yaml.load(fs.readFileSync(inputFileName, 'utf8')) as any - // console.log('spec', spec) - - switch (spec.configspec) { - case '001': - await gen_v001(spec, outputDir) - break - - default: - console.log('Unrecognized specification version:', spec.configspec) - break - } -} - -/** - * Versioned Generator - */ -async function gen_v001(spec: ConfigSpec, dest: string) { - const specLayout = spec.info.tags - const sections = specLayout.map((section: Section) => { - const parameters = spec.parameters.filter((parameter) => parameter.tags[0] === section.id) - return { ...section, parameters } - }) - - const content = ejs.render(template, { info: spec.info, sections }) - // console.log(content) - // Write to disk - await writeToDisk(dest, content) - console.log('Saved: ', dest) -} diff --git a/apps/docs/generator/helpers.ts b/apps/docs/generator/helpers.ts deleted file mode 100644 index 30b8037d818c4..0000000000000 --- a/apps/docs/generator/helpers.ts +++ /dev/null @@ -1,42 +0,0 @@ -import * as fs from 'fs' -import { mapValues, values } from 'lodash' - -export const slugify = (text: string) => { - if (!text) return '' - 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 -export const toTitle = (text: string) => { - return text.charAt(0).toUpperCase() + text.slice(1) -} - -/** - * writeToDisk() - */ -export const writeToDisk = (fileName: string, content: any) => { - return new Promise((resolve, reject) => { - fs.writeFile(fileName, content, (err: any) => { - if (err) return reject(err) - else return resolve(true) - }) - }) -} - -/** - * 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/generator/index.ts b/apps/docs/generator/index.ts deleted file mode 100644 index 2623ffe79d32b..0000000000000 --- a/apps/docs/generator/index.ts +++ /dev/null @@ -1,64 +0,0 @@ -import ApiGenerator from './api' -import CliGenerator from './cli' -import ConfigGenerator from './config' -import SdkGenerator from './sdk' -import LegacyGenerator from './legacy' - -const main = (command: string[], options: any) => { - handleInput(command[0], options) -} - -// Run everything -const argv = require('minimist')(process.argv.slice(2)) -main(argv['_'], argv) - -function handleInput(command: string, options: any) { - switch (command) { - case 'gen': - DocGenerator(options) - break - - default: - console.log('Unrecognized command:', command) - break - } -} - -export default async function DocGenerator({ - input, - output, - type, - url, -}: { - input: string - output: string - type: 'cli' | 'config' | 'sdk' | 'api' | 'legacy' - url?: string -}) { - switch (type) { - case 'api': - await ApiGenerator(input, output, url || '') - break - - case 'cli': - await CliGenerator(input, output) - break - - case 'config': - await ConfigGenerator(input, output) - break - - case 'sdk': - await SdkGenerator(input, output) - break - - case 'legacy': - await LegacyGenerator(input, output) - break - - default: - await console.log('Unrecognized type: ', type) - break - } - return 'Done' -} diff --git a/apps/docs/generator/legacy.ts b/apps/docs/generator/legacy.ts deleted file mode 100644 index 29ff1c5617e8c..0000000000000 --- a/apps/docs/generator/legacy.ts +++ /dev/null @@ -1,302 +0,0 @@ -// @ts-nocheck - -/** - * Usage: - * ts-node ReferenceGenerator.ts -o {output_dir} {input}.yml - * - * Example: - * ts-node ReferenceGenerator.ts -o docs/client spec/supabase.yml - */ - -import Example from './legacy/components/Example' -import Page from './legacy/components/Page' -import Tab from './legacy/components/Tab' -import { slugify, tsDocCommentToMdComment, writeToDisk } from './legacy/lib/helpers' -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')) - const defRef = docSpec.info.definition ? fs.readFileSync(docSpec.info.definition, 'utf8') : '{}' - - const definition = JSON.parse(defRef) - const id = docSpec.info.id - const allLanguages = docSpec.info.libraries - const pages = Object.entries(docSpec.functions).map(([name, x]: [string, OpenRef.Page]) => ({ - ...x, - pageName: name, - })) - - // Index Page - const indexFilename = outputDir + `/index.mdx` - const index = generateDocsIndexPage(docSpec, inputFileName) - await writeToDisk(indexFilename, index) - console.log('The index was saved: ', indexFilename) - - // Generate Pages - pages.forEach(async (pageSpec: OpenRef.Page) => { - try { - // 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) - - const description = - pageSpec.description || tsDocCommentToMdComment(getDescriptionFromDefinition(tsDefinition)) - - // Create page - const content = Page({ - slug: slug, - id: pageSpec.id, - specFileName: docSpec.info.specUrl || inputFileName, - title: pageSpec.title || pageSpec.pageName, - description, - parameters: hasTsRef ? generateParameters(tsDefinition) : '', - spotlight: generateSpotlight(id, pageSpec['examples'] || [], allLanguages), - examples: generateExamples(id, pageSpec['examples'] || [], allLanguages), - notes: pageSpec.notes, - }) - //console.log({ slug }) - // Write to disk - const dest = outputDir + `/${slug}.mdx` - await writeToDisk(dest, content) - console.log('Saved: ', dest) - } catch (error) { - console.error(error) - } - }) -} - -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 '' - - const paramDefinitions: TsDoc.TypeDefinition[] = functionDeclaration.signatures[0].parameters // PMC: seems flaky.. why the [0]? - if (!paramDefinitions) return '' - - // const paramsComments: TsDoc.CommentTag = tsDefinition.comment?.tags?.filter(x => x.tag == 'param') - let parameters = paramDefinitions.map((x) => recurseThroughParams(x)).join(`\n`) - return methodListGroup(parameters) -} - -function getDescriptionFromDefinition(tsDefinition) { - if (!tsDefinition) return null - if (['Method', 'Constructor', 'Constructor signature'].includes(tsDefinition.kindString)) - return tsDefinition?.signatures[0].comment - else return tsDefinition?.comment || '' -} - -function recurseThroughParams(paramDefinition: TsDoc.TypeDefinition) { - // If this is a reference to another Param, let's use the reference instead - let param = isDereferenced(paramDefinition) ? paramDefinition.type?.dereferenced : paramDefinition - const labelParams = generateLabelParam(param) - let subContent = '' - - let children = param?.children - if (param.type?.declaration?.children) { - children = param.type?.declaration?.children - } else if (isUnion(param)) { - // We don't want to show the union types if it's a literal - const nonLiteralVariants = param.type.types.filter(({ type }) => type !== 'literal') - - if (nonLiteralVariants.length === 0) { - children = null - } else { - children = nonLiteralVariants - } - } else if (param.type === 'reflection') { - children = param.declaration.children - } - - if (!!children) { - let 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)) - - let heading = `
    Properties
    ` - subContent = methodListGroup([heading].concat(properties).join('\n')) - return methodListItemLabel(labelParams, subContent) - } - return methodListItemLabel(labelParams, subContent) -} - -const isDereferenced = (paramDefinition: TsDoc.TypeDefinition) => { - return paramDefinition.type?.type == 'reference' && paramDefinition.type?.dereferenced?.id -} - -const isUnion = (paramDefinition: TsDoc.TypeDefinition) => { - return paramDefinition.type?.type == 'union' -} - -const mergeUnion = (paramDefinition: TsDoc.TypeDefinition) => { - const joined = paramDefinition.type.types.reduce((acc, x) => { - acc.push(...(x.declaration?.children || [])) - return acc - }, []) - - return uniqBy(joined, 'name') -} - -const methodListGroup = (items) => ` -
      - ${items} -
    -` - -const methodListItemLabel = ({ name, isOptional, type, description }, subContent) => ` -
  • -

    - - ${name} - - - ${isOptional ? 'optional' : 'required'} - - - ${type} - -

    -
    - -${description ? description : 'No description provided. '} - -
    - ${subContent} -
  • -` - -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, - }) - }) -} - -/** - * A spotlight is an example which appears at the top of the page. - */ -function generateSpotlight(id: string, specExamples: any | any[], allLanguages: any) { - if (!Array.isArray(specExamples)) { - throw new Error(`Examples for each spec should be an array, received: \n${specExamples}`) - } - const spotlight = (specExamples && specExamples.find((x) => x.isSpotlight)) || null - const spotlightContent = !spotlight ? '' : generateCodeBlocks(allLanguages, spotlight) - return spotlightContent -} - -function generateTabs(allLanguages: any, example: any) { - return allLanguages - .map((library) => { - let content = example[library.id] || notImplemented - return Tab(library.id, content) - }) - .join('\n') -} - -function generateCodeBlocks(allLanguages: any, example: any) { - return allLanguages - .map((library) => { - let content = example[library.id] || notImplemented - return content - }) - .join('\n') -} - -const notImplemented = ` -\`\`\` -Not yet implemented -\`\`\` -` - -function generateLabelParam(param: any) { - let labelParams = {} - if (typeof param.type === 'string' && param.type === 'literal') { - labelParams = { - name: param.name ?? param.value, - isOptional: !!param.flags?.isOptional, - type: param.type, - description: param.comment ? tsDocCommentToMdComment(param.comment) : null, - } - } else { - labelParams = { - name: param.name ?? extractParamTypeAsString(param), - isOptional: !!param.flags?.isOptional, - type: extractParamTypeAsString(param), - description: param.comment ? tsDocCommentToMdComment(param.comment) : null, - } - } - return labelParams -} - -function extractParamTypeAsString(paramDefinition) { - if (paramDefinition.type?.name) { - return `${paramDefinition.type.name}` - } else if (paramDefinition.type?.type == 'union') { - return paramDefinition.type.types - .map((x) => - x.value - ? `${x.value}` - : x.name - ? `${x.name}` - : x.type - ? `${x.type}` - : '' - ) - .join(' | ') - } - - return 'object' -} - -/** - * Iterates through the definition to find the correct definition. - * You can pass it a deeply nested node using dot notation. eg: 'LoggedInUser.data.email' - */ -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 -} - -function generateDocsIndexPage(docSpec: any, inputFileName: string) { - return Page({ - slug: (docSpec.info.slugPrefix || '') + slugify(docSpec.info.title), - id: 'index', - title: docSpec.info.title, - specFileName: inputFileName, - description: docSpec.info.description, - }) -} diff --git a/apps/docs/generator/legacy/components/Example.ts b/apps/docs/generator/legacy/components/Example.ts deleted file mode 100644 index efeb1d9f0e55f..0000000000000 --- a/apps/docs/generator/legacy/components/Example.ts +++ /dev/null @@ -1,26 +0,0 @@ -type params = { name: string; description: string; tabs: string; note: string } - -const Example = ({ name, description = '', tabs = '', note = '' }: params) => { - if (note !== '') { - const [noteTitle, ...noteText] = note.split('\n') - console.log(noteText) - note = ` - - -${noteText.join('\n')} - - -` - } - return ` -### ${name} - -${description} - -${tabs} - -${note} -`.trim() -} - -export default Example diff --git a/apps/docs/generator/legacy/components/Page.ts b/apps/docs/generator/legacy/components/Page.ts deleted file mode 100644 index 1a2ef1a253d5a..0000000000000 --- a/apps/docs/generator/legacy/components/Page.ts +++ /dev/null @@ -1,62 +0,0 @@ -type PageParmas = { - id: string - title: string - slug: string - specFileName: string - description?: string - parameters?: string - examples?: string[] - spotlight?: string - notes?: string - result?: string - errors?: string -} - -const Page = ({ - id, - title, - slug, - specFileName, - description = '', - parameters = '', - examples = [], - spotlight = '', - notes = '', - result = '', - errors = '', -}: PageParmas) => - ` ---- -id: ${id} -title: "${title}" -slug: ${slug} -custom_edit_url: ${specFileName} ---- - -${description} - -${spotlight} - -${parameters ? `## Parameters` : ''} - -${parameters} - -${notes ? '## Notes' : ''} - -${notes} - -${result ? `## Result` : ''} - -${result} - -${errors ? `## Errors` : ''} - -${errors} - -${examples.length > 0 ? '## Examples' : ''} - -${examples.join(`\n\n`)} - -`.trim() - -export default Page diff --git a/apps/docs/generator/legacy/components/Sidebar.ts b/apps/docs/generator/legacy/components/Sidebar.ts deleted file mode 100644 index a5f59cd7d2de9..0000000000000 --- a/apps/docs/generator/legacy/components/Sidebar.ts +++ /dev/null @@ -1,10 +0,0 @@ -const Sidebar = (categories: string[]) => - ` -module.exports = { - docs: [ - ${categories.map((x) => x).join(',\n ')} - ], -} -`.trim() - -export default Sidebar diff --git a/apps/docs/generator/legacy/components/SidebarCategory.ts b/apps/docs/generator/legacy/components/SidebarCategory.ts deleted file mode 100644 index 5374101dd6a16..0000000000000 --- a/apps/docs/generator/legacy/components/SidebarCategory.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default function SidebarCategory(name: string, items: string[]) { - return `{ - type: 'category', - label: '${name}', - items: [${items.join(', ')}], - collapsed: true, - }` -} diff --git a/apps/docs/generator/legacy/components/Tab.ts b/apps/docs/generator/legacy/components/Tab.ts deleted file mode 100644 index d6b83c419c71d..0000000000000 --- a/apps/docs/generator/legacy/components/Tab.ts +++ /dev/null @@ -1,10 +0,0 @@ -const Tab = (library: string, exampleText: string) => - ` - - -${exampleText} - - -`.trim() - -export default Tab diff --git a/apps/docs/generator/legacy/components/Tabs.ts b/apps/docs/generator/legacy/components/Tabs.ts deleted file mode 100644 index 9daff630c932f..0000000000000 --- a/apps/docs/generator/legacy/components/Tabs.ts +++ /dev/null @@ -1,15 +0,0 @@ -// @ts-nocheck - -const Tabs = (id: string, libraries = [], examples = []) => - ` - `{ label: '${x.name}', value: '${x.id}' }`).toString()}]}> - -${examples} - - -`.trim() - -export default Tabs diff --git a/apps/docs/generator/legacy/definitions.ts b/apps/docs/generator/legacy/definitions.ts deleted file mode 100644 index 72d50ce8f29aa..0000000000000 --- a/apps/docs/generator/legacy/definitions.ts +++ /dev/null @@ -1,34 +0,0 @@ -export namespace TsDoc { - export type DocComment = { - shortText?: string - text?: string - tags?: CommentTag[] - } - export type CommentTag = { - tag: 'param' | 'returns' - text: string - param: string - } - - export type TypeDefinition = { - id: string - name: string - kind: number - kindString: 'Parameter' | 'Method' - comment?: CommentTag - flags: { isExported: boolean; isOptional?: boolean } - type: { type: string; name: string; declaration: TypeDefinition } - children: TypeDefinition[] - } -} - -export namespace OpenRef { - export type Page = { - pageName: string - title?: string - description?: string - notes?: string - id: string - // $ref?: string // reference to a TSDoc node - } -} diff --git a/apps/docs/generator/legacy/lib/helpers.ts b/apps/docs/generator/legacy/lib/helpers.ts deleted file mode 100644 index 5165789f2b062..0000000000000 --- a/apps/docs/generator/legacy/lib/helpers.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { TsDoc } from '../definitions' - -const fs = require('fs') - -/** - * tsDocCommentToMdParams() - */ -export const tsDocCommentToMdParams = (tags: TsDoc.CommentTag[]) => - tags - .filter((x) => x.tag == 'param') - .map((x) => - ` -tag - -`.trim() - ) - .join('\n') - -/** - * tsDocCommentToMarkdown() - */ -export const tsDocCommentToMdComment = (commentObject: TsDoc.DocComment) => - ` -${commentObject?.shortText || ''} - -${commentObject?.text || ''} - -`.trim() - -/** - * slugify() - */ -export 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 -} - -/** - * writeToDisk() - */ -export const writeToDisk = (fileName: string, content: any) => { - return new Promise((resolve, reject) => { - fs.writeFile(fileName, content, (err: Error) => { - if (err) return reject(err) - else return resolve(true) - }) - }) -} diff --git a/apps/docs/generator/sdk.ts b/apps/docs/generator/sdk.ts deleted file mode 100644 index 2adb10c3898e1..0000000000000 --- a/apps/docs/generator/sdk.ts +++ /dev/null @@ -1,39 +0,0 @@ -import * as fs from 'fs' -import * as ejs from 'ejs' -import * as yaml from 'js-yaml' -import template from './templates/SdkTemplate' -import { writeToDisk } from './helpers' -import type { SdkSpec } from './types/SdkSpec' - -export default async function gen(inputFileName: string, outputDir: string) { - const spec = yaml.load(fs.readFileSync(inputFileName, 'utf8')) as any - // console.log('spec', spec) - - switch (spec.sdkspec) { - case '001': - await gen_v001(spec, outputDir) - break - - default: - console.log('Unrecognized specification version:', spec.sdkspec) - break - } -} - -/** - * Versioned Generator - */ -async function gen_v001(spec: SdkSpec, dest: string) { - const functions = spec.functions - const types = spec.types - - const content = ejs.render(template, { - info: spec.info, - functions, - types, - }) - // console.log(content) - // Write to disk - await writeToDisk(dest, content) - console.log('Saved: ', dest) -} diff --git a/apps/docs/generator/templates/ApiTemplate.ts b/apps/docs/generator/templates/ApiTemplate.ts deleted file mode 100644 index d27a424d9b1ac..0000000000000 --- a/apps/docs/generator/templates/ApiTemplate.ts +++ /dev/null @@ -1,144 +0,0 @@ -const template = ` ---- -id: usage -slug: /usage -title: Usage -toc_max_heading_level: 3 ---- - - - - -<%- info.description %> - - - - -<% sections.forEach(function(section){ %> - -## <%- section.title %> [#<%= section.id %>] - -<%- section.description %> - -<% section.operations.forEach(function(operation){ %> - - - -### <%- operation.summary %> [#<%- operation.operationId %>] - -\`\`\` -<%- operation.operation.toUpperCase() %> <%- operation.fullPath %> -\`\`\` - - - -<% if(operation.parameters && operation.parameters.filter((parameter) => parameter.in === 'path').length > 0){ %> -#### Path Parameters - -
      -<% operation.parameters -.filter((parameter) => parameter.in === 'path').forEach(function(parameter){ %> -
    • -

      - - <%- parameter.name %> - - - <%- parameter.required ? 'required' : 'optional' %> - - - <%- parameter.type %> - -

      - <% if(parameter.example){ %> -

      - Example: - - <%- parameter.example %> - -

      - <% } %> -
      - <%- parameter.description %> -
      -
    • -<% }); %> -
    -<% }; %> - -<% if(operation.parameters && operation.parameters.filter((parameter) => parameter.in === 'header').length > 0){ %> -#### Header Parameters -
      -<% operation.parameters -.filter((parameter) => parameter.in === 'header').forEach(function(parameter){ %> -
    • -

      - - <%- parameter.name %> - - - <%- parameter.required ? 'required' : 'optional' %> - - - <%- parameter.type %> - -

      - <% if(parameter.example){ %> -

      - Example: - - <%- parameter.example %> - -

      - <% } %> -
      - <%- parameter.description %> -
      -
    • -<% }); %> -
    -<% }; %> - - - - -<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ %> -#### Body Parameters - -\`\`\`json -<%- JSON.stringify(operation.requestBody?.content['application/json'], null, 2) %> -\`\`\` -<% }; %> - - - -#### Responses - - -<% operation.responseList.forEach(function(response){ %> - - -<%- response.description %> - - - -<% if(response?.content && response?.content['application/json']){ %> -\`\`\`json -<%- JSON.stringify(response.content['application/json'], null, 2) %> -\`\`\` -<% }; %> - - - - -<% }); %> - - -
    -<% }); %> -<% }); %> - - -`.trim() - -export default template diff --git a/apps/docs/generator/templates/CliTemplate.ts b/apps/docs/generator/templates/CliTemplate.ts deleted file mode 100644 index 92bc55d38317e..0000000000000 --- a/apps/docs/generator/templates/CliTemplate.ts +++ /dev/null @@ -1,52 +0,0 @@ -const template = ` ---- -id: usage -slug: /usage -title: Usage -toc_max_heading_level: 3 ---- - -{/* */} - -<%- info.description %> - -<% commands.forEach(function(command){ %> - -{/* */} - -

    - -<%- command.heading %> - -{/* */} - -<%- command.description %> - - -<% if(command.usage){ %> -<%- command.usage %> -<% }; %> - -{/* */} - -<% if(command.subcommands.length > 0){ %> -**Available Commands** - -<% command.subcommandList.forEach(function(subcommand){ %> -- <%- subcommand.title %> -<% }); %> -<% } %> - - -{/* */} - -**Options** - -<%- command.options %> - -<% }); %> - -{/* */} -`.trim() - -export default template diff --git a/apps/docs/generator/templates/ConfigTemplate.ts b/apps/docs/generator/templates/ConfigTemplate.ts deleted file mode 100644 index 45185b23a7e39..0000000000000 --- a/apps/docs/generator/templates/ConfigTemplate.ts +++ /dev/null @@ -1,41 +0,0 @@ -const template = ` ---- -id: config -slug: /config -title: Configuration -toc_max_heading_level: 3 ---- - - - -<%= info.description %> - -<% sections.forEach(function(section){ %> - - - -## <%= section.title %> [#<%= section.id %>] - -<% section.parameters.forEach(function(parameter){ %> - -### \`<%- parameter.title %>\` [#<%= parameter.id %>] - -<%- parameter.description %> - -
      -
    • Required: <%= parameter.required %>
    • -
    • Default: <%- parameter?.default ? parameter?.default : 'None' %>
    • <% if(parameter?.links?.length){ %> -
    • -

      See also:

      - -
    • -<% } %> -
    - -
    -<% }); %> - -<% }); %> -`.trim() - -export default template diff --git a/apps/docs/generator/templates/SdkTemplate.ts b/apps/docs/generator/templates/SdkTemplate.ts deleted file mode 100644 index 4d8b7c5f63e42..0000000000000 --- a/apps/docs/generator/templates/SdkTemplate.ts +++ /dev/null @@ -1,51 +0,0 @@ -const template = ` ---- -id: usage -title: Usage -toc_max_heading_level: 2 ---- - - - -<%- info.description %> - - - - - -<% functions.forEach(function(fn){ %> - -## <%- fn.summary %> - -<%- fn.usage %> - -<% if (fn.attributes) { %> - -### Attributes - -<% fn.attributes.forEach(function(attribute){ %> -- <%- attribute.id %> -<% }); %> - -<% } %> - -### Notes - -<%- fn.description %> - -### Examples - -<% fn.examples.forEach(function(example){ %> - -#### <%- example.summary %> - -<%- example.code %> - -<% }); %> - -<% }); %> - - -`.trim() - -export default template diff --git a/apps/docs/generator/tsconfig.json b/apps/docs/generator/tsconfig.json deleted file mode 100644 index 8615cb5639ee1..0000000000000 --- a/apps/docs/generator/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -// generator files need their own tsconfig.json because they don't like "module": "esnext" setting that nextjs requires in the main tsconfig -{ - "compilerOptions": { - "incremental": true, - "noImplicitAny": false, - "baseUrl": ".", - "paths": { - "~/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] -} diff --git a/apps/docs/generator/types/CliSpec.ts b/apps/docs/generator/types/CliSpec.ts deleted file mode 100644 index 8c3515e708eb7..0000000000000 --- a/apps/docs/generator/types/CliSpec.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { SpecLink } from './Spec' -import { Url } from 'url' - -export type CliInfo = { - id: string - version: string - title: string - language: string - source: Url - bugs: Url - spec: Url - description: string - options: string -} - -export type CliCommand = { - id: string - title: string - summary: string - description: string - tags: string[] - links: SpecLink[] - usage: string - subcommands: string[] - options: string -} - -export interface CliSpec { - clispec: '001' - - info: CliInfo - - commands: CliCommand[] -} diff --git a/apps/docs/generator/types/ConfigSpec.ts b/apps/docs/generator/types/ConfigSpec.ts deleted file mode 100644 index 6981b9b4e220b..0000000000000 --- a/apps/docs/generator/types/ConfigSpec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { SpecLink } from './Spec' -import { Url } from 'url' - -export type Tag = { - id: string - title: string - description?: string -} - -export type ConfigInfo = { - id: string - version: string - title: string - source: Url - bugs: Url - spec: Url - description: string - tags: Tag[] -} - -export type ConfigParameter = { - id: string - title: string - tags: string[] - required: boolean - description: string - links: SpecLink[] -} - -export interface ConfigSpec { - configspec: '001' - - info: ConfigInfo - - parameters: ConfigParameter[] -} diff --git a/apps/docs/generator/types/SdkSpec.ts b/apps/docs/generator/types/SdkSpec.ts deleted file mode 100644 index 9664d2e2110e3..0000000000000 --- a/apps/docs/generator/types/SdkSpec.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { SpecLink } from './Spec' -import { Url } from 'url' - -export type SdkInfo = { - id: string - version: string - title: string - language: string - source: Url - bugs: Url - spec: Url - description: string - options: string -} - -export type SdkType = { - id: string - title: string - summary: string - source: Url - value: string - ref?: SdkType - links: SpecLink[] -} - -export type FunctionAttribute = { - id: string - title: string - required: boolean - description: string - type?: string[] - ref?: string // If a "type" is not supplied, a "ref" must be. This is a pointer to a type. - children: FunctionAttribute[] -} - -export type FunctionReturn = { - id: string - title: string - value: string - description: string - ref?: string // This is a pointer to a type. -} - -export type FunctionExample = { - id: string - title: string - description?: string - links: SpecLink[] - code: string - returns?: FunctionReturn -} - -export type Function = { - id: string - title: string - summary: string - source: Url - description?: string - usage: string - tags: string[] - links: SpecLink[] - attributes?: FunctionAttribute[] - returns?: FunctionReturn[] - examples?: FunctionExample[] -} - -export interface SdkSpec { - sdkspec: '001' - - info: SdkInfo - - functions: Function[] - - types: SdkType[] -} diff --git a/apps/docs/generator/types/Spec.ts b/apps/docs/generator/types/Spec.ts deleted file mode 100644 index 6f6c2c72e87b8..0000000000000 --- a/apps/docs/generator/types/Spec.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Url } from 'url' - -export type SpecLink = { - name: string - url: Url -} diff --git a/apps/docs/hooks/useActionKey.ts b/apps/docs/hooks/useActionKey.ts deleted file mode 100644 index 98db6a52d0127..0000000000000 --- a/apps/docs/hooks/useActionKey.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { useState, useEffect } from 'react' - -const ACTION_KEY_DEFAULT = ['Ctrl ', 'Control'] as const -const ACTION_KEY_APPLE = ['⌘', 'Command'] as const - -export function useActionKey() { - let [actionKey, setActionKey] = useState() - - useEffect(() => { - if (typeof navigator !== 'undefined') { - if (/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)) { - setActionKey(ACTION_KEY_APPLE) - } else { - setActionKey(ACTION_KEY_DEFAULT) - } - } - }, []) - - return actionKey -} diff --git a/apps/docs/hooks/useFlag.ts b/apps/docs/hooks/useFlag.ts deleted file mode 100644 index 3e990f6b3a83f..0000000000000 --- a/apps/docs/hooks/useFlag.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { useContext } from 'react' -import FlagContext from 'components/Flag/FlagContext' - -export function useFlag(name: string) { - const store: any = useContext(FlagContext) - return store[name] -} diff --git a/apps/docs/hooks/useHash.ts b/apps/docs/hooks/useHash.ts deleted file mode 100644 index 92c0cec4fb841..0000000000000 --- a/apps/docs/hooks/useHash.ts +++ /dev/null @@ -1,29 +0,0 @@ -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 deleted file mode 100644 index d1ff05f505f59..0000000000000 --- a/apps/docs/hooks/useIsMounted.ts +++ /dev/null @@ -1,12 +0,0 @@ -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 deleted file mode 100644 index 52977307542ae..0000000000000 --- a/apps/docs/hooks/useMenuState.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { proxy, useSnapshot } from 'valtio' - -export const menuState = proxy({ - // values - menuActiveRefId: 'home', - // set states - setMenuActiveRefId: (value) => { - menuState.menuActiveRefId = value - }, - menuLevelId: 'home', - setMenuLevelId: (value) => { - menuState.menuMobileOpen = false - 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 deleted file mode 100644 index 5545b45f2119f..0000000000000 --- a/apps/docs/hooks/useWindowLocation.ts +++ /dev/null @@ -1,37 +0,0 @@ -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/internals/files/api.mjs b/apps/docs/internals/files/api.mjs deleted file mode 100644 index 0f405c4edf2df..0000000000000 --- a/apps/docs/internals/files/api.mjs +++ /dev/null @@ -1,13 +0,0 @@ -import sections from '../../../../spec/common-api-sections.json' assert { type: 'json' } -import { flattenSections } from '../helpers.mjs' - -const flatSections = flattenSections(sections) - -export function generateAPIPages() { - let apiPages = [] - - flatSections.map((section) => { - apiPages.push(`reference/api/${section.slug}`) - }) - return apiPages -} diff --git a/apps/docs/internals/files/cli.mjs b/apps/docs/internals/files/cli.mjs deleted file mode 100644 index 9b7dad4616897..0000000000000 --- a/apps/docs/internals/files/cli.mjs +++ /dev/null @@ -1,18 +0,0 @@ -import fs from 'fs' -import yaml from 'js-yaml' -import cliCommonSections from '../../../../spec/common-cli-sections.json' assert { type: 'json' } -import { flattenSections } from '../helpers.mjs' - -const flatCLISections = flattenSections(cliCommonSections) - -const cliSpec = yaml.load(fs.readFileSync(`../../spec/cli_v1_commands.yaml`, 'utf8')) - -export function generateCLIPages() { - let cliPages = [] - - cliSpec.commands.map((section) => { - const slug = flatCLISections.find((item) => item.id === section.id)?.slug - if (slug) cliPages.push(`reference/cli/${slug}`) - }) - return cliPages -} diff --git a/apps/docs/internals/files/reference-lib.mjs b/apps/docs/internals/files/reference-lib.mjs deleted file mode 100644 index 71c6c3bc36869..0000000000000 --- a/apps/docs/internals/files/reference-lib.mjs +++ /dev/null @@ -1,28 +0,0 @@ -import fs from 'fs' - -import yaml from 'js-yaml' -import commonLibSections from '../../../../spec/common-client-libs-sections.json' assert { type: 'json' } -import { flattenSections } from '../helpers.mjs' - -const flatCommonLibSections = flattenSections(commonLibSections) - -const clientLibFiles = [ - { fileName: 'supabase_js_v2', label: 'javascript', version: 'v2', versionSlug: false }, - { fileName: 'supabase_dart_v1', label: 'dart', version: 'v1', versionSlug: false }, - { fileName: 'supabase_py_v2', label: 'python', version: 'v2', versionSlug: false }, - { fileName: 'supabase_csharp_v0', label: 'csharp', version: 'v0', versionSlug: false }, - { fileName: 'supabase_swift_v0', label: 'swift', version: 'v0', versionSlug: false }, - { fileName: 'supabase_kt_v0', label: 'kotlin', version: 'v0', versionSlug: false }, -] - -export function generateReferencePages() { - let refPages = [] - clientLibFiles.map((file) => { - const spec = yaml.load(fs.readFileSync(`../../spec/${file.fileName}.yml`, 'utf8')) - spec.functions.map((fn) => { - const slug = flatCommonLibSections.find((item) => item.id === fn.id)?.slug - refPages.push(`reference/${file.label}/${file.versionSlug ? file.version + '/' : ''}${slug}`) - }) - }) - return refPages -} diff --git a/apps/docs/internals/generate-sitemap.mjs b/apps/docs/internals/generate-sitemap.mjs deleted file mode 100644 index 52c00e86bbca7..0000000000000 --- a/apps/docs/internals/generate-sitemap.mjs +++ /dev/null @@ -1,70 +0,0 @@ -/* - * kudos to leerob from vercel - * https://leerob.io/blog/nextjs-sitemap-robots - */ - -import { writeFileSync } from 'fs' -import { globby } from 'globby' -import prettier from 'prettier' -import { generateCLIPages } from './files/cli.mjs' -import { generateReferencePages } from './files/reference-lib.mjs' -import { generateAPIPages } from './files/api.mjs' - -const referencePages = generateReferencePages() -const cliPages = generateCLIPages() -const apiPages = generateAPIPages() - -async function generate() { - const prettierConfig = await prettier.resolveConfig('./.prettierrc.js') - - const rawPages = await globby([ - // guides - 'docs/*.mdx', - 'pages/**/*.mdx', - '!pages/404.mdx', - '!pages/404.tsx', - '!pages/ref-pages.mdx', - ]) - - const guidePages = rawPages.map((x) => { - let string = x - string = string.replace('pages/', '') - string = string.replace('.mdx', '') - return string - }) - - // combine the guidePages with the ref pages - const allPages = guidePages.concat(referencePages, cliPages, apiPages) - - const sitemap = ` - - - ${allPages - .map((path) => { - return ` - - ${`https://supabase.com/docs/${path}`} - weekly - 0.5 - - ` - }) - .join('')} - - ` - - const formatted = prettier.format(sitemap, { - ...prettierConfig, - parser: 'html', - }) - - const sitemapFilePath = `public/sitemap.xml` - console.log( - `Total of ${allPages.length} pages in sitemap, located at /apps/docs/${sitemapFilePath}` - ) - - // eslint-disable-next-line no-sync - writeFileSync(sitemapFilePath, formatted) -} - -generate() diff --git a/apps/docs/internals/getSecrets.js b/apps/docs/internals/getSecrets.js deleted file mode 100644 index 4782a3f1ed59e..0000000000000 --- a/apps/docs/internals/getSecrets.js +++ /dev/null @@ -1,35 +0,0 @@ -// for internal supabase use only -const fs = require('fs/promises') -const AWS = require('aws-sdk') - -const secretName = 'local/docs' -const region = 'ap-southeast-2' - -const getSecrets = async (name, region) => { - try { - AWS.config.update({ region }) - const secretsmanager = new AWS.SecretsManager() - - const data = await secretsmanager - .getSecretValue({ - SecretId: name, - }) - .promise() - - if (!data.SecretString) { - throw new Error('Secrets not found') - } - return JSON.parse(data.SecretString) - } catch (err) { - console.log('Error getting secrets', err) - } -} - -// gets secrets from secrets manager and writes it to .env.local file -getSecrets(secretName, region).then(async (secrets) => { - let secretContent = '' - for (const [secretKey, secretValue] of Object.entries(secrets)) { - secretContent += `${secretKey}="${secretValue}"\n` - } - await fs.writeFile('.env.local', secretContent.trim()) -}) diff --git a/apps/docs/internals/helpers.mjs b/apps/docs/internals/helpers.mjs deleted file mode 100644 index afb833fee4d64..0000000000000 --- a/apps/docs/internals/helpers.mjs +++ /dev/null @@ -1,15 +0,0 @@ -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/internals/tsconfig.json b/apps/docs/internals/tsconfig.json deleted file mode 100644 index de1ecb67a32c4..0000000000000 --- a/apps/docs/internals/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -// generator files need their own tsconfig.json because they don't like "module": "esnext" setting that nextjs requires in the main tsconfig -{ - "compilerOptions": { - "incremental": true, - "noImplicitAny": false, - "esModuleInterop": true, - "resolveJsonModule": true, - "baseUrl": ".", - "paths": { - "~/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] -} diff --git a/apps/docs/jest.config.ts b/apps/docs/jest.config.ts deleted file mode 100644 index 348b75c0bb792..0000000000000 --- a/apps/docs/jest.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Config } from '@jest/types' - -const config: Config.InitialOptions = { - preset: 'ts-jest', - setupFilesAfterEnv: ['@testing-library/jest-dom/extend-expect'], - testEnvironment: 'jsdom', -} - -export default config diff --git a/apps/docs/layouts/DefaultGuideLayout.tsx b/apps/docs/layouts/DefaultGuideLayout.tsx deleted file mode 100644 index d2c0170476354..0000000000000 --- a/apps/docs/layouts/DefaultGuideLayout.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { FC } from 'react' -import { FooterHelpCalloutType } from '~/components/FooterHelpCallout' -import GuideLayout from './guides' - -interface Props { - meta: { - title: string - description?: string - hide_table_of_contents?: boolean - video?: string - footerHelpType?: FooterHelpCalloutType - } - children: any - toc?: any - currentPage?: string -} - -const Layout: FC = (props) => { - return GuideLayout(props) -} - -export default Layout diff --git a/apps/docs/layouts/DefaultLayout.tsx b/apps/docs/layouts/DefaultLayout.tsx deleted file mode 100644 index 393b86abf290a..0000000000000 --- a/apps/docs/layouts/DefaultLayout.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import { MDXProvider } from '@mdx-js/react' -import { NextSeo } from 'next-seo' -import Head from 'next/head' -import { useRouter } from 'next/router' -import { FC } from 'react' -import components from '~/components' -import TableOfContents from '~/components/TableOfContents' - -interface Props { - meta: { - title: string - description?: string - hide_table_of_contents?: boolean - video?: string - tocVideo?: string - canonical?: string - } - children: any - toc?: any - menuItems: any -} - -const Layout: FC = (props: Props) => { - const { asPath } = useRouter() - - const hasTableOfContents = - props.toc !== undefined && - props.toc.json.filter((item) => item.lvl !== 1 && item.lvl <= 3).length > 0 - - return ( - <> - - {asPath === '/' ? 'Supabase Docs' : `${props.meta?.title} | Supabase Docs`} - - - - - - - -
    -
    -

    {props.meta.title}

    - -
    -
    - {hasTableOfContents && !props.meta?.hide_table_of_contents && ( - - )} -
    - - ) -} - -export const LayoutMainContent: FC<{ className?: string }> = ({ className, children }) => ( -
    {children}
    -) - -export default Layout diff --git a/apps/docs/layouts/HomeLayout.tsx b/apps/docs/layouts/HomeLayout.tsx deleted file mode 100644 index 3f4928902fba2..0000000000000 --- a/apps/docs/layouts/HomeLayout.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { MDXProvider } from '@mdx-js/react' -import { NextSeo } from 'next-seo' -import Head from 'next/head' -import { useRouter } from 'next/router' -import { FC } from 'react' -import components from '~/components' -import TableOfContents from '~/components/TableOfContents' -import HomePageCover from '../components/HomePageCover' -import { LayoutMainContent } from './DefaultLayout' - -interface Props { - meta: { - title: string - description?: string - hide_table_of_contents?: boolean - video?: string - canonical?: string - } - children: any - toc?: any - menuItems: any -} - -const HomeLayout: FC = (props: Props) => { - const { asPath } = useRouter() - - const hasTableOfContents = - props.toc !== undefined && - props.toc.json.filter((item) => item.lvl !== 1 && item.lvl <= 3).length > 0 - - return ( - <> - - {asPath === '/' ? 'Supabase Docs' : `${props.meta?.title} | Supabase Docs`} - - - - - - - - -
    -
    - -
    -
    - {hasTableOfContents && !props.meta?.hide_table_of_contents && ( - - )} -
    - - ) -} - -export default HomeLayout diff --git a/apps/docs/layouts/SiteLayout.tsx b/apps/docs/layouts/SiteLayout.tsx deleted file mode 100644 index 94cd0ae0631a9..0000000000000 --- a/apps/docs/layouts/SiteLayout.tsx +++ /dev/null @@ -1,362 +0,0 @@ -import { useTheme } from 'common/Providers' -import Image from 'next/image' -import Link from 'next/link' -import NavigationMenu from '~/components/Navigation/NavigationMenu/NavigationMenu' -import TopNavBarRef from '~/components/Navigation/NavigationMenu/TopNavBarRef' - -import Head from 'next/head' -import { PropsWithChildren, memo } from 'react' -import Footer from '~/components/Navigation/Footer' -import { menuState, useMenuLevelId, useMenuMobileOpen } from '~/hooks/useMenuState' -import { Announcement, LW8CountdownBanner } from 'ui' - -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', - }, - api: { - icon: '/docs/img/icons/menu/database', - name: 'Serverless APIs', - }, - auth: { - icon: '/docs/img/icons/menu/auth', - name: 'Auth', - }, - functions: { - icon: '/docs/img/icons/menu/functions', - name: 'Edge Functions', - }, - realtime: { - icon: '/docs/img/icons/menu/realtime', - name: 'Realtime', - }, - analytics: { - icon: '/docs/img/icons/menu/analytics', - name: 'Analytics', - }, - storage: { - icon: '/docs/img/icons/menu/storage', - name: 'Storage', - }, - ai: { - icon: '/docs/img/icons/menu/ai', - name: 'AI & Vectors', - }, - supabase_cli: { - icon: '/docs/img/icons/menu/reference-cli', - name: 'Supabase CLI', - }, - platform: { - icon: '/docs/img/icons/menu/platform', - name: 'Platform', - }, - resources: { - icon: '/docs/img/icons/menu/resources', - name: 'Resources', - }, - self_hosting: { - icon: '/docs/img/icons/menu/self-hosting', - name: 'Self-Hosting', - }, - 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_csharp_v0: { - icon: '/docs/img/icons/menu/reference-csharp', - name: 'C# Reference v0.0', - }, - reference_python_v2: { - icon: '/docs/img/icons/menu/reference-python', - name: 'Python Reference v2.0', - }, - reference_swift_v0: { - icon: '/docs/img/icons/menu/reference-swift', - name: 'Swift Reference v0.0', - }, - reference_kotlin_v0: { - icon: '/docs/img/icons/menu/reference-kotlin', - name: 'Kotlin 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', - }, - reference_self_hosting_analytics: { - icon: '/docs/img/icons/menu/reference-analytics', - name: 'Analytics Server Reference', - }, - reference_self_hosting_functions: { - icon: '/docs/img/icons/menu/reference-functions', - name: 'Functions Server Reference', - }, -} - -const MobileHeader = memo(function MobileHeader() { - const mobileMenuOpen = useMenuMobileOpen() - const menuLevel = useMenuLevelId() - - return ( -
    - -
    - -
    - - {mobileMenuOpen - ? 'Close' - : menuLevel - ? levelsData[menuLevel].name - : levelsData['home'].name} - -
    - ) -}) - -const MobileMenuBackdrop = memo(function MobileMenuBackdrop() { - const mobileMenuOpen = useMenuMobileOpen() - return ( -
    menuState.setMenuMobileOpen(!mobileMenuOpen)} - >
    - ) -}) - -const HeaderLogo = memo(function HeaderLogo() { - const { isDarkMode } = useTheme() - return ( - - - Supabase Logo - DOCS - - - ) -}) - -const Container = memo(function Container(props) { - const mobileMenuOpen = useMenuMobileOpen() - - return ( -
    -
    {props.children}
    -
    - ) -}) - -const NavContainer = memo(function NavContainer() { - const mobileMenuOpen = useMenuMobileOpen() - - return ( -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    - ) -}) - -const SiteLayout = ({ children }: PropsWithChildren<{}>) => { - return ( - <> - - Supabase Docs - -
    - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    - {children} -
    -
    - -
    -
    -
    - - ) -} - -export default SiteLayout diff --git a/apps/docs/layouts/guides/index.tsx b/apps/docs/layouts/guides/index.tsx deleted file mode 100644 index 130e76e251078..0000000000000 --- a/apps/docs/layouts/guides/index.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import { MDXProvider } from '@mdx-js/react' -import { NextSeo } from 'next-seo' -import Head from 'next/head' -import { useRouter } from 'next/router' -import { FC, useEffect, useRef, useState } from 'react' -import { ExpandableVideo, IconExternalLink } from 'ui' -import components from '~/components' -import { highlightSelectedTocItem } from '~/components/CustomHTMLElements/CustomHTMLElements.utils' -import { FooterHelpCalloutType } from '~/components/FooterHelpCallout' -import GuidesTableOfContents from '~/components/GuidesTableOfContents' -import useHash from '~/hooks/useHash' -import { LayoutMainContent } from '../DefaultLayout' - -interface Props { - meta: { - title: string - description?: string // used in meta tags - hide_table_of_contents?: boolean - breadcrumb?: string - subtitle?: string // used on the page under the H1 - footerHelpType?: FooterHelpCalloutType - video?: string - tocVideo?: string - canonical?: string - } - children: any - toc?: any - currentPage?: string - hideToc?: boolean -} - -const Layout: FC = (props) => { - const [hash] = useHash() - - const articleRef = useRef() - const [tocList, setTocList] = useState([]) - - const { asPath } = useRouter() - const router = useRouter() - - const EDIT_BUTTON_EXCLUDE_LIST = ['/404'] - - 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) - }, []) - - const hasTableOfContents = tocList.length > 0 - const tocVideoPreview = `http://img.youtube.com/vi/${props.meta.tocVideo}/0.jpg` - - // page type, ie, Auth, Database, Storage etc - const ogPageType = asPath.split('/')[2] - // open graph image url constructor - const ogImageUrl = encodeURI( - `https://obuldanrptloktxcffvn.functions.supabase.co/og-images?site=docs${ - ogPageType ? `&type=${ogPageType}` : '' - }&title=${props.meta?.title}&description=${props.meta?.description}` - ) - - return ( - <> - - {props.meta?.title} | Supabase Docs - - - - - - - -
    -
    - {props.meta.breadcrumb && ( -

    {props.meta.breadcrumb}

    - )} -
    -

    {props.meta.title}

    - {props.meta.subtitle && ( -

    {props.meta.subtitle}

    - )} -
    - {props.children} - - {EDIT_BUTTON_EXCLUDE_LIST.includes(router.route) ? ( - <> - ) : ( - - )} -
    -
    - {!props.hideToc && hasTableOfContents && !props.meta?.hide_table_of_contents && ( - - )} -
    -
    - - ) -} - -export default Layout diff --git a/apps/docs/layouts/ref/RefSubLayout.tsx b/apps/docs/layouts/ref/RefSubLayout.tsx deleted file mode 100644 index 29324c13fbe2b..0000000000000 --- a/apps/docs/layouts/ref/RefSubLayout.tsx +++ /dev/null @@ -1,174 +0,0 @@ -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' -import Image from 'next/image' - -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 { - className?: string -} -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) => { - return ( -
    - -
    - {props.children} -
    -
    - ) -} - -const StickyHeader: FC = ({ icon, ...props }) => { - const router = useRouter() - - const { setActiveRefItem } = useNavigationMenuContext() - - // we're serving search bots a different file (/crawlers/[...slug]) - // and need to modify content to suit that - const isCrawlerPage = router.route.includes('/crawlers/[...slug]') - - 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 && ( -
    - {icon} -
    - )} - {isCrawlerPage ? ( -

    {props.title}

    - ) : ( -

    - {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 }) => { - 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 deleted file mode 100644 index 7aee77fbc50f5..0000000000000 --- a/apps/docs/layouts/ref/RefSubLayoutNonFunc.tsx +++ /dev/null @@ -1,113 +0,0 @@ -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) => { - 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 deleted file mode 100644 index 65ded8cf42844..0000000000000 --- a/apps/docs/layouts/tutorials/TutorialLayout.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { MDXProvider } from '@mdx-js/react' -import Head from 'next/head' -import { FC, useEffect, useState } from 'react' -import components from '~/components' -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 - tocVideo?: string - } - children: any - toc?: any - menuItems: any - currentPage: string -} - -const Layout: FC = (props: Props) => { - const [active, setActive] = useState(false) - - 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/constants.ts b/apps/docs/lib/constants.ts deleted file mode 100644 index 42c12c0d3f47f..0000000000000 --- a/apps/docs/lib/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const IS_PLATFORM = process.env.NEXT_PUBLIC_IS_PLATFORM === 'true' -export const LOCAL_SUPABASE = process.env.NEXT_PUBLIC_LOCAL_SUPABASE === 'true' -export const API_URL = process.env.NEXT_PUBLIC_API_URL diff --git a/apps/docs/lib/docs.ts b/apps/docs/lib/docs.ts deleted file mode 100644 index 2ae4f8dfe806d..0000000000000 --- a/apps/docs/lib/docs.ts +++ /dev/null @@ -1,98 +0,0 @@ -import fs from 'fs' -import { join } from 'path' -import matter from 'gray-matter' -import nonGeneratedReferencePages from 'data/nonGeneratedReferencePages' -import { REFERENCES } from '~/components/Navigation/NavigationMenu/NavigationMenu.constants' - -const docsDirectory = process.cwd() - -const getPathToGeneratedDoc = (slug: string) => { - const sections = slug.split('/') - const updatedSections = sections.slice() - updatedSections.splice(updatedSections.length - 1, 0, 'generated') - return updatedSections.join('/') -} - -export function getDocsBySlug(slug: string) { - const realSlug = slug.replace(/\.mdx$/, '') - - const formattedSlug = - (realSlug.includes('reference/javascript/') && - !nonGeneratedReferencePages.includes(realSlug)) || - (realSlug.includes('reference/dart/') && !nonGeneratedReferencePages.includes(realSlug)) || - (realSlug.includes('reference/cli/') && !nonGeneratedReferencePages.includes(realSlug)) || - (realSlug.includes('reference/api/') && !nonGeneratedReferencePages.includes(realSlug)) || - (realSlug.includes('reference/auth/') && !nonGeneratedReferencePages.includes(realSlug)) || - (realSlug.includes('reference/realtime/') && !nonGeneratedReferencePages.includes(realSlug)) || - (realSlug.includes('reference/storage/') && !nonGeneratedReferencePages.includes(realSlug)) - ? getPathToGeneratedDoc(realSlug) - : realSlug - - // files can either be .md or .mdx - // we need to check which one exists - let fullPath - let fullPathMD = join(docsDirectory, `${formattedSlug}.md`) - let fullPathMDX = join(docsDirectory, `${formattedSlug}.mdx`) - - if (fs.existsSync(fullPathMD)) { - fullPath = fullPathMD - } - - if (fs.existsSync(fullPathMDX)) { - fullPath = fullPathMDX - } - - // if no match, 404 - if (!fs.existsSync(fullPath)) { - console.log(`\nfile ${fullPath} not found, redirect to 404\n`) - fullPath = join(docsDirectory, 'pages/404.mdx') - } - - const fileContents = fs.readFileSync(fullPath, 'utf8') - - const { data, content } = matter(fileContents) - - // Append the title as the h1 tag in the content - const formattedContent = data.title !== undefined ? `# ${data.title} \n\n${content}` : content - - return { slug: realSlug, meta: data, content: formattedContent } -} - -export function getAllDocs() { - const slugs = walk('docs') - const docs = slugs.map((slug) => getDocsBySlug(slug)) - - return docs -} - -function walk(dir: string) { - let results: string[] = [] - const list = fs.readdirSync(dir) - list.forEach(function (file) { - file = dir + '/' + file - let slugs = [] - - fs.readdirSync(dir).forEach((file) => { - let absolute = join(dir, file) - if (fs.statSync(absolute).isDirectory()) { - fs.readdirSync(absolute).forEach((subFile) => slugs.push(file.concat('/' + subFile))) - } - }) - }) - return results -} - -// [Joshen] Initially tried to simplify the NavBar versioning by reading the directory -// but caused some issues on Vercel. Just gonna park this for now. -export function getLibraryVersions(slug: string) { - const paths = slug.split('/') - if (paths.includes('reference') && paths.length >= 3) { - const reference = REFERENCES[paths[2]] - if (reference?.library !== undefined) { - const path = `data/nav/${reference.library}` - const list = fs.readdirSync(path).map((file) => file.split('.')[0]) - return list.reverse() - } - } - return [] -} diff --git a/apps/docs/lib/fetchWrappers.tsx b/apps/docs/lib/fetchWrappers.tsx deleted file mode 100644 index 0313e49565f92..0000000000000 --- a/apps/docs/lib/fetchWrappers.tsx +++ /dev/null @@ -1,18 +0,0 @@ -interface DataProps { - [prop: string]: any -} - -export const post = (url: string, data: DataProps, options = {}) => { - return fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - }, - referrerPolicy: 'no-referrer-when-downgrade', - body: JSON.stringify(data), - ...options, - }).catch((error) => { - console.error('Error at fetchWrapper - post:', error) - }) -} diff --git a/apps/docs/lib/helpers.ts b/apps/docs/lib/helpers.ts deleted file mode 100644 index 112898e065ae7..0000000000000 --- a/apps/docs/lib/helpers.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { ICommonBase, ICommonItem, ICommonSection } from '../components/reference/Reference.types' - -// menus to render in the SideBar.js (Ref Nav.constants.ts) -export function getPageType(asPath: string) { - let page - if (!asPath) return '' - - if (asPath.includes('/guides')) { - page = 'docs' - } else if (asPath.includes('/reference/javascript/v1')) { - page = 'reference/javascript/v1' - } else if (asPath.includes('/reference/javascript')) { - page = 'reference/javascript' - } else if (asPath.includes('/reference/dart/v0')) { - page = 'reference/dart/v0' - } else if (asPath.includes('/reference/dart')) { - page = 'reference/dart' - } else if (asPath.includes('/reference/api')) { - page = 'reference/api' - } else if (asPath.includes('/reference/cli')) { - page = 'reference/cli' - } else if (asPath.includes('/reference/auth')) { - page = 'reference/auth' - } else if (asPath.includes('/reference/realtime')) { - page = 'reference/realtime' - } else if (asPath.includes('/reference/storage')) { - page = 'reference/storage' - } else if (asPath.includes('/reference')) { - page = 'reference' - } else { - page = 'docs' - } - - return page -} - -/** - * Flattens common sections recursively by their `items`. - * - * _Note:_ `sections` type set to `ICommonBase[]` instead of - * `ICommonItem[]` until TypeScript supports JSON imports as const: - * https://github.com/microsoft/TypeScript/issues/32063 - */ -export function flattenSections(sections: ICommonBase[]): ICommonSection[] { - return sections.reduce((acc, section: ICommonItem) => { - // Flatten sub-items - if ('items' in section) { - let newSections = acc - - if (section.type !== 'category') { - newSections.push(section) - } - - return newSections.concat(flattenSections(section.items)) - } - return acc.concat(section) - }, []) -} diff --git a/apps/docs/lib/mdx/generateOldRefMarkdown.tsx b/apps/docs/lib/mdx/generateOldRefMarkdown.tsx deleted file mode 100644 index 2358fd5c6986a..0000000000000 --- a/apps/docs/lib/mdx/generateOldRefMarkdown.tsx +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index 77a550af7db61..0000000000000 --- a/apps/docs/lib/mdx/generateRefMarkdown.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import fs from 'fs' - -import { CodeHikeConfig, remarkCodeHike } from '@code-hike/mdx' -import codeHikeTheme from 'config/code-hike.theme.json' assert { type: 'json' } -import matter from 'gray-matter' -import { serialize } from 'next-mdx-remote/serialize' -import remarkGfm from 'remark-gfm' -import { ICommonMarkdown } from '~/components/reference/Reference.types' - -async function generateRefMarkdown(sections: ICommonMarkdown[], slug: string) { - let markdownContent = [] - /** - * Read all the markdown files that might have - * - custom text - * - call outs - * - important notes regarding implementation - */ - await Promise.all( - sections.map(async (section) => { - const pathName = `docs/ref${slug}/${section.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) - - const codeHikeOptions: CodeHikeConfig = { - theme: codeHikeTheme, - lineNumbers: true, - showCopyButton: true, - skipLanguages: [], - autoImport: false, - } - - markdownContent.push({ - id: section.id, - title: section.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: { - useDynamicImport: true, - remarkPlugins: [remarkGfm, [remarkCodeHike, codeHikeOptions]], - }, - // 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/getComponents.tsx b/apps/docs/lib/mdx/getComponents.tsx deleted file mode 100644 index 004fcd2fc90f0..0000000000000 --- a/apps/docs/lib/mdx/getComponents.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import Image from 'next/image' -import LinkCard from '~/components/LinkCard' -import LinkCardsWrapper from '~/components/LinkCardsWrapper' - -const ignoreClass = 'ignore-on-export' - -function getComponents(type: any) { - const components = { - LinkCardsWrapper: (props: any) => , - LinkCard: (props: any) => , - img: (props: any) => { - if (props.className !== ignoreClass) { - return ( -
    - -
    - ) - } - return - }, - } - - return components -} - -export default getComponents diff --git a/apps/docs/lib/mdx/getConfig.tsx b/apps/docs/lib/mdx/getConfig.tsx deleted file mode 100644 index 2341e23b3e247..0000000000000 --- a/apps/docs/lib/mdx/getConfig.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import specStorageV0 from '~/../../spec/storage_v0_config.yaml' assert { type: 'yml' } -import specRealtimeV0 from '~/../../spec/realtime_v0_config.yaml' assert { type: 'yml' } -import specAuthV1 from '~/../../spec/gotrue_v1_config.yaml' assert { type: 'yml' } -import specAnalyticsV0 from '~/../../spec/analytics_v0_config.yaml' assert { type: 'yml' } -import specFunctionsV0 from '~/../../spec/functions_v0_config.yaml' assert { type: 'yml' } - -function getStorageConfigV0() { - return { ...specStorageV0 } -} - -function getRealtimeConfigV0() { - return { ...specRealtimeV0 } -} - -function getAuthConfigV1() { - return { ...specAuthV1 } -} - -function getAnalyticsConfigV0() { - return { ...specAnalyticsV0 } -} - -function getFunctionsConfigV0() { - return { ...specFunctionsV0 } -} - -export { - getStorageConfigV0, - getRealtimeConfigV0, - getAuthConfigV1, - getAnalyticsConfigV0, - getFunctionsConfigV0, -} diff --git a/apps/docs/lib/mdx/handleRefStaticPaths.tsx b/apps/docs/lib/mdx/handleRefStaticPaths.tsx deleted file mode 100644 index f458f4f3e8bf1..0000000000000 --- a/apps/docs/lib/mdx/handleRefStaticPaths.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { ICommonSection } from '~/components/reference/Reference.types' - -async function handleRefGetStaticPaths(sections: ICommonSection[]) { - return { - paths: sections.map((section) => { - return { - params: { - slug: [section.slug], - }, - } - }), - fallback: 'blocking', - } -} - -export default handleRefGetStaticPaths diff --git a/apps/docs/lib/mdx/handleRefStaticProps.tsx b/apps/docs/lib/mdx/handleRefStaticProps.tsx deleted file mode 100644 index 56c6c159ed0da..0000000000000 --- a/apps/docs/lib/mdx/handleRefStaticProps.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { ICommonMarkdown, ICommonSection } from '~/components/reference/Reference.types' -import generateRefMarkdown from '~/lib/mdx/generateRefMarkdown' - -async function handleRefStaticProps(sections: ICommonSection[], libraryPath: string) { - const markdownSections = sections.filter( - (section): section is ICommonMarkdown => section.type === 'markdown' - ) - const markdownContent = await generateRefMarkdown(markdownSections, libraryPath) - - return { - props: { - docs: markdownContent, - }, - } -} - -export default handleRefStaticProps diff --git a/apps/docs/lib/mdx/plugins/rehypeLinkTransform.ts b/apps/docs/lib/mdx/plugins/rehypeLinkTransform.ts deleted file mode 100644 index 5eab44f885d4e..0000000000000 --- a/apps/docs/lib/mdx/plugins/rehypeLinkTransform.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Element } from 'hast' -import { hasProperty } from 'hast-util-has-property' -import { Node } from 'unist' -import { visit } from 'unist-util-visit' - -export type UrlTransformFunction = (url: string, node: Element) => string - -function modify(node: Element, prop: string, fn?: UrlTransformFunction) { - if (hasProperty(node, prop)) { - const property = node.properties[prop] - if (typeof property !== 'string') { - return - } - - node.properties[prop] = fn?.(property, node) ?? property - } -} - -/** - * Transforms every HAST element that contains a `href` or `src`. - * A `UrlTransformFunction` is called with the current URL. The - * return value from this function will be used as the replacement. - */ -export function linkTransform(fn?: UrlTransformFunction) { - return function transformer(tree: Node) { - visit(tree, 'element', (node: Element) => { - modify(node, 'href', fn) - modify(node, 'src', fn) - }) - } -} diff --git a/apps/docs/lib/mdx/plugins/remarkAdmonition.ts b/apps/docs/lib/mdx/plugins/remarkAdmonition.ts deleted file mode 100644 index a9a212d2825dc..0000000000000 --- a/apps/docs/lib/mdx/plugins/remarkAdmonition.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { Content, Paragraph, Parent } from 'mdast' -import { MdxJsxFlowElement } from 'mdast-util-mdx' -import { AdmonitionProps } from 'ui' -import { Node } from 'unist' -import { visit } from 'unist-util-visit' - -/** - * Transforms an `mkdocs-material` Admonition to a Supabase Admonition. - * - * https://squidfunk.github.io/mkdocs-material/reference/admonitions/ - */ -const remarkMkDocsAdmonition = function () { - return function transformer(root: Parent) { - visit(root, 'paragraph', (paragraph: Paragraph, index: number, parent: Parent) => { - const [firstChild] = paragraph.children - - if (firstChild?.type === 'text') { - const match = firstChild.value.match(/^!!! ?(.*?)\n(.*)/s) - - if (!match) { - return - } - - // Extract the admonition type along with the remaining text - const [, type, value] = match - - // Rewrite the node's value to remove the admonition syntax - firstChild.value = value - - // Extract sibling nodes that should be linked to this admonition - const siblingsToNest = extractLinkedSiblings(parent, paragraph, index) - - const children: any[] = [...paragraph.children, ...siblingsToNest] - - // Generate a Supabase Admonition JSX element - const admonitionElement: MdxJsxFlowElement = { - type: 'mdxJsxFlowElement', - name: 'Admonition', - attributes: [ - { - type: 'mdxJsxAttribute', - name: 'type', - value: mapAdmonitionType(type), - }, - ], - children, - } - - // Overwrite original node with new element - parent.children.splice(index, 1, admonitionElement) - } - }) - } -} - -/** - * Identifies sibling nodes that should be linked to this admonition - * based on their indent level (ie. 4 spaces). - * - * Iterates through proceeding siblings until one is found that is - * not indented relative to the original node. - * - * Splices the discovered siblings out of the original parent and returns them. - */ -function extractLinkedSiblings(parent: Parent, node: Node, index: number, indentAmount = 4) { - const { column } = node.position.start - - let nextSibling: Content - let i = index - - do { - nextSibling = parent.children[++i] - } while (nextSibling?.position && nextSibling.position.start.column === column + indentAmount) - - return parent.children.splice(index + 1, i - index - 1) -} - -/** - * Maps `mkdocs-material` Admonition types to Supabase Admonition types. - * - * https://squidfunk.github.io/mkdocs-material/reference/admonitions/#supported-types - */ -function mapAdmonitionType(type: string): AdmonitionProps['type'] { - switch (type) { - case 'quote': - case 'example': - case 'note': - return 'note' - case 'tip': - return 'tip' - case 'warning': - return 'caution' - case 'failure': - case 'bug': - case 'danger': - return 'danger' - case 'abstract': - case 'question': - case 'info': - default: - return 'info' - } -} - -export default remarkMkDocsAdmonition diff --git a/apps/docs/lib/mdx/plugins/remarkRemoveTitle.ts b/apps/docs/lib/mdx/plugins/remarkRemoveTitle.ts deleted file mode 100644 index 3dcce035b60b9..0000000000000 --- a/apps/docs/lib/mdx/plugins/remarkRemoveTitle.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Parent } from 'mdast' - -/** - * Removes the top heading from a MD file if - * it is the first node and it matches `title`. - * - * Useful when rendering title separately from MD - * and you need to remove the duplicate. - */ -export function removeTitle(title: string) { - return function transformer(root: Parent) { - const [firstNode] = root.children - - if (firstNode?.type === 'heading') { - const [text] = firstNode.children - - if (text?.type === 'text' && text.value === title) { - // Remove this node - root.children.splice(0, 1) - } - } - } -} diff --git a/apps/docs/lib/mdx/plugins/remarkTabs.ts b/apps/docs/lib/mdx/plugins/remarkTabs.ts deleted file mode 100644 index 3562c2a6ecaf2..0000000000000 --- a/apps/docs/lib/mdx/plugins/remarkTabs.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { Content, Paragraph, Parent } from 'mdast' -import { MdxJsxFlowElement } from 'mdast-util-mdx' -import { Node } from 'unist' -import { visit } from 'unist-util-visit' - -/** - * Transforms PyMdown Tabs to Supabase Tabs. - * - * https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/ - */ -const remarkPyMdownTabs = function () { - return function transformer(root: Parent) { - visit(root, 'paragraph', (node: Paragraph, nodeIndex: number, parent: Parent) => { - for (let i = 0; i < node.children.length; i++) { - const child = node.children[i] - if (child.type !== 'text') { - continue - } - - // Look for 3 '=', followed by an optionally quoted title, - // followed by optional newlines of text - const match = child.value.match(/^\n*=== ("?)(.+)\1\n?((?:.|\n)*)/) - - if (!match) { - continue - } - - // Extract the tab title along with the remaining text - const [, , title, value] = match - - // Rewrite the node's value to remove the tab syntax - child.value = value - - // Extract sibling nodes that should be linked to this tab - const siblingsToNest = extractLinkedSiblings(parent, node, nodeIndex) - - const children: any[] = [...node.children.slice(i), ...siblingsToNest] - - const tabPanelElement: MdxJsxFlowElement = { - type: 'mdxJsxFlowElement', - name: 'TabPanel', - attributes: [ - { - type: 'mdxJsxAttribute', - name: 'id', - value: title, - }, - { - type: 'mdxJsxAttribute', - name: 'label', - value: title, - }, - ], - children, - } - - let nodesAdded = 0 - const previousNode = parent.children[nodeIndex - 1] - - if (previousNode?.type === 'mdxJsxFlowElement' && previousNode.name === 'Tabs') { - // Add TabPanel to existing Tabs component - previousNode.children.push(tabPanelElement) - - // Remove this node - parent.children.splice(nodeIndex, 1) - nodesAdded-- - } else { - // Create new Tabs components and add TabPanel - const tabsElement: MdxJsxFlowElement = { - type: 'mdxJsxFlowElement', - name: 'Tabs', - attributes: [ - { - type: 'mdxJsxAttribute', - name: 'scrollable', - }, - { - type: 'mdxJsxAttribute', - name: 'size', - value: 'small', - }, - { - type: 'mdxJsxAttribute', - name: 'type', - value: 'underlined', - }, - ], - children: [tabPanelElement], - } - - // Overwrite this paragraph node with Tabs component - parent.children.splice(nodeIndex, 1, tabsElement) - } - - // If this wasn't the first child of the paragraph, create - // a new paragraph before this with the previous text children - if (i > 0) { - const previousChildren = node.children.slice(0, i) - const paragraph: Paragraph = { - type: 'paragraph', - children: previousChildren, - } - parent.children.splice(nodeIndex, 0, paragraph) - - nodesAdded++ - } - - // Return the correct index for the next visit, since - // we may have added or removed an element in the array - return nodeIndex + nodesAdded - } - }) - } -} - -/** - * Identifies sibling nodes that should be linked to this admonition - * based on their indent level (ie. 4 spaces). - * - * Iterates through proceeding siblings until one is found that is - * not indented relative to the original node. - * - * Splices the discovered siblings out of the original parent and returns them. - */ -function extractLinkedSiblings(parent: Parent, node: Node, index: number, indentAmount = 4) { - const { column } = node.position.start - - let nextSibling: Content - let i = index - - do { - nextSibling = parent.children[++i] - } while (nextSibling?.position && nextSibling.position.start.column === column + indentAmount) - - return parent.children.splice(index + 1, i - index - 1) -} - -export default remarkPyMdownTabs diff --git a/apps/docs/lib/refGenerator/helpers.ts b/apps/docs/lib/refGenerator/helpers.ts deleted file mode 100644 index d7c6ec5214758..0000000000000 --- a/apps/docs/lib/refGenerator/helpers.ts +++ /dev/null @@ -1,317 +0,0 @@ -import { TsDoc } from '../../generator/legacy/definitions' - -import { values, mapValues } from 'lodash' -import { OpenAPIV3 } from 'openapi-types' -import { flattenSections } from '../helpers' -import { ICommonItem } from '~/components/reference/Reference.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 === 'query') { - // skip: ignore types created from `typeof` for now, like `type Fetch = typeof fetch` - } 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: [] - description?: string - parameters?: [] - responses?: {} - security?: [] - summary?: string - tags?: [] -} - -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) => { - if (!text) return '' - 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 - }) - ) - -/** - * Get a list of common section IDs that are available in this spec - */ -export function getAvailableSectionIds(sections: ICommonItem[], spec: any) { - // Filter parent sections first - - const specIds = spec.functions.map(({ id }) => id) - - const newShape = flattenSections(sections).filter((section) => { - if (specIds.includes(section.id)) { - return section - } - }) - - const final = newShape.map((func) => { - return func.id - }) - - return final -} diff --git a/apps/docs/lib/refGenerator/refTypes.ts b/apps/docs/lib/refGenerator/refTypes.ts deleted file mode 100644 index c3563de9f017f..0000000000000 --- a/apps/docs/lib/refGenerator/refTypes.ts +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index 254486ccf06f9..0000000000000 --- a/apps/docs/middleware.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { NextResponse } from 'next/server' -import type { NextRequest } from 'next/server' -import isbot from 'isbot' - -export function middleware(request: NextRequest) { - const specs = ['javascript', 'dart', 'csharp'] - - 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-env.d.ts b/apps/docs/next-env.d.ts deleted file mode 100644 index 4f11a03dc6cc3..0000000000000 --- a/apps/docs/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs deleted file mode 100644 index 93b3cd0df9b2e..0000000000000 --- a/apps/docs/next.config.mjs +++ /dev/null @@ -1,123 +0,0 @@ -// @ts-check -import nextMdx from '@next/mdx' -import remarkGfm from 'remark-gfm' -import rehypeSlug from 'rehype-slug' -import { remarkCodeHike } from '@code-hike/mdx' - -import withTM from 'next-transpile-modules' -import withYaml from 'next-plugin-yaml' -import configureBundleAnalyzer from '@next/bundle-analyzer' - -import codeHikeTheme from 'config/code-hike.theme.json' assert { type: 'json' } - -const withBundleAnalyzer = configureBundleAnalyzer({ - enabled: process.env.ANALYZE === 'true', -}) - -/** - * Rewrites and redirects are handled by - * apps/www nextjs config - * - * Do not add them in this config - */ - -const withMDX = nextMdx({ - extension: /\.mdx?$/, - options: { - remarkPlugins: [ - [ - remarkCodeHike, - { - theme: codeHikeTheme, - lineNumbers: true, - showCopyButton: true, - }, - ], - remarkGfm, - ], - rehypePlugins: [rehypeSlug], - providerImportSource: '@mdx-js/react', - }, -}) - -/** @type {import('next').NextConfig} nextConfig */ -const nextConfig = { - // Append the default value with md extensions - pageExtensions: ['ts', 'tsx', 'js', 'jsx', 'md', 'mdx'], - // reactStrictMode: true, - // swcMinify: true, - basePath: '/docs', - images: { - dangerouslyAllowSVG: true, - domains: [ - 'avatars.githubusercontent.com', - 'github.com', - 'user-images.githubusercontent.com', - 'raw.githubusercontent.com', - 'weweb-changelog.ghost.io', - 'img.youtube.com', - 'archbee-image-uploads.s3.amazonaws.com', - 'obuldanrptloktxcffvn.supabase.co', - ], - }, - experimental: { - // TODO: @next/mdx ^13.0.2 only supports experimental mdxRs flag. next ^13.0.2 will stop warning about this being unsupported. - // mdxRs: true, - modularizeImports: { - lodash: { - transform: 'lodash/{{member}}', - }, - }, - }, - async headers() { - return [ - { - source: '/:path*', - headers: [ - { - key: 'Strict-Transport-Security', - value: '', - }, - { - key: 'X-Robots-Tag', - value: 'all', - }, - { - key: 'X-Frame-Options', - value: 'DENY', - }, - ], - }, - ] - }, - async redirects() { - return [ - { - source: '/', - destination: '/docs', - basePath: false, - permanent: false, - }, - ] - }, -} - -const configExport = () => { - const plugins = [ - withTM([ - 'ui', - 'common', - '@supabase/auth-helpers-nextjs', - 'mermaid', - 'mdx-mermaid', - 'dayjs', - 'shared-data', - ]), - withMDX, - withYaml, - withBundleAnalyzer, - ] - return plugins.reduce((acc, next) => next(acc), nextConfig) -} - -export default configExport diff --git a/apps/docs/package.json b/apps/docs/package.json deleted file mode 100644 index e3710ea9ba6f7..0000000000000 --- a/apps/docs/package.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "name": "docs", - "version": "0.0.0", - "private": true, - "scripts": { - "dev": "next dev --port 3001", - "dev:secrets:pull": "AWS_PROFILE=supabase-dev node internals/getSecrets.js", - "build": "npm run generate:all && next build", - "build:analyze": "ANALYZE=true next build", - "start": "next start", - "lint": "next lint", - "test": "jest", - "build:sitemap": "node ./internals/generate-sitemap.mjs", - "embeddings": "tsx scripts/search/generate-embeddings.ts", - "embeddings:refresh": "npm run embeddings -- --refresh", - "postbuild": "node ./internals/generate-sitemap.mjs", - "generate:all": "npm-run-all --parallel gen:api gen:cli gen:gotrue gen:storage gen:supabase-dart:v0 gen:supabase-dart:v1 gen:supabase-csharp:v0 gen:supabase-js:v1 gen:supabase-js:v2 gen:realtime", - "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--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", - "gen:gotrue:usage": "ts-node ./generator/index.ts gen --type api --input ../../spec/transforms/auth_v1_openapi_deparsed.json --output ./docs/reference/auth/generated/usage.mdx", - "gen:storage": "npm-run-all gen:storage:api gen:storage:config", - "gen:storage:api": "ts-node ./generator/index.ts gen --type api --input ../../spec/transforms/storage_v0_openapi_deparsed.json --output ./docs/reference/storage/generated/usage.mdx", - "gen:storage:config": "ts-node ./generator/index.ts gen --type config --input ../../spec/storage_v0_config.yaml --output ./docs/reference/storage/generated/config.mdx", - "gen:supabase-dart:v0": "npm-run-all gen:supabase-dart:v0:ref", - "gen:supabase-dart:v0:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_dart_v0.yml --output ./docs/reference/dart/v0/generated", - "gen:supabase-dart:v1": "npm-run-all gen:supabase-dart:v1:ref", - "gen:supabase-dart:v1:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_dart_v1.yml --output ./docs/reference/dart/generated", - "gen:supabase-csharp:v0": "npm-run-all gen:supabase-csharp:v0:ref", - "gen:supabase-csharp:v0:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_csharp_v0.yml --output ./docs/reference/csharp/generated", - "gen:supabase-js:v1": "npm-run-all gen:supabase-js:v1:ref", - "gen:supabase-js:v1:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_js_v1.yml --output ./docs/reference/javascript/v1/generated", - "gen:supabase-js:v2": "npm-run-all gen:supabase-js:v2:ref", - "gen:supabase-js:v2:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_js_v2.yml --output ./docs/reference/javascript/generated", - "gen:realtime": "npm-run-all gen:realtime:config", - "gen:realtime:config": "ts-node ./generator/index.ts gen --type config --input ../../spec/realtime_v0_config.yaml --output ./docs/reference/realtime/generated/config.mdx", - "gen:analytics": "npm-run-all gen:analytics:config gen:analytics:usage", - "gen:analytics:config": "ts-node ./generator/index.ts gen --type config --input ../../spec/analytics_v0_config.yaml --output ./docs/reference/analytics/generated/config.mdx", - "gen:analytics:usage": "ts-node ./generator/index.ts gen --type api --input ../../spec/transforms/analytics_v0_openapi_deparsed.json --output ./docs/reference/analytics/generated/usage.mdx" - }, - "dependencies": { - "@algolia/autocomplete-js": "^1.7.2", - "@algolia/autocomplete-plugin-recent-searches": "^1.7.2", - "@code-hike/mdx": "^0.8.3", - "@docsearch/react": "^3.3.0", - "@mdx-js/loader": "^2.1.5", - "@mdx-js/react": "^2.1.5", - "@next/bundle-analyzer": "^13.4.0", - "@next/mdx": "^12.3.2", - "@octokit/auth-app": "^4.0.9", - "@octokit/core": "^4.2.0", - "@octokit/plugin-paginate-graphql": "^2.0.1", - "@radix-ui/react-accordion": "^1.1.0", - "@supabase/auth-helpers-nextjs": "^0.5.6", - "@supabase/auth-helpers-react": "^0.3.1", - "@supabase/supabase-js": "^2.23.0", - "algoliasearch": "^4.14.2", - "babel": "^6.23.0", - "clsx": "^1.2.1", - "common": "*", - "config": "*", - "framer-motion": "^6.5.1", - "github-slugger": "^2.0.0", - "gray-matter": "^4.0.3", - "hast-util-has-property": "^2.0.1", - "isbot": "^3.6.5", - "jsrsasign": "^10.5.26", - "lodash": "^4.17.21", - "markdown-toc": "^1.2.0", - "mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.2.0", - "mdast-util-mdx": "^2.0.0", - "mdast-util-to-markdown": "^1.5.0", - "mdast-util-to-string": "^3.1.1", - "mdx-mermaid": "2.0.0-rc3", - "mermaid": "^10.0.2", - "micromark-extension-mdxjs": "^1.0.0", - "next": "^12.3.2", - "next-compose-plugins": "^2.2.1", - "next-mdx-remote": "^4.1.0", - "next-mdx-toc": "^0.1.3", - "next-plugin-yaml": "^1.0.1", - "next-seo": "^5.14.1", - "openai": "^3.2.1", - "react": "^17.0.2", - "react-copy-to-clipboard": "^5.1.0", - "react-dom": "^17.0.2", - "react-intersection-observer": "^9.4.0", - "react-markdown": "^8.0.3", - "react-syntax-highlighter": "^15.5.0", - "rehype-slug": "^5.1.0", - "remark": "^14.0.2", - "remark-admonitions": "^1.2.1", - "remark-gfm": "^3.0.1", - "remark-slug": "^7.0.1", - "remark-emoji": "^3.1.2", - "shiki": "^0.11.1", - "sse.js": "^0.6.1", - "ui": "*", - "unist-builder": "^3.0.1", - "unist-util-filter": "^4.0.1", - "unist-util-visit": "^4.1.2", - "uuid": "^9.0.0", - "valtio": "^1.7.6", - "yargs": "^17.7.2" - }, - "devDependencies": { - "@types/hast": "^2.3.4", - "@types/node": "^17.0.24", - "@types/react": "17.0.39", - "@types/unist": "^2.0.6", - "@types/yargs": "^17.0.24", - "config": "*", - "dotenv": "^16.0.3", - "ejs": "^3.1.8", - "eslint": "^8.41.0", - "globby": "^12.0.2", - "minimist": "^1.2.6", - "next-transpile-modules": "^9.0.0", - "npm-run-all": "^4.1.5", - "openapi-types": "^12.0.2", - "sass": "^1.55.0", - "ts-node": "^10.9.1", - "tsconfig": "*", - "tsx": "^3.12.2", - "typescript": "^5.0.4" - } -} diff --git a/apps/docs/pages/404.mdx b/apps/docs/pages/404.mdx deleted file mode 100644 index b75a4a59620f2..0000000000000 --- a/apps/docs/pages/404.mdx +++ /dev/null @@ -1,13 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: '404', - title: '404 not found', - description: '404 not found', -} - -404 not found - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/_app.tsx b/apps/docs/pages/_app.tsx deleted file mode 100644 index aeb409b0910c2..0000000000000 --- a/apps/docs/pages/_app.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import '../../../packages/ui/build/css/themes/dark.css' -import '../../../packages/ui/build/css/themes/light.css' - -import 'config/code-hike.scss' -import '../styles/main.scss?v=1.0.0' -import '../styles/new-docs.scss' -import '../styles/prism-okaidia.scss' - -import { createBrowserSupabaseClient } from '@supabase/auth-helpers-nextjs' -import { SessionContextProvider } from '@supabase/auth-helpers-react' -import { AuthProvider, ThemeProvider, useTelemetryProps } from 'common' -import { useRouter } from 'next/router' -import { useCallback, useEffect, useState } from 'react' -import { AppPropsWithLayout } from 'types' -import { CommandMenuProvider } from 'ui' -import { TabsProvider } from 'ui/src/components/Tabs' -import Favicons from '~/components/Favicons' -import SiteLayout from '~/layouts/SiteLayout' -import { API_URL, IS_PLATFORM, LOCAL_SUPABASE } from '~/lib/constants' -import { post } from '~/lib/fetchWrappers' - -function MyApp({ Component, pageProps }: AppPropsWithLayout) { - const router = useRouter() - const telemetryProps = useTelemetryProps() - - const [supabase] = useState(() => - IS_PLATFORM || LOCAL_SUPABASE ? createBrowserSupabaseClient() : undefined - ) - - const handlePageTelemetry = useCallback( - (route: string) => { - return post(`${API_URL}/telemetry/page`, { - referrer: document.referrer, - title: document.title, - route, - ga: { - screen_resolution: telemetryProps?.screenResolution, - language: telemetryProps?.language, - }, - }) - }, - [telemetryProps] - ) - - useEffect(() => { - function handleRouteChange(url: string) { - /* - * handle telemetry - */ - handlePageTelemetry(url) - /* - * handle "scroll to top" behaviour on route change - */ - if (document) { - // 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 - } - } - } - - // Listen for page changes after a navigation or when the query changes - router.events.on('routeChangeComplete', handleRouteChange) - return () => { - router.events.off('routeChangeComplete', handleRouteChange) - } - }, [router, handlePageTelemetry]) - - /** - * Save/restore scroll position when reloading or navigating back/forward. - * - * Required since scroll happens within a sub-container, not the page root. - */ - useEffect(() => { - const storageKey = 'scroll-position' - - const container = document.getElementById('docs-content-container') - if (!container) { - return - } - - const previousScroll = Number(sessionStorage.getItem(storageKey)) - const [entry] = window.performance.getEntriesByType('navigation') - - // Only restore scroll position on reload and back/forward events - if ( - previousScroll && - entry && - isPerformanceNavigationTiming(entry) && - ['reload', 'back_forward'].includes(entry.type) - ) { - container.scrollTop = previousScroll - } - - const handler = () => { - // Scroll stored in session storage, so only persisted per tab - sessionStorage.setItem(storageKey, container.scrollTop.toString()) - } - - window.addEventListener('beforeunload', handler) - - return () => window.removeEventListener('beforeunload', handler) - }, [router]) - - useEffect(() => { - /** - * Send page telemetry on first page load - */ - if (router.isReady) { - handlePageTelemetry(router.basePath + router.asPath) - } - }, [router, handlePageTelemetry]) - - /** - * Reference docs use `history.pushState()` to jump to - * sub-sections without causing a re-render. - * - * We need to the below handler to manually force a re-render - * when navigating away from, then back to reference docs - */ - useEffect(() => { - function handler() { - router.replace(window.location.href) - } - - window.addEventListener('popstate', handler) - - return () => { - window.removeEventListener('popstate', handler) - } - }, [router]) - - const SITE_TITLE = 'Supabase Documentation' - - const AuthContainer = (props) => { - return IS_PLATFORM || LOCAL_SUPABASE ? ( - - {props.children} - - ) : ( - {props.children} - ) - } - - return ( - <> - - - - - - - - - - - - - - ) -} - -/** - * Type guard that checks if a performance entry is a - * `PerformanceNavigationTiming`. - */ -function isPerformanceNavigationTiming( - entry: PerformanceEntry -): entry is PerformanceNavigationTiming { - return entry.entryType === 'navigation' -} - -export default MyApp diff --git a/apps/docs/pages/_document.tsx b/apps/docs/pages/_document.tsx deleted file mode 100644 index 4b0eeb64eefc2..0000000000000 --- a/apps/docs/pages/_document.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Html, Head, Main, NextScript } from 'next/document' - -export default function Document() { - return ( - - - -
    - - - - ) -} diff --git a/apps/docs/pages/faq.mdx b/apps/docs/pages/faq.mdx deleted file mode 100644 index 66c0c12096978..0000000000000 --- a/apps/docs/pages/faq.mdx +++ /dev/null @@ -1,44 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'faq', - title: 'FAQs', - description: 'Most frequently asked questions regarding Supabase', -} - -### Where do I find support? - -Choose the support channel relevant for your situation here: [supabase.com/support](https://supabase.com/support) - -### How much does it cost? - -Self-hosting Supabase is free. If you wish to use our cloud-platform, we provide [simple, predictable pricing](https://supabase.com/pricing). - -### How do I host Supabase? - -You can use the docker compose script [here](https://github.com/supabase/supabase/tree/master/docker), and find detailed instructions [here](/docs/guides/hosting/overview). - -Supabase is an amalgamation of open source tools. Some of these tools are made by Supabase (like our [Realtime Server](https://github.com/supabase/realtime)), some we support directly (like [PostgREST](http://postgrest.org/en/v7.0.0/)), and some are third-party tools (like [KonSupabase is an amalgamation open sourceg](https://github.com/Kong/kong)). - -All of the tools we use in Supabase are MIT, Apache 2.0, or PostgreSQL licensed. This is one of the requirements to be considered for the Supabase stack. - -### How can you be a Firebase alternative if you're built with a relational database? - -We started Supabase because we love the functionality of Firebase, but we personally experienced the scaling issues that many others experienced. We chose Postgres because it's well-trusted, with phenomenal scalability. - -Our goal is to make Postgres as easy to use as Firebase, so that you no longer have to choose between usability and scalability. -We're sure that once you start using Postgres, you'll love it more than any other database. - -### Do you support `[some other database]`? - -We only support PostgreSQL. It's unlikely we'll ever move away from Postgres; however, you can [vote on a new database](https://github.com/supabase/supabase/discussions/6) if you want us to start development. - -### Do you have a library for `[some other language]`? - -We officially support [JavaScript](/docs/reference/javascript/installing) and [Flutter](/docs/reference/dart/installing). - -You can find community-supported libraries in our [GitHub Community](https://github.com/supabase-community), and you can also help us to identify the most popular languages by [voting for a new client library](https://github.com/supabase/supabase/discussions/5). - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai.mdx b/apps/docs/pages/guides/ai.mdx deleted file mode 100644 index 3efb8e9b53773..0000000000000 --- a/apps/docs/pages/guides/ai.mdx +++ /dev/null @@ -1,150 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai', - title: 'AI & Vectors', - description: 'The best vector database is the database you already have.', - subtitle: 'The best vector database is the database you already have.', - sidebar_label: 'Overview', -} - -Supabase provides an open source toolkit for developing AI applications using Postgres and pgvector. Use the Supabase client libraries to store, index, and query your vector embeddings at scale. - -The toolkit includes: - -- A [vector store](/docs/guides/ai/vector-columns) and embeddings support using Postgres and pgvector. -- A [Python client](/docs/guides/ai/vecs-python-client) for managing unstructured embeddings. -- An [embedding generation](/docs/guides/ai/quickstarts/generate-text-embeddings) process using open source models directly in Edge Functions. -- [Database migrations](/docs/guides/ai/examples/headless-vector-search#prepare-your-database) for managing structured embeddings. -- Integrations with all popular AI providers, such as [OpenAI](/docs/guides/ai/examples/openai), [Hugging Face](/docs/guides/ai/hugging-face), [LangChain](/docs/guides/ai/langchain), and more. - -## Examples - -Check out all of the AI [templates and examples](https://github.com/supabase/supabase/tree/master/examples/ai) in our GitHub repository. - -
    - {examples.map((x) => ( - - ))} -
    - -export const examples = [ - { - name: 'Headless Vector Search', - description: 'A toolkit to perform vector similarity search on your knowledge base embeddings.', - href: '/guides/ai/examples/headless-vector-search', - }, - { - name: 'Image Search with OpenAI CLIP', - description: 'Implement image search with the OpenAI CLIP Model and Supabase Vector.', - href: '/guides/ai/examples/image-search-openai-clip', - }, - { - name: 'Hugging Face inference', - description: 'Generate image captions using Hugging Face.', - href: '/guides/ai/examples/huggingface-image-captioning', - }, - { - name: 'OpenAI completions', - description: 'Generate GPT text completions using OpenAI in Edge Functions.', - href: '/guides/ai/examples/openai', - }, - { - name: 'Building ChatGPT Plugins', - description: 'Use Supabase as a Retrieval Store for your ChatGPT plugin.', - href: '/guides/ai/examples/building-chatgpt-plugins', - }, - { - name: 'Vector search with Next.js and OpenAI', - description: - 'Learn how to build a ChatGPT-style doc search powered by Next.js, OpenAI, and Supabase.', - href: '/guides/ai/examples/nextjs-vector-search', - }, -] - -## Integrations - -
    - {integrations.map((x) => ( - - ))} -
    - -export const integrations = [ - { - name: 'OpenAI', - description: - 'OpenAI is an AI research and deployment company. Supabase provides a simple way to use OpenAI in your applications.', - href: '/guides/ai/examples/building-chatgpt-plugins', - }, - { - name: 'Hugging Face', - description: - "Hugging Face is an open-source provider of NLP technologies. Supabase provides a simple way to use Hugging Face's models in your applications.", - href: '/guides/ai/hugging-face', - }, - { - name: 'LangChain', - description: - 'LangChain is a language-agnostic, open-source, and self-hosted API for text translation, summarization, and sentiment analysis.', - href: '/guides/ai/langchain', - }, - { - name: 'LlamaIndex', - description: 'LlamaIndex is a data framework for your LLM applications.', - href: '/guides/ai/integrations/llamaindex', - }, -] - -## Case studies - -
    - {customers.map((x) => ( - - ))} -
    - -export const customers = [ - { - name: 'Berri AI Boosts Productivity by Migrating from AWS RDS to Supabase with pgvector', - description: - 'Learn how Berri AI overcame challenges with self-hosting their vector database on AWS RDS and successfully migrated to Supabase.', - href: 'https://supabase.com/customers/berriai', - }, - { - name: 'Mendable switches from Pinecone to Supabase for PostgreSQL vector embeddings', - description: - 'How Mendable boosts efficiency and accuracy of chat powered search for documentation using Supabase with pgvector', - href: 'https://supabase.com/customers/mendableai', - }, - { - name: 'Markprompt: GDPR-Compliant AI Chatbots for Docs and Websites', - description: - "AI-powered chatbot platform, Markprompt, empowers developers to deliver efficient and GDPR-compliant prompt experiences on top of their content, by leveraging Supabase's secure and privacy-focused database and authentication solutions", - href: 'https://supabase.com/customers/markprompt', - }, -] - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/choosing-compute-addon.mdx b/apps/docs/pages/guides/ai/choosing-compute-addon.mdx deleted file mode 100644 index 4ab4e13e808e7..0000000000000 --- a/apps/docs/pages/guides/ai/choosing-compute-addon.mdx +++ /dev/null @@ -1,212 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { Tabs } from 'ui' -export const TabPanel = Tabs.Panel - -export const meta = { - id: 'ai-choosing-compute-addon', - title: 'Choosing your Compute Add-on', - description: 'Choosing the right Compute Add-on for your vector workload.', - subtitle: 'Choosing the right Compute Add-on for your vector workload.', - sidebar_label: 'Choosing Compute Add-on', -} - -You have two options for scaling your vector workload: - -1. Increase the size of your database. This guide will help you choose the right size for your workload. -2. Spread your workload across multiple databases. You can find more details about this approach in [Engineering for Scale](engineering-for-scale). - -## Dimensionality - -The number of dimensions in your embeddings is the most important factor in choosing the right Compute Add-on. In general, the lower the dimensionality the better the performance. We've provided guidance for some of the more common embedding dimensions below. For each benchmark, we used [Vecs](https://github.com/supabase/vecs) to create a collection, upload the embeddings to a single table, and create an `inner-product` index for the embedding column. We then ran a series of queries to measure the performance of different compute add-ons: - -### 1536 Dimensions - -This benchmark uses the [dbpedia-entities-openai-1M](https://huggingface.co/datasets/KShivendu/dbpedia-entities-openai-1M) dataset, which contains 1,000,000 embeddings of text. Each embedding is 1536 dimensions created with the [OpenAI Embeddings API](https://platform.openai.com/docs/guides/embeddings). - - - - -| Plan | Vectors | Lists | RPS | Latency Mean | Latency p95 | RAM Usage | RAM | -| ------ | --------- | ----- | ---- | ------------ | ----------- | ------------------ | ------ | -| Free | 20,000 | 40 | 135 | 0.372 sec | 0.412 sec | 1 GB + 200 Mb Swap | 1 GB | -| Small | 50,000 | 100 | 140 | 0.357 sec | 0.398 sec | 1.8 GB | 2 GB | -| Medium | 100,000 | 200 | 130 | 0.383 sec | 0.446 sec | 3.7 GB | 4 GB | -| Large | 250,000 | 500 | 130 | 0.378 sec | 0.434 sec | 7 GB | 8 GB | -| XL | 500,000 | 1000 | 235 | 0.213 sec | 0.271 sec | 13.5 GB | 16 GB | -| 2XL | 1,000,000 | 2000 | 380 | 0.133 sec | 0.236 sec | 30 GB | 32 GB | -| 4XL | 1,000,000 | 2000 | 720 | 0.068 sec | 0.120 sec | 35 GB | 64 GB | -| 8XL | 1,000,000 | 2000 | 1250 | 0.039 sec | 0.066 sec | 38 GB | 128 GB | -| 12XL | 1,000,000 | 2000 | 1600 | 0.030 sec | 0.052 sec | 41 GB | 192 GB | -| 16XL | 1,000,000 | 2000 | 1790 | 0.029 sec | 0.051 sec | 45 GB | 256 GB | - -For 1,000,000 vectors 10 probes results to precision of 0.91. And for 500,000 vectors and below 10 probes results to precision in the range of 0.95 - 0.99. To increase precision, you need to increase the number of probes. - - - - -| Plan | Vectors | Lists | RPS | Latency Mean | Latency p95 | RAM Usage | RAM | -| ------ | --------- | ----- | --- | ------------ | ----------- | --------- | ------ | -| Free | 20,000 | 40 | - | - | - | - | 1 GB | -| Small | 50,000 | 100 | - | - | - | - | 2 GB | -| Medium | 100,000 | 200 | - | - | - | - | 4 GB | -| Large | 250,000 | 500 | - | - | - | - | 8 GB | -| XL | 500,000 | 1000 | - | - | - | - | 16 GB | -| 2XL | 1,000,000 | 2000 | 140 | 0.358 sec | 0.575 sec | 30 GB | 32 GB | -| 4XL | 1,000,000 | 2000 | 270 | 0.186 sec | 0.304 sec | 35 GB | 64 GB | -| 8XL | 1,000,000 | 2000 | 470 | 0.104 sec | 0.166 sec | 38 GB | 128 GB | -| 12XL | 1,000,000 | 2000 | 600 | 0.085 sec | 0.132 sec | 41 GB | 192 GB | -| 16XL | 1,000,000 | 2000 | 670 | 0.081 sec | 0.129 sec | 45 GB | 256 GB | - -For 1,000,000 vectors 40 probes results to precision of 0.98. Note that exact values may vary depending on the dataset and queries, we recommend to run benchmarks with your own data to get precise results. Use this table as a reference. - - - - -
    - multi database - multi database -
    - -### 960 Dimensions - -This benchmark uses the [gist-960-angular](http://corpus-texmex.irisa.fr/) dataset, which contains 1,000,000 embeddings of images. Each embedding is 960 dimensions. - - - - -| Plan | Vectors | Lists | RPS | Latency Mean | Latency p95 | RAM Usage | RAM | -| ------ | --------- | ----- | ---- | ------------ | ----------- | ------------------ | ------ | -| Free | 30,000 | 30 | 75 | 0.065 sec | 0.088 sec | 1 GB + 100 Mb Swap | 1 GB | -| Small | 100,000 | 100 | 78 | 0.064 sec | 0.092 sec | 1.8 GB | 2 GB | -| Medium | 250,000 | 250 | 58 | 0.085 sec | 0.129 sec | 3.2 GB | 4 GB | -| Large | 500,000 | 500 | 55 | 0.088 sec | 0.140 sec | 5 GB | 8 GB | -| XL | 1,000,000 | 1000 | 110 | 0.046 sec | 0.070 sec | 14 GB | 16 GB | -| 2XL | 1,000,000 | 1000 | 235 | 0.083 sec | 0.136 sec | 10 GB | 32 GB | -| 4XL | 1,000,000 | 1000 | 420 | 0.071 sec | 0.106 sec | 11 GB | 64 GB | -| 8XL | 1,000,000 | 1000 | 815 | 0.072 sec | 0.106 sec | 13 GB | 128 GB | -| 12XL | 1,000,000 | 1000 | 1150 | 0.052 sec | 0.078 sec | 15.5 GB | 192 GB | -| 16XL | 1,000,000 | 1000 | 1345 | 0.072 sec | 0.106 sec | 17.5 GB | 256 GB | - - - - -### 512 Dimensions - -This benchmark uses the [GloVe Reddit comments](https://nlp.stanford.edu/projects/glove/) dataset, which contains 1,623,397 embeddings of text. Each embedding is 512 dimensions. Random vectors were generated for queries. - - - - -| Plan | Vectors | Lists | RPS | Latency Mean | Latency p95 | RAM Usage | RAM | -| ------ | --------- | ----- | ---- | ------------ | ----------- | ------------------ | ------ | -| Free | 100,000 | 100 | 250 | 0.395 sec | 0.432 sec | 1 GB + 300 Mb Swap | 1 GB | -| Small | 250,000 | 250 | 440 | 0.223 sec | 0.250 sec | 2 GB + 200 Mb Swap | 2 GB | -| Medium | 500,000 | 500 | 425 | 0.116 sec | 0.143 sec | 3.7 GB | 4 GB | -| Large | 1,000,000 | 1000 | 515 | 0.096 sec | 0.116 sec | 7.5 GB | 8 GB | -| XL | 1,623,397 | 1275 | 465 | 0.212 sec | 0.272 sec | 14 GB | 16 GB | -| 2XL | 1,623,397 | 1275 | 1400 | 0.061 sec | 0.075 sec | 22 GB | 32 GB | -| 4XL | 1,623,397 | 1275 | 1800 | 0.027 sec | 0.043 sec | 20 GB | 64 GB | -| 8XL | 1,623,397 | 1275 | 2850 | 0.032 sec | 0.049 sec | 21 GB | 128 GB | -| 12XL | 1,623,397 | 1275 | 3700 | 0.020 sec | 0.036 sec | 26 GB | 192 GB | -| 16XL | 1,623,397 | 1275 | 3700 | 0.025 sec | 0.042 sec | 29 GB | 256 GB | - - - - -| Plan | Vectors | Lists | RPS | Latency Mean | Latency p95 | RAM Usage | RAM | -| ------ | --------- | ----- | --- | ------------ | ----------- | --------- | ------ | -| Free | 100,000 | 100 | - | - | - | - | 1 GB | -| Small | 250,000 | 250 | - | - | - | - | 2 GB | -| Medium | 500,000 | 500 | 75 | 0.656 sec | 0.750 sec | 3.7 GB | 4 GB | -| Large | 1,000,000 | 1000 | 102 | 0.488 sec | 0.580 sec | 7.5 GB | 8 GB | -| XL | 1,000,000 | 1000 | 188 | 0.525 sec | 0.596 sec | 14 GB | 16 GB | -| XL | 1,623,397 | 1275 | 75 | 0.679 sec | 0.798 sec | 14 GB | 16 GB | -| 2XL | 1,623,397 | 1275 | 160 | 0.314 sec | 0.384 sec | 22 GB | 32 GB | -| 4XL | 1,623,397 | 1275 | 300 | 0.083 sec | 0.113 sec | 20 GB | 64 GB | -| 8XL | 1,623,397 | 1275 | 565 | 0.105 sec | 0.141 sec | 21 GB | 128 GB | -| 12XL | 1,623,397 | 1275 | 840 | 0.093 sec | 0.124 sec | 26 GB | 192 GB | -| 16XL | 1,623,397 | 1275 | 940 | 0.084 sec | 0.108 sec | 29 GB | 256 GB | - - - - - - -It is possible to upload more vectors to a single table if Memory allows it (for example, 4XL plan and higher for OpenAI embeddings). But it will affect the performance of the queries: RPS will be lower, and latency will be higher. Scaling should be almost linear, but it is recommended to benchmark your workload to find the optimal number of vectors per table and per database instance. - - - -## Performance tips - -There are various ways to improve your pgvector performance. Here are some tips: - -### Pre-warming your database - -It's useful to execute a few thousand “warm-up” queries before going into production. This helps help with RAM utilization. This can also help to determine that you've selected the right instance size for your workload. - -### Increase the number of lists - -You can increase the Requests per Second by increasing the number of `lists`. This also has an important caveat: building the index takes longer with more lists. - -
    - multi database - multi database -
    - -Check out more tips and the complete step-by-step guide in [Going to Production for AI applications](going-to-prod). - -## Benchmark Methodology - -We follow techniques outlined in the [ANN Benchmarks](https://github.com/erikbern/ann-benchmarks) methodology. A Python test runner is responsible for uploading the data, creating the index, and running the queries. The pgvector engine is implemented using [vecs](https://github.com/supabase/vecs), a Python client for pgvector. - -
    - multi database - multi database -
    - -Each test is run for a minimum of 30-40 minutes. They include a series of experiments executed at different concurrency levels to measure the engine's performance under different load types. The results are then averaged. - -As a general recommendation, we suggest using a concurrency level of 5 or more for most workloads and 30 or more for high-load workloads. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/concepts.mdx b/apps/docs/pages/guides/ai/concepts.mdx deleted file mode 100644 index 27d71515f339d..0000000000000 --- a/apps/docs/pages/guides/ai/concepts.mdx +++ /dev/null @@ -1,67 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-concepts', - title: 'Concepts', - description: 'Learn about embeddings within AI and vector applications.', - sidebar_label: 'Concepts', -} - -Embeddings are core to many AI and vector applications. This guide covers these concepts. If you prefer to get started right away, see our guide on [Generating Embeddings](/docs/guides/ai/quickstarts/generate-text-embeddings). - -## What are embeddings? - -Embeddings capture the "relatedness" of text, images, video, or other types of information. This relatedness is most commonly used for: - -- **Search:** how similar is a search term to a body of text? -- **Recommendations:** how similar are two products? -- **Classifications:** how do we categorize a body of text? -- **Clustering:** how do we identify trends? - -Let's explore an example of text embeddings. Say we have three phrases: - -1. "The cat chases the mouse" -2. "The kitten hunts rodents" -3. "I like ham sandwiches" - -Your job is to group phrases with similar meaning. If you are a human, this should be obvious. Phrases 1 and 2 are almost identical, while phrase 3 has a completely different meaning. - -Although phrases 1 and 2 are similar, they share no common vocabulary (besides "the"). Yet their meanings are nearly identical. How can we teach a computer that these are the same? - -## Human language - -Humans use words and symbols to communicate language. But words in isolation are mostly meaningless - we need to draw from shared knowledge & experience in order to make sense of them. The phrase “You should Google it” only makes sense if you know that Google is a search engine and that people have been using it as a verb. - -In the same way, we need to train a neural network model to understand human language. An effective model should be trained on millions of different examples to understand what each word, phrase, sentence, or paragraph could mean in different contexts. - -So how does this relate to embeddings? - -## How do embeddings work? - -Embeddings compress discrete information (words & symbols) into distributed continuous-valued data (vectors). If we took our phrases from before and plot them on a chart, it might look something like this: - -Vector similarity - -Phrases 1 and 2 would be plotted close to each other, since their meanings are similar. We would expect phrase 3 to live somewhere far away since it isn't related. If we had a fourth phrase, “Sally ate Swiss cheese”, this might exist somewhere between phrase 3 (cheese can go on sandwiches) and phrase 1 (mice like Swiss cheese). - -In this example we only have 2 dimensions: the X and Y axis. In reality, we would need many more dimensions to effectively capture the complexities of human language. - -## Using embeddings - -Compared to our 2-dimensional example above, most embedding models will output many more dimensions. For example the open source [`gte-small`](https://huggingface.co/Supabase/gte-small) model outputs 384 dimensions. - -Why is this useful? Once we have generated embeddings on multiple texts, it is trivial to calculate how similar they are using vector math operations like cosine distance. A common use case for this is search. Your process might look something like this: - -1. Pre-process your knowledge base and generate embeddings for each page -2. Store your embeddings to be referenced later -3. Build a search page that prompts your user for input -4. Take user's input, generate a one-time embedding, then perform a similarity search against your pre-processed embeddings. -5. Return the most similar pages to the user - -## See also - -- [Structured and Unstructured embeddings](/docs/guides/ai/structured-unstructured) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/engineering-for-scale.mdx b/apps/docs/pages/guides/ai/engineering-for-scale.mdx deleted file mode 100644 index 871d0a5059c93..0000000000000 --- a/apps/docs/pages/guides/ai/engineering-for-scale.mdx +++ /dev/null @@ -1,160 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-engineering-for-scale', - title: 'Engineering for Scale', - description: 'Building an enterprise-grade vector architecture', - subtitle: 'Building an enterprise-grade vector architecture.', - sidebar_label: 'Engineering for Scale', -} - -Content sources for vectors can be extremely large. As you grow you should run your Vector workloads across several secondary databases (sometimes called "pods"), which allows each collection to scale independently. - -## Simple workloads - -For small workloads, it's typical to store your data in a single database. - -If you've used [Vecs](/docs/guides/ai/vecs-python-client) to create 3 different collections, you can expose collections to your web or mobile application using [views](/docs/guides/database/tables#views): - -
    - single database - single database -
    - -For example, with 3 collections, called `docs`, `posts`, and `images`, we could expose the "docs" inside the public schema like this: - -```sql -create view public.docs as -select - id, - embedding, - metadata, # Expose the metadata as JSON - (metadata->>'url')::text as url # Extract the URL as a string -from vector -``` - -You can then use any of the client libraries to access your collections within your applications: - -{/* prettier-ignore */} -```js -const { data, error } = await supabase - .from('docs') - .select('id, embedding, metadata') - .eq('url', '/hello-world') -``` - -## Enterprise workloads - -As you move into production, we recommend running splitting your collections into separate projects. This is because it allows your vector stores to scale independently of your production data. Vectors typically grow faster than operational data, and they have different resource requirements. Running them on separate databases removes the single-point-of-failure. - -
    - With secondaries - With secondaries -
    - -You can use as many secondary databases as you need to manage your collections. With this architecture, you have 2 options for accessing collections within your application: - -1. Query the collections directly using Vecs. -2. Access the collections from your Primary database through a Wrapper. - -You can use both of these in tandem to suit your use-case. We recommend option `1` wherever possible, as it offers the most scalability. - -### Query collections using Vecs - -Vecs provides methods for querying collections, either using a [cosine similarity function](https://supabase.github.io/vecs/api/#basic) or with [metadata filtering](https://supabase.github.io/vecs/api/#metadata-filtering). - -```python -# cosine similarity -docs.query(query_vector=[0.4,0.5,0.6], limit=5) - -# metadata filtering -docs.query( - query_vector=[0.4,0.5,0.6], - limit=5, - filters={"year": {"$eq": 2012}}, # metadata filters -) -``` - -### Accessing external collections using Wrappers - -Supabase supports [Foreign Data Wrappers](/blog/postgres-foreign-data-wrappers-rust). Wrappers allow you to connect two databases together so that you can query them over the network. - -This involves 2 steps: connecting to your remote database from the primary and creating a Foreign Table. - -#### Connecting your remote database - -Inside your Primary database we need to provide the credentials to access the secondary database: - -```sql -create extension postgres_fdw; - -create server docs_server -foreign data wrapper postgres_fdw -options (host 'db.xxx.supabase.co', port '5432', dbname 'postgres'); - -create user mapping for docs_user -server docs_server -options (user 'postgres', password 'password'); -``` - -#### Create a foreign table - -We can now create a foreign table to access the data in our secondary project. - -```sql -create foreign table docs ( - id text not null, - embedding vector(384), - metadata jsonb, - url text -) -server docs_server -options (schema_name 'public', table_name 'docs'); -``` - -This looks very similar to our View example above, and you can continue to use the client libraries to access your collections through the foreign table: - -{/* prettier-ignore */} -```js -const { data, error } = await supabase - .from('docs') - .select('id, embedding, metadata') - .eq('url', '/hello-world') -``` - -### Enterprise architecture - -This diagram provides an example architecture that allows you to access the collections either with our client libraries or using Vecs. You can add as many secondary databases as you need (in this example we only show one): - -
    - multi database - multi database -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/examples/building-chatgpt-plugins.mdx b/apps/docs/pages/guides/ai/examples/building-chatgpt-plugins.mdx deleted file mode 100644 index 80d80a6cc6597..0000000000000 --- a/apps/docs/pages/guides/ai/examples/building-chatgpt-plugins.mdx +++ /dev/null @@ -1,159 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import StepHikeCompact from '~/components/StepHikeCompact' - -export const meta = { - title: 'Building ChatGPT plugins', - subtitle: 'Use Supabase as a Retrieval Store for your ChatGPT plugin.', - breadcrumb: 'AI Examples', -} - -ChatGPT recently released [Plugins](https://openai.com/blog/chatgpt-plugins) which help ChatGPT access up-to-date information, run computations, or use third-party services. -If you're building a plugin for ChatGPT, you'll probably want to answer questions from a specific source. We can solve this with “retrieval plugins”, which allow ChatGPT to access information from a database. - -## What is ChatGPT Retrieval Plugin? - -A [Retrieval Plugin](https://github.com/openai/chatgpt-retrieval-plugin) is a Python project designed to inject external data into a ChatGPT conversation. It does a few things: - -1. Turn documents into smaller chunks. -2. Converts chunks into embeddings using OpenAI's `text-embedding-ada-002` model. -3. Stores the embeddings into a vector database. -4. Queries the vector database for relevant documents when a question is asked. - -It allows ChatGPT to dynamically pull relevant information into conversations from your data sources. This could be PDF documents, Confluence, or Notion knowledge bases. - -## Example: Chat with Postgres Docs - -Let’s build an example where we can “ask ChatGPT questions” about the Postgres documentation. Although ChatGPT already knows about the Postgres documentation because it is publicly available, this is a simple example which demonstrates how to work with PDF files. - -This plugin requires several steps: - -1. Download all the [Postgres docs as a PDF](https://www.postgresql.org/files/documentation/pdf/15/postgresql-15-US.pdf) -2. Convert the docs into chunks of embedded text and store them in Supabase -3. Run our plugin locally so that we can ask questions about the Postgres docs. - -We'll be saving the Postgres documentation in Postgres, and ChatGPT will be retrieving the documentation whenever a user asks a question: - -diagram reference - -diagram reference - -### Step 1: Fork the ChatGPT Retrieval Plugin repository - -Fork the ChatGPT Retrieval Plugin repository to your GitHub account and clone it to your local machine. Read through the `README.md` file to understand the project structure. - -### Step 2: Install dependencies - -Choose your desired datastore provider and remove unused dependencies from `pyproject.toml`. For this example, we'll use Supabase. And install dependencies with Poetry: - -```bash -poetry install -``` - -### Step 3: Create a Supabase project - -Create a [Supabase project](https://supabase.com/dashboard) and database by following the instructions [here](https://supabase.com/docs/guides/platform). Export the environment variables required for the retrieval plugin to work: - -```bash -export OPENAI_API_KEY= -export DATASTORE=supabase -export SUPABASE_URL= -export SUPABASE_SERVICE_ROLE_KEY= -``` - -For Postgres datastore, you'll need to export these environment variables instead: - -```bash -export OPENAI_API_KEY= -export DATASTORE=postgres -export PG_HOST= -export PG_PASSWORD= -``` - -### Step 4: Run Postgres Locally - -To start quicker you may use Supabase CLI to spin everything up locally as it already includes pgvector from the start. Install `supabase-cli`, go to the `examples/providers` folder in the repo and run: - -```bash -supabase start -``` - -This will pull all docker images and run supabase stack in docker on your local machine. It will also apply all the necessary migrations to set the whole thing up. You can then use your local setup the same way, just export the environment variables and follow to the next steps. - -Using `supabase-cli` is not required and you can use any other docker image or hosted version of PostgresDB that includes `pgvector`. Just make sure you run migrations from `examples/providers/supabase/migrations/20230414142107_init_pg_vector.sql`. - -### Step 5: Obtain OpenAI API key - -To create embeddings Plugin uses OpenAI API and `text-embedding-ada-002` model. Each time we add some data to our datastore, or try to query relevant information from it, embedding will be created either for inserted data chunk, or for the query itself. To make it work we need to export `OPENAI_API_KEY`. If you already have an account in OpenAI, you just need to go to [User Settings - API keys](https://platform.openai.com/account/api-keys) and Create new secret key. - -![OpenAI Secret Keys](/docs/img/ai/chatgpt-plugins/openai-secret-keys.png) - -### Step 6: Run the plugin - -Execute the following command to run the plugin: - -```bash -poetry run dev -# output -INFO: Will watch for changes in these directories: ['./chatgpt-retrieval-plugin'] -INFO: Uvicorn running on http://localhost:3333 (Press CTRL+C to quit) -INFO: Started reloader process [87843] using WatchFiles -INFO: Started server process [87849] -INFO: Waiting for application startup. -INFO: Application startup complete. -``` - -The plugin will start on your localhost - port `:3333` by default. - -### Step 6: Populating data in the datastore - -For this example, we'll upload Postgres documentation to the datastore. Download the [Postgres documentation](https://www.postgresql.org/files/documentation/pdf/15/postgresql-15-US.pdf) and use the `/upsert-file` endpoint to upload it: - -```bash -curl -X POST -F \\"file=@./postgresql-15-US.pdf\\" -``` - -The plugin will split your data and documents into smaller chunks automatically. You can view the chunks using the Supabase dashboard or any other SQL client you prefer. For the whole Postgres Documentation I got 7,904 records in my documents table, which is not a lot, but we can try to add index for `embedding` column to speed things up by a little. To do so, you should run the following SQL command: - -```sql -create index on documents -using ivfflat (embedding vector_ip_ops) -with (lists = 10); -``` - -This will create an index for the inner product distance function. Important to note that it is an approximate index. It will change the logic from performing the exact nearest neighbor search to the approximate nearest neighbor search. - -We are using `lists = 10`, because as a general guideline, you should start looking for optimal lists constant value with the formula: `rows / 1000` when you have less than 1 million records in your table. - -### Step 7: Using our plugin within ChatGPT - -To integrate our plugin with ChatGPT, register it in the ChatGPT dashboard. Assuming you have access to ChatGPT Plugins and plugin development, select the Plugins model in a new chat, then choose "Plugin store" and "Develop your own plugin." Enter `localhost:3333` into the domain input, and your plugin is now part of ChatGPT. - -![ChatGPT Plugin Store](/docs/img/ai/chatgpt-plugins/chatgpt-plugin-store.png) - -![ChatGPT Local Plugin](/docs/img/ai/chatgpt-plugins/chatgpt-local-plugin.png) - -You can now ask questions about Postgres and receive answers derived from the documentation. - -Let's try it out: ask ChatGPT to find out when to use `check` and when to use `using`. You will be able to see what queries were sent to our plugin and what it responded to. - -![Ask ChatGPT](/docs/img/ai/chatgpt-plugins/ask-chatgpt.png) - -And after ChatGPT receives a response from the plugin it will answer your question with the data from the documentation. - -![ChatGPT Reply](/docs/img/ai/chatgpt-plugins/chatgpt-reply.png) - -## Resources - -- ChatGPT Retrieval Plugin: [github.com/openai/chatgpt-retrieval-plugin](https://github.com/openai/chatgpt-retrieval-plugin) -- ChatGPT Plugins: [official documentation](https://platform.openai.com/docs/plugins/introduction) - -export const Page = ({ children }) => -export default Page diff --git a/apps/docs/pages/guides/ai/examples/headless-vector-search.mdx b/apps/docs/pages/guides/ai/examples/headless-vector-search.mdx deleted file mode 100644 index 31cabb29dcf1c..0000000000000 --- a/apps/docs/pages/guides/ai/examples/headless-vector-search.mdx +++ /dev/null @@ -1,124 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import StepHikeCompact from '~/components/StepHikeCompact' - -export const meta = { - title: 'Adding generative Q&A for your documentation', - subtitle: - 'Learn how to build a ChatGPT-style doc search powered using our headless search toolkit.', - breadcrumb: 'AI Examples', -} - -Supabase provides a [Headless Search Toolkit](https://github.com/supabase/headless-vector-search) for adding "Generative Q&A" to your documentation. The toolkit is "headless", so that you can integrate it into your existing website and style it to match your website theme. - -You can see how this works with the Supabase docs. Just him `cmd+k` and "ask" for something like "what are the features of supabase?". You will see that the response is streamed back, using the information provided in the docs: - -![headless search](/docs/img/ai/headless-search/headless.png) - -## Tech stack - -- Supabase: Database & Edge Functions. -- OpenAI: Embeddings and completions. -- GitHub Actions: for ingesting your markdown docs. - -## Toolkit - -This toolkit consists of 2 parts: - -- The [Headless Vector Search](https://github.com/supabase/headless-vector-search) template which you can deploy in your own organization. -- A [GitHub Action](https://github.com/supabase/embeddings-generator) which will ingest your markdown files, convert them to embeddings, and store them in your database. - -## Usage - -There are 3 steps to build similarity search inside your documentation: - -1. Prepare your database. -2. Ingest your documentation. -3. Add a search interface. - -### Prepare your database - -To prepare, create a [new Supabase project](https://database.new) and store the database and API credentials, which you can find in the project [settings](https://supabase.com/dashboard/_/settings). - -Now we can use the [Headless Vector Search](https://github.com/supabase/headless-vector-search#set-up) instructions to set up the database: - -1. Clone the repo to your local machine: `git clone git@github.com:supabase/headless-vector-search.git` -2. Link the repo to your remote project: `supabase link --project-ref XXX` -3. Apply the database migrations: `supabase db push` -4. Set your OpenAI key as a secret: `supabase secrets set OPENAI_KEY=sk-xxx` -5. Deploy the Edge Functions: `supabase functions deploy --no-verify-jwt` -6. Expose `docs` schema via API in Supabase Dashboard [settings](https://supabase.com/dashboard/project/_/settings/api) > `API Settings` > `Exposed schemas` - -### Ingest your documentation - -Now we need to push your documentation into the database as embeddings. You can do this manually, but to make it easier we've created a [GitHub Action](https://github.com/marketplace/actions/supabase-embeddings-generator) which can update your database every time there is a Pull Request. - -In your knowledge base repository, create a new action called `.github/workflows/generate_embeddings.yml` with the following content: - -```yml -name: 'generate_embeddings' -on: # run on main branch changes - push: - branches: - - main - -jobs: - generate: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: supabase/supabase-embeddings-generator@v0.0.x # Update this to the latest version. - with: - supabase-url: 'https://your-project-ref.supabase.co' # Update this to your project URL. - supabase-service-role-key: ${{ secrets.SUPABASE_SERVICE_ROLE_KEY }} - openai-key: ${{ secrets.OPENAI_KEY }} - docs-root-path: 'docs' # the path to the root of your md(x) files -``` - -Make sure to choose the latest version, and set your `SUPABASE_SERVICE_ROLE_KEY` and `OPENAI_KEY` as repository secrets in your repo settings (settings > secrets > actions). - -### Add a search interface - -Now inside your docs, you need to create a search interface. Because this is a headless interface, you can use it with any language. The only requirement is that you send the user query to the `query` Edge Function, which will stream an answer back from OpenAI. It might look something like this: - -```js -const onSubmit = (e: Event) => { - e.preventDefault() - answer.value = "" - isLoading.value = true - - const query = new URLSearchParams({ query: inputRef.current!.value }) - const projectUrl = `https://your-project-ref.functions.supabase.co` - const queryURL = `${projectURL}/${query}` - const eventSource = new EventSource(queryURL) - - eventSource.addEventListener("error", (err) => { - isLoading.value = false - console.error(err) - }) - - eventSource.addEventListener("message", (e: MessageEvent) => { - isLoading.value = false - - if (e.data === "[DONE]") { - eventSource.close() - return - } - - const completionResponse: CreateCompletionResponse = JSON.parse(e.data) - const text = completionResponse.choices[0].text - - answer.value += text - }); - - isLoading.value = true -} -``` - -## Resources - -- Read about how we built [ChatGPT for the Supabase Docs](https://supabase.com/blog/chatgpt-supabase-docs). -- Read the pgvector Docs for [Embeddings and vector similarity](/docs/guides/database/extensions/pgvector) -- See how to build something like this from scratch [using Next.js](/docs/guides/ai/examples/nextjs-vector-search). - -export const Page = ({ children }) => -export default Page diff --git a/apps/docs/pages/guides/ai/examples/huggingface-image-captioning.mdx b/apps/docs/pages/guides/ai/examples/huggingface-image-captioning.mdx deleted file mode 100644 index 163422ee32555..0000000000000 --- a/apps/docs/pages/guides/ai/examples/huggingface-image-captioning.mdx +++ /dev/null @@ -1,99 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Generate image captions using Hugging Face', - description: - 'Use the Hugging Face Inference API to make calls to 100,000+ Machine Learning models from Supabase Edge Functions.', - subtitle: - 'Use the Hugging Face Inference API to make calls to 100,000+ Machine Learning models from Supabase Edge Functions.', - video: 'https://www.youtube.com/v/OgnYxRkxEUw', - tocVideo: 'OgnYxRkxEUw', -} - -We can combine Hugging Face with [Supabase Storage](https://supabase.com/storage) and [Database Webhooks](https://supabase.com/docs/guides/database/webhooks) to automatically caption for any image we upload to a storage bucket. - -## About Hugging Face - -[Hugging Face](https://huggingface.co/) is the collaboration platform for the machine learning community. - -[Huggingface.js](https://huggingface.co/docs/huggingface.js/index) provides a convenient way to make calls to 100,000+ Machine Learning models, making it easy to incorporate AI functionality into your [Supabase Edge Functions](https://supabase.com/edge-functions). - -## Setup - -- Open your Supabase project dashboard or [create a new project](https://supabase.com/dashboard/projects). -- [Create a new bucket](https://supabase.com/dashboard/project/_/storage/buckets) called `images`. -- Generate TypeScript types from remote Database. -- Create a new Database table called `image_caption`. - - Create `id` column of type `uuid` which references `storage.objects.id`. - - Create a `caption` column of type `text`. -- Regenerate TypeScript types to include new `image_caption` table. -- Deploy the function to Supabase: `supabase functions deploy huggingface-image-captioning`. -- Create the Database Webhook in the [Supabase Dashboard](https://supabase.com/dashboard/project/_/database/hooks) to trigger the `huggingface-image-captioning` function anytime a record is added to the `storage.objects` table. - -## Generate TypeScript Types - -To generate the types.ts file for the storage and public schemas, run the following command in the terminal: - -```bash -supabase gen types typescript --project-id=your-project-ref --schema=storage,public > supabase/functions/huggingface-image-captioning/types.ts -``` - -## Code - -Find the complete code on [GitHub](https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/huggingface-image-captioning). - -```ts -import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' -import { HfInference } from 'https://esm.sh/@huggingface/inference@2.3.2' -import { createClient } from 'https://esm.sh/@supabase/supabase-js@2.7.1' -import { Database } from './types.ts' - -console.log('Hello from `huggingface-image-captioning` function!') - -const hf = new HfInference(Deno.env.get('HUGGINGFACE_ACCESS_TOKEN')) - -type SoRecord = Database['storage']['Tables']['objects']['Row'] -interface WebhookPayload { - type: 'INSERT' | 'UPDATE' | 'DELETE' - table: string - record: SoRecord - schema: 'public' - old_record: null | SoRecord -} - -serve(async (req) => { - const payload: WebhookPayload = await req.json() - const soRecord = payload.record - const supabaseAdminClient = createClient( - // Supabase API URL - env var exported by default when deployed. - Deno.env.get('SUPABASE_URL') ?? '', - // Supabase API SERVICE ROLE KEY - env var exported by default when deployed. - Deno.env.get('SUPABASE_SERVICE_ROLE_KEY') ?? '' - ) - - // Construct image url from storage - const { data, error } = await supabaseAdminClient.storage - .from(soRecord.bucket_id!) - .createSignedUrl(soRecord.path_tokens!.join('/'), 60) - if (error) throw error - const { signedUrl } = data - - // Run image captioning with Huggingface - const imgDesc = await hf.imageToText({ - data: await (await fetch(signedUrl)).blob(), - model: 'nlpconnect/vit-gpt2-image-captioning', - }) - - // Store image caption in Database table - await supabaseAdminClient - .from('image_caption') - .insert({ id: soRecord.id!, caption: imgDesc.generated_text }) - .throwOnError() - - return new Response('ok') -}) -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/examples/image-search-openai-clip.mdx b/apps/docs/pages/guides/ai/examples/image-search-openai-clip.mdx deleted file mode 100644 index 0ca6fcd19d259..0000000000000 --- a/apps/docs/pages/guides/ai/examples/image-search-openai-clip.mdx +++ /dev/null @@ -1,177 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'examples-image-search-python', - title: 'Image Search with OpenAI CLIP', - description: 'Implement image search with the OpenAI CLIP Model and Supabase Vector.', - subtitle: 'Implement image search with the OpenAI CLIP Model and Supabase Vector.', -} - -The [OpenAI CLIP Model](https://github.com/openai/CLIP) was trained on a variety of (image, text)-pairs. You can use the CLIP model for: - -- Text-to-Image / Image-To-Text / Image-to-Image / Text-to-Text Search -- You can fine-tune it on your own image and text data with the regular SentenceTransformers training code. - -[SentenceTransformers](https://www.sbert.net/examples/applications/image-search/README.html) provides models that allow you to embed images and text into the same vector space. You can use this to find similar images as well as to implement image search. - -You can find the full application code as a Python Poetry project on [GitHub](https://github.com/supabase/supabase/tree/master/examples/ai/image_search#image-search-with-supabase-vector). - -## Create a new Python Project with Poetry - -[Poetry](https://python-poetry.org/) provides packaging and dependency management for Python. If you haven't already, install poetry via pip: - -```shell -pip install poetry -``` - -Then initialize a new project: - -```shell -poetry new image-search -``` - -## Setup Supabase project - -If you haven't already, [install the Supabase CLI](/docs/guides/cli), then initialize Supabase in the root of your newly created poetry project: - -```shell -supabase init -``` - -Next, start your local Supabase stack: - -```shell -supabase start -``` - -This will start up the Supabase stack locally and print out a bunch of environtment details, including your local `DB URL`. Make a note of that for later user. - -## Install the Dependencies - -We will need to add the following dependencies to our project: - -- [`vecs`](https://github.com/supabase/vecs#vecs): Supabase Vector Python Client. -- [`sentence-transformers`](https://huggingface.co/sentence-transformers/clip-ViT-B-32): a framework for sentence, text and image embeddings (used with OpenAI CLIP model) -- [`matplotlib`](https://matplotlib.org/): for displaying our image result - -```shell -poetry add vecs sentence-transformers matplotlib -``` - -## Import the necessary dependencies - -At the top of your main python script, import the dependencies and store your `DB URL` from above in a variable: - -```python -from PIL import Image -from sentence_transformers import SentenceTransformer -import vecs -from matplotlib import pyplot as plt -from matplotlib import image as mpimg - -DB_CONNECTION = "postgresql://postgres:postgres@localhost:54322/postgres" -``` - -## Create embeddings for your images - -In the root of your project, create a new folder called `images` and add some images. You can use the images from the example project on [GitHub](https://github.com/supabase/supabase/tree/master/examples/ai/image_search/images) or you can find license free images on [unsplash](https://unsplash.com). - -Next, create a `seed` method, which will create a new Supabase Vector Collection, generate embeddings for your images, and upsert the embeddings into your database: - -```python -def seed(): - # create vector store client - vx = vecs.create_client(DB_CONNECTION) - - # create a collection of vectors with 3 dimensions - images = vx.create_collection(name="image_vectors", dimension=512) - - # Load CLIP model - model = SentenceTransformer('clip-ViT-B-32') - - # Encode an image: - img_emb1 = model.encode(Image.open('./images/one.jpg')) - img_emb2 = model.encode(Image.open('./images/two.jpg')) - img_emb3 = model.encode(Image.open('./images/three.jpg')) - img_emb4 = model.encode(Image.open('./images/four.jpg')) - - # add records to the *images* collection - images.upsert( - vectors=[ - ( - "one.jpg", # the vector's identifier - img_emb1, # the vector. list or np.array - {"type": "jpg"} # associated metadata - ), ( - "two.jpg", - img_emb2, - {"type": "jpg"} - ), ( - "three.jpg", - img_emb3, - {"type": "jpg"} - ), ( - "four.jpg", - img_emb4, - {"type": "jpg"} - ) - ] - ) - print("Inserted images") - - # index the collection for fast search performance - images.create_index() - print("Created index") -``` - -Add this method as a script in your `pyproject.toml` file: - -```toml -[tool.poetry.scripts] -seed = "image_search.main:seed" -search = "image_search.main:search" -``` - -After activating the virtual environtment with `poetry shell` you can now run your seed script via `poetry run seed`. You can inspect the generated embeddings in your local database by visiting the local Supabase dashboard at [localhost:54323](http://localhost:54323/project/default/editor), selecting the `vecs` schema, and the `image_vectors` database. - -## Perform an Image Search from a Text Query - -With Supabase Vector we can easily query our embeddings. We can use either an image as search input or alternative we can generate an embedding from a string input and use that as the query input: - -```python -def search(): - # create vector store client - vx = vecs.create_client(DB_CONNECTION) - images = vx.get_collection(name="image_vectors") - - # Load CLIP model - model = SentenceTransformer('clip-ViT-B-32') - # Encode text query - query_string = "a bike in front of a red brick wall" - text_emb = model.encode(query_string) - - # query the collection filtering metadata for "type" = "jpg" - results = images.query( - query_vector=text_emb, # required - limit=1, # number of records to return - filters={"type": {"$eq": "jpg"}}, # metadata filters - ) - result = results[0] - print(result) - plt.title(result) - image = mpimg.imread('./images/' + result) - plt.imshow(image) - plt.show() -``` - -By limiting the query to one result, we can show the most relevant image to the user. Finally we use `matplotlib` to show the image result to the user. - -That's it, go ahead and test it out by running `poetry run search` and you will be presented with an image of a "bike in front of a red brick wall". - -## Conclusion - -With just a couple of lines of Python you are able to implement image search as well as reverse image search using OpenAI's CLIP model and Supabase Vector. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/examples/nextjs-vector-search.mdx b/apps/docs/pages/guides/ai/examples/nextjs-vector-search.mdx deleted file mode 100644 index a568300d26aad..0000000000000 --- a/apps/docs/pages/guides/ai/examples/nextjs-vector-search.mdx +++ /dev/null @@ -1,547 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import StepHikeCompact from '~/components/StepHikeCompact' - -export const meta = { - title: 'Vector search with Next.js and OpenAI', - subtitle: - 'Learn how to build a ChatGPT-style doc search powered by Next.js, OpenAI, and Supabase.', - breadcrumb: 'AI Examples', - video: 'https://www.youtube.com/v/xmfNUCjszh4', - tocVideo: 'xmfNUCjszh4', -} - -While our [Headless Vector search](/docs/guides/ai/examples/headless-vector-search) provides a toolkit for generative Q&A, in this tutorial we'll go more in-depth, build a custom ChatGPT-like search experience from the ground-up using Next.js. You will: - -1. Convert your markdown into embeddings using OpenAI. -2. Store you embeddings in Postgres using pgvector. -3. Deploy a function for answering your users' questions. - -You can read our [Supabase Clippy](https://supabase.com/blog/chatgpt-supabase-docs) blog post for a full example. - -We assume that you have a Next.js project with a collection of `.mdx` files nested inside your `pages` directory. We will start developing locally with the Supabase CLI and then push our local database changes to our hosted Supabase project. You can find the [full Next.js example on GitHub](https://github.com/supabase-community/nextjs-openai-doc-search). - -## Create a project - -1. [Create a new project](https://supabase.com/dashboard) in the Supabase Dashboard. -1. Enter your project details. -1. Wait for the new database to launch. - -## Prepare the database - -Let's prepare the database schema. We can use the "OpenAI Vector Search" quickstart in the [SQL Editor](https://supabase.com/dashboard/project/_/sql), or you can copy/paste the SQL below and run it yourself. - - - - -1. Go to the [SQL Editor](https://supabase.com/dashboard/project/_/sql) page in the Dashboard. -2. Click **OpenAI Vector Search**. -3. Click **Run**. - - - - - - - - - - - Make sure you have the latest version of the [Supabase CLI installed](/docs/guides/cli/getting-started). - - Initialize Supabase in the root directory of your app. - - - - - - ```bash - supabase init - ``` - - - - - - - - - To make changes to our local database, we need to create a new migration. This will create a new `.sql` file in our `supabase/migrations` folder, where we can write SQL that will be applied to our local database when starting Supabase locally. - - - - - - ```bash - supabase migration new init - ``` - - - - - - - - - Copy the following SQL line into the newly created migration file to enable the pgvector extension. - - - - - - ```sql - -- Enable pgvector extension - create extension if not exists vector with schema public; - ``` - - - - - - - - - Copy these SQL queries to your migration file. It will create two tables in our database schema. - - - - - - ```sql - -- Stores the checksum of our pages. - -- This ensures that we only regenerate embeddings - -- when the page content has changed. - create table "public"."nods_page" ( - id bigserial primary key, - parent_page_id bigint references public.nods_page, - path text not null unique, - checksum text, - meta jsonb, - type text, - source text - ); - alter table "public"."nods_page" - enable row level security; - - -- Stores the actual embeddings with some metadata - create table "public"."nods_page_section" ( - id bigserial primary key, - page_id bigint not null references public.nods_page on delete cascade, - content text, - token_count int, - embedding vector(1536), - slug text, - heading text - ); - alter table "public"."nods_page_section" - enable row level security; - ``` - - - - - - - - - Anytime the user sends a query, we want to find the content that's relevant to their questions. We can do this using pgvector's similarity search. - - These are quite complex SQL operations, so let's wrap them in database functions that we can call from our frontend using [RPC](https://supabase.com/docs/reference/javascript/rpc). - - - - - - ```sql - -- Create embedding similarity search functions - create or replace function match_page_sections( - embedding vector(1536), - match_threshold float, - match_count int, - min_content_length int - ) - returns table ( - id bigint, - page_id bigint, - slug text, - heading text, - content text, - similarity float - ) - language plpgsql - as $$ - #variable_conflict use_variable - begin - return query - select - nods_page_section.id, - nods_page_section.page_id, - nods_page_section.slug, - nods_page_section.heading, - nods_page_section.content, - (nods_page_section.embedding <#> embedding) * -1 as similarity - from nods_page_section - - -- We only care about sections that have a useful amount of content - where length(nods_page_section.content) >= min_content_length - - -- The dot product is negative because of a Postgres limitation, so we negate it - and (nods_page_section.embedding <#> embedding) * -1 > match_threshold - - -- OpenAI embeddings are normalized to length 1, so - -- cosine similarity and dot product will produce the same results. - -- Using dot product which can be computed slightly faster. - -- - -- For the different syntaxes, see https://github.com/pgvector/pgvector - order by nods_page_section.embedding <#> embedding - - limit match_count; - end; - $$; - ``` - - - - - - - - - Start Supabase locally. At this point all files in `supabase/migrations` will be applied to your database and you're ready to go. - - - - - - ```bash - supabase start - ``` - - - - - - - - - Once ready, you can link your local project to your cloud hosted Supabase project and push the local changes to your hosted instance. - - - - - - ```bash - supabase link --project-ref=your-project-ref - - supabase db push - ``` - - - - - - - - - - -## Pre-process the knowledge base at build time - -With our database set up, we need to process and store all `.mdx` files in the `pages` directory. You can find the full script [here](https://github.com/supabase-community/nextjs-openai-doc-search/blob/main/lib/generate-embeddings.ts), or follow the steps below: - - - - - - - Create a new file `lib/generate-embeddings.ts` and copy the code over from [GitHub](https://github.com/supabase-community/nextjs-openai-doc-search/blob/main/lib/generate-embeddings.ts). - - - - - - ```bash - curl \ - https://raw.githubusercontent.com/supabase-community/nextjs-openai-doc-search/main/lib/generate-embeddings.ts \ - -o "lib/generate-embeddings.ts" - ``` - - - - - - - - - We need some environment variables to run the script. Add them to your `.env` file and make sure your `.env` file is not committed to source control! - You can get your local Supabase credentials by running `supabase status`. - - - - - - ```bash - NEXT_PUBLIC_SUPABASE_URL= - NEXT_PUBLIC_SUPABASE_ANON_KEY= - SUPABASE_SERVICE_ROLE_KEY= - - # Get your key at https://platform.openai.com/account/api-keys - OPENAI_KEY= - ``` - - - - - - - - - Include the script in your `package.json` script commands to enable Vercel to automaticall run it at build time. - - - - - - ```json - "scripts": { - "dev": "next dev", - "build": "pnpm run embeddings && next build", - "start": "next start", - "embeddings": "tsx lib/generate-embeddings.ts" - }, - ``` - - - - - - - -## Create Text Completion with OpenAI API - -Anytime a user asks a question, we need to create an embedding for their question, perform a similarity search, and then send a text completion request to the OpenAI API with the query and then context content merged together into a prompt. - -All of this is glued together in a [Vercel Edge Function](https://vercel.com/docs/concepts/functions/edge-functions), the code for which can be found on [GitHub](https://github.com/supabase-community/nextjs-openai-doc-search/blob/main/pages/api/vector-search.ts). - - - - - - - In order to perform similarity search we need to turn the question into an embedding. - - - - - - ```ts - const embeddingResponse = await fetch('https://api.openai.com/v1/embeddings', { - method: 'POST', - headers: { - Authorization: `Bearer ${openAiKey}`, - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - model: 'text-embedding-ada-002', - input: sanitizedQuery.replaceAll('\n', ' '), - }), - }) - - if (embeddingResponse.status !== 200) { - throw new ApplicationError('Failed to create embedding for question', embeddingResponse) - } - - const { - data: [{ embedding }], - } = await embeddingResponse.json() - ``` - - - - - - - - - Using the `embeddingResponse` we can now perform similarity search by performing an remote procedure call (RPC) to the database function we created earlier. - - - - - - ```ts - const { error: matchError, data: pageSections } = await supabaseClient.rpc( - 'match_page_sections', - { - embedding, - match_threshold: 0.78, - match_count: 10, - min_content_length: 50, - } - ) - ``` - - - - - - - - - With the relevant content for the user's question identified, we can now build the prompt and make a text completion request via the OpenAI API. - - If successful, the OpenAI API will respond with a `text/event-stream` response that we can simply forward to the client where we'll process the event stream to smoothly print the answer to the user. - - - - - - ```ts - const prompt = codeBlock` - ${oneLine` - You are a very enthusiastic Supabase representative who loves - to help people! Given the following sections from the Supabase - documentation, answer the question using only that information, - outputted in markdown format. If you are unsure and the answer - is not explicitly written in the documentation, say - "Sorry, I don't know how to help with that." - `} - - Context sections: - ${contextText} - - Question: """ - ${sanitizedQuery} - """ - - Answer as markdown (including related code snippets if available): - ` - - const completionOptions: CreateCompletionRequest = { - model: 'text-davinci-003', - prompt, - max_tokens: 512, - temperature: 0, - stream: true, - } - - const response = await fetch('https://api.openai.com/v1/completions', { - method: 'POST', - headers: { - Authorization: `Bearer ${openAiKey}`, - 'Content-Type': 'application/json', - }, - body: JSON.stringify(completionOptions), - }) - - if (!response.ok) { - const error = await response.json() - throw new ApplicationError('Failed to generate completion', error) - } - - // Proxy the streamed SSE response from OpenAI - return new Response(response.body, { - headers: { - 'Content-Type': 'text/event-stream', - }, - }) - ``` - - - - - - - -## Display the answer on the frontend - -In a last step, we need to process the event stream from the OpenAI API and print the answer to the user. The full code for this can be found on [GitHub](https://github.com/supabase-community/nextjs-openai-doc-search/blob/main/components/SearchDialog.tsx). - -```ts -const handleConfirm = React.useCallback( - async (query: string) => { - setAnswer(undefined) - setQuestion(query) - setSearch('') - dispatchPromptData({ index: promptIndex, answer: undefined, query }) - setHasError(false) - setIsLoading(true) - - const eventSource = new SSE(`api/vector-search`, { - headers: { - apikey: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ?? '', - Authorization: `Bearer ${process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY}`, - 'Content-Type': 'application/json', - }, - payload: JSON.stringify({ query }), - }) - - function handleError(err: T) { - setIsLoading(false) - setHasError(true) - console.error(err) - } - - eventSource.addEventListener('error', handleError) - eventSource.addEventListener('message', (e: any) => { - try { - setIsLoading(false) - - if (e.data === '[DONE]') { - setPromptIndex((x) => { - return x + 1 - }) - return - } - - const completionResponse: CreateCompletionResponse = JSON.parse(e.data) - const text = completionResponse.choices[0].text - - setAnswer((answer) => { - const currentAnswer = answer ?? '' - - dispatchPromptData({ - index: promptIndex, - answer: currentAnswer + text, - }) - - return (answer ?? '') + text - }) - } catch (err) { - handleError(err) - } - }) - - eventSource.stream() - - eventSourceRef.current = eventSource - - setIsLoading(true) - }, - [promptIndex, promptData] -) -``` - -## Learn More - -Want to learn more about the awesome tech that is powering this? - -- Read about how we built [ChatGPT for the Supabase Docs](https://supabase.com/blog/chatgpt-supabase-docs). -- Read the pgvector Docs for [Embeddings and vector similarity](https://supabase.com/docs/guides/database/extensions/pgvector) -- Watch Greg's video for a full breakdown: - -
    - -
    - -export const Page = ({ children }) => -export default Page diff --git a/apps/docs/pages/guides/ai/examples/openai.mdx b/apps/docs/pages/guides/ai/examples/openai.mdx deleted file mode 100644 index d2462d371c995..0000000000000 --- a/apps/docs/pages/guides/ai/examples/openai.mdx +++ /dev/null @@ -1,119 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'examples-openai', - title: 'Generating OpenAI GPT3 completions', - description: 'Generate GPT text completions using OpenAI and Supabase Edge Functions.', - subtitle: 'Generate GPT text completions using OpenAI and Supabase Edge Functions.', - video: 'https://www.youtube-nocookie.com/v/29p8kIqyU_Y', - tocVideo: '29p8kIqyU_Y', -} - -OpenAI provides a [completions API](https://platform.openai.com/docs/api-reference/completions) that allows you to use their generative GPT models in your own applications. - -OpenAI's API is intended to be used from the server-side. Supabase offers Edge Functions to make it easy to interact with third party APIs like OpenAI. - -## Setup Supabase project - -If you haven't already, [install the Supabase CLI](/docs/guides/cli) and initialize your project: - -```shell -supabase init -``` - -## Create edge function - -Scaffold a new edge function called `openai` by running: - -```shell -supabase functions new openai -``` - -A new edge function will now exist under `./supabase/functions/openai/index.ts`. - -We'll design the function to take your user's query (via POST request) and forward it to OpenAI's API. - -```ts index.ts -import 'xhr_polyfill' -import { serve } from 'std/server' -import { CreateCompletionRequest } from 'openai' - -serve(async (req) => { - const { query } = await req.json() - - const completionConfig: CreateCompletionRequest = { - model: 'text-davinci-003', - prompt: query, - max_tokens: 256, - temperature: 0, - stream: false, - } - - return fetch('https://api.openai.com/v1/completions', { - method: 'POST', - headers: { - Authorization: `Bearer ${Deno.env.get('OPENAI_API_KEY')}`, - 'Content-Type': 'application/json', - }, - body: JSON.stringify(completionConfig), - }) -}) -``` - -Note that we are setting `stream` to `false` which will wait until the entire response is complete before returning. If you wish to stream GPT's response word-by-word back to your client, set `stream` to `true`. - -## Create OpenAI key - -You may have noticed we were passing `OPENAI_API_KEY` in the Authorization header to OpenAI. To generate this key, go to https://platform.openai.com/account/api-keys and create a new secret key. - -After getting the key, copy it into a new file called `.env.local` in your `./supabase` folder: - -``` -OPENAI_API_KEY=your-key-here -``` - -## Run locally - -Serve the edge function locally by running: - -```bash -supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt -``` - -Notice how we are passing in the `.env.local` file. - -Use cURL or Postman to make a POST request to http://localhost:54321/functions/v1/openai. - -```bash -curl -i --location --request POST http://localhost:54321/functions/v1/openai \ - --header 'Content-Type: application/json' \ - --data '{"query":"What is Supabase?"}' -``` - -You should see a GPT response come back from OpenAI! - -## Deploy - -Deploy your function to the cloud by runnning: - -```bash -supabase functions deploy --no-verify-jwt openai -supabase secrets set --env-file ./supabase/.env.local -``` - -## Go deeper - -If you're interesting in learning how to use this to build your own ChatGPT, read [the blog post](/blog/chatgpt-supabase-docs) and check out the video: - -
    - -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/going-to-prod.mdx b/apps/docs/pages/guides/ai/going-to-prod.mdx deleted file mode 100644 index 443e559d19a37..0000000000000 --- a/apps/docs/pages/guides/ai/going-to-prod.mdx +++ /dev/null @@ -1,100 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-going-to-prod', - title: 'Going to Production', - description: 'Checklist for going to production with your AI application.', - subtitle: 'Going to production checklist for AI applications.', - sidebar_label: 'Going to Production', -} - -This guide will help you to prepare your application for production. We'll provide actionable steps to help you scale your application, ensure that it is reliable, can handle the load, and provide optimal precision for your use case. - -See our [Engineering for Scale](/docs/guides/ai/engineering-for-scale) guide for more information about engineering at scale. - -## Do you need indexes? - -Sequential scans will result in significantly higher latencies and lower throughput, guaranteeing 100% precision and not being RAM bound. - -There are a couple of cases where you might not need indexes: - -- You have a small dataset and don't need to scale it. -- You are not expecting high amounts of vector search queries per second. -- You need to guarantee 100% precision. - -You don't have to create indexes in these cases and can use sequential scans instead. This type of workload will not be RAM bound and will not require any additional resources but will result in higher latencies and lower throughput. Extra CPU cores may help to improve queries per second, but it will not help to improve latency. - -On the other hand, if you need to scale your application, you will need to create indexes. This will result in lower latencies and higher throughput, but will require additional RAM to make use of Postgres Caching. Also, using indexes will result in lower precision, since you are replacing exact (KNN) search with approximate (ANN) search. - -## Understanding `probes` and `lists` - -Indexes used for approximate vector similarity search in pgvector divides a dataset into partitions. The number of these partitions is defined by the `lists` constant. The `probes` controls how many lists are going to be searched during a query. - -The values of lists and probes directly affect precision and requests per second (RPS). - -- Higher `lists` means an index will be built slower, but you can achieve better RPS and precision. -- Higher `probes` means that select queries will be slower, but you can achieve better precision. -- `lists` and `probes` are not independent. Higher `lists` means that you will have to use higher `probes` to achieve the same precision. - -You can find more examples of how `lists` and `probes` constants affect precision and RPS in [pgvector 0.4.0 performance](https://supabase.com/blog/pgvector-performance) blogpost. - -
    - multi database - multi database -
    - -## Performance Tips when using indexes - -First, a few generic tips which you can pick and choose from: - -1. The Supabase managed platform will automatically optimize Postgres configs for you based on your compute addon. But if you self-host, consider **adjusting your Postgres config** based on RAM & CPU cores. See [example optimizations](https://gist.github.com/egor-romanov/323e2847851bbd758081511785573c08) for more details. -2. Prefer `inner-product` to `L2` or `Cosine` distances if your vectors are normalized (like `text-embedding-ada-002`). If embeddings are not normalized, `Cosine` distance should give the best results with an index. -3. **Pre-warm your database.** Implement the warm-up technique before transitioning to production or running benchmarks. - - Execute 10,000 to 50,000 "warm-up" queries before each benchmark, matching the number of `probes` you are going to use in production. Additionally, you can execute about 1,000 queries with probes ranging from three to ten times the prod's probes. Both of these help to increase RAM utilization. -4. **Establish your workload.** Increasing the lists constant for the pgvector index can accelerate your queries (at the expense of a slower build). For instance, for benchmarks with 1,000,000 embeddings, we employed a `lists` constant of 2000 (`number of vectors / 500`) as opposed to the suggested 1000 (`number of vectors / 1000`). -5. **Benchmark your own specific workloads.** Doing this during cache warm-up helps gauge the best value for the `probes` constant, balancing precision with requests per second (RPS). - -## Going into production - -1. Decide if you are going to use indexes or not. You can skip the rest of this guide if you do not use indexes. -2. Over-provision RAM during preparation. You can scale down in step `5`, but it's better to start with a larger size to get the best results for RAM requirements. (We'd recommend at least 8XL if you're using Supabase.) -3. Upload your data to the database. If you use the [`vecs`](/docs/guides/ai/python/api) library, it will automatically generate an index with default parameters. -4. Run a benchmark using randomly generated queries and observe the results. Again, you can use the `vecs` library with the `ann-benchmarks` tool. Do it with probes set to 10 (default) and then with probes set to 100 or more, so RPS will be lower than 10. -5. Monitor the RAM usage, and save it as a note for yourself. You would likely want to use a compute add-on in the future that has the same amount of RAM that was used at the moment (both actual RAM usage and RAM used for cache and buffers). -6. Scale down your compute add-on to the one that would have the same amount of RAM used at the moment. -7. Repeat step 3 to load the data into RAM. You should see RPS increase on subsequent runs, and stop when it no longer increases. Then repeat the benchmark with probes set to a higher value if you haven't already performed it for that compute add-on size. -8. Run a benchmark using real queries and observe the results. You can use the `vecs` library for that as well with `ann-benchmarks` tool. Set probes to 10 (default) and then gradually increase/decrease probes until you see that both precision and RPS match your requirements. -9. If you want higher RPS and you don't expect to have frequent inserts and reindexing, you can increase `lists` constantly. You have to rebuild the index with a higher lists value and repeat steps 6-7 to find the best combination of `lists` and `probes` constants to achieve the best RPS and precision values. Higher `lists` mean that index will build slower, but you can achieve better RPS and precision. Higher probes mean that select queries will be slower, but you can achieve better precision. - -## Useful links - -Don't forget to check out the general [Production Checklist](/docs/guides/platform/going-into-prod) to ensure your project is secure, performant, and will remain available for your users. - -You can look at our [Choosing Compute Add-on](/docs/guides/ai/choosing-compute-addon) guide to get a basic understanding of how much compute you might need for your workload. - -Or take a look at our [pgvector 0.4.0 performance](https://supabase.com/blog/pgvector-performance) blog post to see what pgvector is capable of and how the above technique can be used to achieve the best results. - -
    - multi database - multi database -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/google-colab.mdx b/apps/docs/pages/guides/ai/google-colab.mdx deleted file mode 100644 index d6edee7ba261b..0000000000000 --- a/apps/docs/pages/guides/ai/google-colab.mdx +++ /dev/null @@ -1,119 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-google-colab', - title: 'Google Colab', - description: 'Use Google Colab to manage your Supabase Vector store.', - subtitle: 'Use Google Colab to manage your Supabase Vector store.', - sidebar_label: 'Google Colab', -} - - - - - -Google Colab is a hosted Jupyter Notebook service. It provides free access to computing resources, including GPUs and TPUs, and is well-suited to machine learning, data science, and education. We can use Colab to manage collections using [Supabase Vecs](/docs/guides/ai/vecs-python-client). - -In this tutorial we'll connect to a database running on the Supabase [platform](https://supabase.com/dashboard/). If you don't already have a database, you can create one here: [database.new](https://database.new). - -## Create a new notebook - -Start by visiting [colab.research.google.com](https://colab.research.google.com/). There you can create a new notebook. - -![Google Colab new notebook](/docs/img/ai/google-colab/colab-new.png) - -## Install Vecs - -We'll use the Supabase Vector client, [Vecs](/docs/guides/ai/vecs-python-client), to manage our collections. - -At the top of the notebook add the notebook paste the following code and hit the "execute" button (`ctrl+enter`): - -```py -pip install vecs -``` - -![Install vecs](/docs/img/ai/google-colab/install-vecs.png) - -## Connect to your database - -Find the Postgres connection string for your Supabase project in the [database settings](https://supabase.com/dashboard/_/settings/database) of the dashboard. Copy the "URI" format, which should look something like `postgresql:/postgres:@:5432/postgres` - -Create a new code block below the install block (`ctrl+m b`) and add the following code using the Postgres URI you copied above: - -```py -import vecs - -DB_CONNECTION = "postgresql://postgres:@:5432/postgres" - -# create vector store client -vx = vecs.create_client(DB_CONNECTION) -``` - -Execute the code block (`ctrl+enter`). If no errors were returned then your connection was successful. - -## Create a collection - -Now we're going to create a new collection and insert some documents. - -Create a new code block below the install block (`ctrl+m b`). Add the following code to the code block and execute it (`ctrl+enter`): - -```py -collection = vx.create_collection(name="colab_collection", dimension=3) - -collection.upsert( - vectors=[ - ( - "vec0", # the vector's identifier - [0.1, 0.2, 0.3], # the vector. list or np.array - {"year": 1973} # associated metadata - ), - ( - "vec1", - [0.7, 0.8, 0.9], - {"year": 2012} - ) - ] -) -``` - -This will create a table inside your database within the `vecs` schema, called `colab_collection`. You can view the inserted items in the [Table Editor](https://supabase.com/dashboard/project/_/editor/), by selecting the `vecs` schema from the schema dropdown. - -![Colab documents](/docs/img/ai/google-colab/colab-documents.png) - -## Query your documents - -Now we can search for documents based on their similarity. Create a new code block and execute the following code: - -```py -collection.query( - query_vector=[0.4,0.5,0.6], # required - limit=5, # number of records to return - filters={}, # metadata filters - measure="cosine_distance", # distance measure to use - include_value=False, # should distance measure values be returned? - include_metadata=False, # should record metadata be returned? -) -``` - -You will see that this returns two documents in an array `['vec1', 'vec0']`: - -![Colab results](/docs/img/ai/google-colab/colab-results.png) - -It also returns a warning: - -``` -Query does not have a covering index for cosine_distance. -``` - -You can lean more about creating indexes in the [Vecs documentation](https://supabase.github.io/vecs/api/#create-an-index). - -## Resources - -- Vecs API: [supabase.github.io/vecs/api](https://supabase.github.io/vecs/api) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/hugging-face.mdx b/apps/docs/pages/guides/ai/hugging-face.mdx deleted file mode 100644 index 9bf295d42d5bf..0000000000000 --- a/apps/docs/pages/guides/ai/hugging-face.mdx +++ /dev/null @@ -1,176 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-hugging-face', - title: 'Hugging Face Inference API', - description: 'Learn how to integrate hugging face models with Supabase', - sidebar_label: 'Hugging Face', -} - -[Hugging Face](https://huggingface.co) is an open source hub for AI/ML models and tools. With over 100,000 machine learning models available, Hugging Face provides a great way to integrate specialized AI & ML tasks into your application. - -There are 3 ways to use Hugging Face models in your application: - -1. Use the [Transformers](https://huggingface.co/docs/transformers/index) Python library to perform inference in a Python backend. -1. [Generate embeddings](/docs/guides/ai/quickstarts/generate-text-embeddings) directly in Edge Functions using Transformers.js. -1. Use Hugging Face's hosted [Inference API](https://huggingface.co/inference-api) to execute AI tasks remotely on Hugging Face servers. This guide will walk you through this approach. - -## AI Tasks - -Below are some of the types of tasks you can perform with Hugging Face: - -### Natural language - -- [Summarization](https://huggingface.co/tasks/summarization) -- [Text classification](https://huggingface.co/tasks/text-classification) -- [Text generation](https://huggingface.co/tasks/text-generation) -- [Translation](https://huggingface.co/tasks/translation) -- [Fill in the blank](https://huggingface.co/tasks/fill-mask) - -### Computer Vision - -- [Image to text](https://huggingface.co/tasks/image-to-text) -- [Text to image](https://huggingface.co/tasks/text-to-image) -- [Image classification](https://huggingface.co/tasks/image-classification) -- [Video classification](https://huggingface.co/tasks/video-classification) -- [Object detection](https://huggingface.co/tasks/object-detection) -- [Image segmentation](https://huggingface.co/tasks/image-segmentation) - -### Audio - -- [Text to speech](https://huggingface.co/tasks/text-to-speech) -- [Speech to text](https://huggingface.co/tasks/automatic-speech-recognition) -- [Audio classification](https://huggingface.co/tasks/audio-classification) - -See a [full list of tasks](https://huggingface.co/tasks). - -## Access token - -First generate a Hugging Face access token for your app: - -https://huggingface.co/settings/tokens - -Name your token based on the app its being used for and the environment. For example, if you are building an image generation app you might create 2 tokens: - -- "My Image Generator (Dev)" -- "My Image Generator (Prod)" - -Since we will be using this token for the inference API, choose the `read` role. - - - -Though it is possible to use the Hugging Face inference API today without an access token, [you may be rate limited](https://huggingface.co/docs/huggingface.js/inference/README#usage). - -To ensure you don't experience any unexpected downtime or errors, we recommend creating an access token. - - - -## Edge Functions - -Edge Functions are server-side TypeScript functions that run on-demand. Since Edge Functions run on a server, you can safely give them access to your Hugging Face access token. - - - -You will need the `supabase` CLI [installed](/docs/guides/cli) for the following commands to work. - - - -To create a new Edge Function, navigate to your local project and initialize Supabase if you haven't already: - -```shell -supabase init -``` - -Then create an Edge Function: - -```shell -supabase functions new text-to-image -``` - -Create a file called `.env.local` to store your Hugging Face access token: - -```shell -HUGGING_FACE_ACCESS_TOKEN= -``` - -Let's modify the Edge Function to import Hugging Face's inference client and perform a `text-to-image` request: - -```ts -import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' -import { HfInference } from 'https://esm.sh/@huggingface/inference@2.3.2' - -const hf = new HfInference(Deno.env.get('HUGGING_FACE_ACCESS_TOKEN')) - -serve(async (req) => { - const { prompt } = await req.json() - - const image = await hf.textToImage( - { - inputs: prompt, - model: 'stabilityai/stable-diffusion-2', - }, - { - use_cache: false, - } - ) - - return new Response(image) -}) -``` - -1. This function creates a new instance of `HfInference` using the `HUGGING_FACE_ACCESS_TOKEN` environment variable. - -1. It expects a POST request that includes a JSON request body. The JSON body should include a parameter called `prompt` that represents the text-to-image prompt that we will pass to Hugging Face's inference API. - -1. Next we call `textToImage()`, passing in the user's prompt along with the model that we would like to use for the image generation. Today Hugging Face recommends `stabilityai/stable-diffusion-2`, but you can change this to any other text-to-image model. You can see a list of which models are supported for each task by navigating to their [models page](https://huggingface.co/models?pipeline_tag=text-to-image) and filtering by task. - -1. We set `use_cache` to `false` so that repeat queries with the same prompt will produce new images. If the task and model you are using is deterministic (will always produce the same result based on the same input), consider setting `use_cache` to `true` for faster responses. - -1. The `image` result returned from the API will be a `Blob`. We can pass the `Blob` directly into a `new Response()` which will automatically set the content type and body of the response from the `image`. - -Finally let's serve the Edge Function locally to test it: - -```shell -supabase functions serve --env-file .env.local --no-verify-jwt -``` - -Remember to pass in the `.env.local` file using the `--env-file` parameter so that the Edge Function can access the `HUGGING_FACE_ACCESS_TOKEN`. - - - -For demo purposes we set `--no-verify-jwt` to make it easy to test the Edge Function without passing in a JWT token. In a real application you will need to pass the JWT as a `Bearer` token in the `Authorization` header. - - - -At this point, you can make an API request to your Edge Function using your preferred frontend framework (Next.js, React, Expo, etc). We can also test from the terminal using `curl`: - -```shell -curl --output result.jpg --location --request POST 'http://localhost:54321/functions/v1/text-to-image' \ - --header 'Content-Type: application/json' \ - --data '{"query":"Llama wearing sunglasses"}' -``` - -In this example, your generated image will save to `result.jpg`: - -Llama wearing sunglasses example - -## Next steps - -You can now create an Edge Function that invokes a Hugging Face task using your model of choice. - -Try running some other [AI tasks](#ai-tasks). - -## Resources - -- Official [Hugging Face site](https://huggingface.co/). -- Official [Hugging Face JS docs](https://huggingface.co/docs/huggingface.js). -- [Generate image captions](/docs/guides/ai/examples/huggingface-image-captioning) using Hugging Face. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/integrations/llamaindex.mdx b/apps/docs/pages/guides/ai/integrations/llamaindex.mdx deleted file mode 100644 index b1aa7f80b2a0f..0000000000000 --- a/apps/docs/pages/guides/ai/integrations/llamaindex.mdx +++ /dev/null @@ -1,66 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-integration-llamaindex', - title: - 'Learn how to integrate Supabase with LlamaIndex, a data framework for your LLM applications.', - subtitle: - 'Learn how to integrate Supabase with LlamaIndex, a data framework for your LLM applications.', - breadcrumb: 'AI Integrations', -} - -This guide will walk you through a basic example using the LlamaIndex [SupabaseVectorStore](https://github.com/supabase/supabase/blob/master/examples/ai/llamaindex/llamaindex.ipynb). - - - -## Launching a notebook - -Launch our [LlamaIndex](https://github.com/supabase/supabase/blob/master/examples/ai/llamaindex/llamaindex.ipynb) notebook in Colab: - - - - - -At the top of the notebook, you'll see a button `Copy to Drive`. Click this button to copy the notebook to your Google Drive. - -## Fill in your OpenAI credentials - -Inside the Notebook, add your `OPENAI_API_KEY` key. Find the cell which contains this code: - -```py -import os -os.environ['OPENAI_API_KEY'] = "[your_openai_api_key]" -``` - -## Connecting to your database - -Inside the Notebook, find the cell which specifies the `DB_CONNECTION`. It will contain some code like this: - -```python -DB_CONNECTION = "postgresql://:@:/" - -# create vector store client -vx = vecs.create_client(DB_CONNECTION) -``` - -Replace the `DB_CONNECTION` with your own connection string for your database, which you set up in first step of this guide. - -## Stepping through the notebook - -Now all that's left is to step through the notebook. You can do this by clicking the "execute" button (`ctrl+enter`) at the top left of each code cell. The notebook guides you through the process of creating a collection, adding data to it, and querying it. - -You can view the inserted items in the [Table Editor](https://supabase.com/dashboard/project/_/editor/), by selecting the `vecs` schema from the schema dropdown. - -![Colab documents](/docs/img/ai/google-colab/colab-documents.png) - -## Resources - -- Visit the LlamaIndex + SupabaseVectorStore [docs](https://gpt-index.readthedocs.io/en/latest/examples/vector_stores/SupabaseVectorIndexDemo.html) -- Visit the official LlamaIndex [repo](https://github.com/jerryjliu/llama_index/) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/langchain.mdx b/apps/docs/pages/guides/ai/langchain.mdx deleted file mode 100644 index fa8320819a2db..0000000000000 --- a/apps/docs/pages/guides/ai/langchain.mdx +++ /dev/null @@ -1,235 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { Tabs } from 'ui' -export const TabPanel = Tabs.Panel - -export const meta = { - id: 'ai-lang-chain', - title: 'LangChain', - description: - 'Learn how to integrate Supabase with LangChain, a popular framework for composing AI, Vectors, and embeddings', - sidebar_label: 'LangChain', -} - -[LangChain](langchain.com) is a popular framework for working with AI, Vectors, and embeddings. LangChain supports using Supabase as a [vector store](https://js.langchain.com/docs/modules/indexes/vector_stores/integrations/supabase), using the `pgvector` extension. - -## Initializing your database - -Prepare you database with the relevant tables: - - - - -1. Go to the [SQL Editor](https://supabase.com/dashboard/project/_/sql) page in the Dashboard. -2. Click **LangChain** in the Quick start section. -3. Click **Run**. - - - - -```sql --- Enable the pgvector extension to work with embedding vectors -create extension vector; - --- Create a table to store your documents -create table documents ( - id bigserial primary key, - content text, -- corresponds to Document.pageContent - metadata jsonb, -- corresponds to Document.metadata - embedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed -); - --- Create a function to search for documents -create function match_documents ( - query_embedding vector(1536), - match_count int default null, - filter jsonb DEFAULT '{}' -) returns table ( - id bigint, - content text, - metadata jsonb, - similarity float -) -language plpgsql -as $$ -#variable_conflict use_column -begin - return query - select - id, - content, - metadata, - 1 - (documents.embedding <=> query_embedding) as similarity - from documents - where metadata @> filter - order by documents.embedding <=> query_embedding - limit match_count; -end; -$$; -``` - - - - -## Usage - -You can now search your documents using any Node.js application. This is intended to be run on a secure server route. - -```js -import { SupabaseVectorStore } from 'langchain/vectorstores/supabase' -import { OpenAIEmbeddings } from 'langchain/embeddings/openai' -import { createClient } from '@supabase/supabase-js' - -const supabaseKey = process.env.SUPABASE_SERVICE_ROLE_KEY -if (!supabaseKey) throw new Error(`Expected SUPABASE_SERVICE_ROLE_KEY`) - -const url = process.env.SUPABASE_URL -if (!url) throw new Error(`Expected env var SUPABASE_URL`) - -export const run = async () => { - const client = createClient(url, supabaseKey) - - const vectorStore = await SupabaseVectorStore.fromTexts( - ['Hello world', 'Bye bye', "What's this?"], - [{ id: 2 }, { id: 1 }, { id: 3 }], - new OpenAIEmbeddings(), - { - client, - tableName: 'documents', - queryName: 'match_documents', - } - ) - - const resultOne = await vectorStore.similaritySearch('Hello world', 1) - - console.log(resultOne) -} -``` - -### Simple Metadata Filtering - -Given the above `match_documents` Postgres function, you can also pass a filter parameter to only return documents with a specific metadata field value. This filter parameter is a JSON object, and the `match_documents` function will use the Postgres JSONB Containment operator `@>` to filter documents by the metadata field values you specify. See details on the [Postgres JSONB Containment operator](https://www.postgresql.org/docs/current/datatype-json.html#JSON-CONTAINMENT) for more information. - -```js -import { SupabaseVectorStore } from 'langchain/vectorstores/supabase' -import { OpenAIEmbeddings } from 'langchain/embeddings/openai' -import { createClient } from '@supabase/supabase-js' - -// First, follow set-up instructions above - -const privateKey = process.env.SUPABASE_SERVICE_ROLE_KEY -if (!privateKey) throw new Error(`Expected env var SUPABASE_SERVICE_ROLE_KEY`) - -const url = process.env.SUPABASE_URL -if (!url) throw new Error(`Expected env var SUPABASE_URL`) - -export const run = async () => { - const client = createClient(url, privateKey) - - const vectorStore = await SupabaseVectorStore.fromTexts( - ['Hello world', 'Hello world', 'Hello world'], - [{ user_id: 2 }, { user_id: 1 }, { user_id: 3 }], - new OpenAIEmbeddings(), - { - client, - tableName: 'documents', - queryName: 'match_documents', - } - ) - - const result = await vectorStore.similaritySearch('Hello world', 1, { - user_id: 3, - }) - - console.log(result) -} -``` - -### Advanced Metadata Filtering - -You can also use query builder-style filtering ([similar to how the Supabase JavaScript library works](https://supabase.com/docs/reference/javascript/using-filters)) instead of passing an object. Note that since the filter properties will be in the metadata column, you need to use arrow operators (`->` for integer or `->>` for text) as defined in [Postgrest API documentation](https://postgrest.org/en/stable/references/api/tables_views.html?highlight=operators#json-columns) and specify the data type of the property (e.g. the column should look something like `metadata->some_int_value::int`). - -```js -import { SupabaseFilterRPCCall, SupabaseVectorStore } from 'langchain/vectorstores/supabase' -import { OpenAIEmbeddings } from 'langchain/embeddings/openai' -import { createClient } from '@supabase/supabase-js' - -// First, follow set-up instructions above - -const privateKey = process.env.SUPABASE_SERVICE_ROLE_KEY -if (!privateKey) throw new Error(`Expected env var SUPABASE_SERVICE_ROLE_KEY`) - -const url = process.env.SUPABASE_URL -if (!url) throw new Error(`Expected env var SUPABASE_URL`) - -export const run = async () => { - const client = createClient(url, privateKey) - - const embeddings = new OpenAIEmbeddings() - - const store = new SupabaseVectorStore(embeddings, { - client, - tableName: 'documents', - }) - - const docs = [ - { - pageContent: - 'This is a long text, but it actually means something because vector database does not understand Lorem Ipsum. So I would need to expand upon the notion of quantum fluff, a theorectical concept where subatomic particles coalesce to form transient multidimensional spaces. Yet, this abstraction holds no real-world application or comprehensible meaning, reflecting a cosmic puzzle.', - metadata: { b: 1, c: 10, stuff: 'right' }, - }, - { - pageContent: - 'This is a long text, but it actually means something because vector database does not understand Lorem Ipsum. So I would need to proceed by discussing the echo of virtual tweets in the binary corridors of the digital universe. Each tweet, like a pixelated canary, hums in an unseen frequency, a fascinatingly perplexing phenomenon that, while conjuring vivid imagery, lacks any concrete implication or real-world relevance, portraying a paradox of multidimensional spaces in the age of cyber folklore.', - metadata: { b: 2, c: 9, stuff: 'right' }, - }, - { pageContent: 'hello', metadata: { b: 1, c: 9, stuff: 'right' } }, - { pageContent: 'hello', metadata: { b: 1, c: 9, stuff: 'wrong' } }, - { pageContent: 'hi', metadata: { b: 2, c: 8, stuff: 'right' } }, - { pageContent: 'bye', metadata: { b: 3, c: 7, stuff: 'right' } }, - { pageContent: "what's this", metadata: { b: 4, c: 6, stuff: 'right' } }, - ] - - await store.addDocuments(docs) - - const funcFilterA: SupabaseFilterRPCCall = (rpc) => - rpc - .filter('metadata->b::int', 'lt', 3) - .filter('metadata->c::int', 'gt', 7) - .textSearch('content', `'multidimensional' & 'spaces'`, { - config: 'english', - }) - - const resultA = await store.similaritySearch('quantum', 4, funcFilterA) - - const funcFilterB: SupabaseFilterRPCCall = (rpc) => - rpc - .filter('metadata->b::int', 'lt', 3) - .filter('metadata->c::int', 'gt', 7) - .filter('metadata->>stuff', 'eq', 'right') - - const resultB = await store.similaritySearch('hello', 2, funcFilterB) - - console.log(resultA, resultB) -} -``` - -## Hybrid search - -LangChain supports the concept of a hybrid search, which combines Similarity Search with Full Text Search. Read the official docs to get started: [Supabase Hybrid Search](https://js.langchain.com/docs/modules/indexes/retrievers/supabase-hybrid). - -You can install the LangChain Hybrid Search function though our [database.dev package manager](https://database.dev/langchain/hybrid_search). - -## Resources - -- Official [LangChain site](https://langchain.com/). -- Official [LangChain docs](https://js.langchain.com/docs/modules/indexes/vector_stores/integrations/supabase). -- Supabase [Hybrid Search](https://js.langchain.com/docs/modules/indexes/retrievers/supabase-hybrid). - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/managing-collections.mdx b/apps/docs/pages/guides/ai/managing-collections.mdx deleted file mode 100644 index 5ed4d45ce42d7..0000000000000 --- a/apps/docs/pages/guides/ai/managing-collections.mdx +++ /dev/null @@ -1,156 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-collections', - title: 'Managing collections', - description: 'Learn how to manage groups of vector records using the vecs Python library', - sidebar_label: 'Managing collections', -} - -A collection is a group of vector records managed by the `vecs` Python library. Records can be added to or updated in a collection. Collections can be queried at any time, but should be indexed for scalable query performance. - -Supabase provides a [Python client](/docs/guides/ai/vecs-python-client) called `vecs` for managing unstructured vector stores in Postgres. If you come from a data science background, this unstructured data approach will feel familiar. If you are more interested in a structured data approach, see [Vector columns](/docs/guides/ai/vector-columns) or read our guide on [Structured & Unstructured Embeddings](/docs/guides/ai/structured-unstructured). - -Under the hood `vecs` will manage the necessary Postgres tables and columns to store and query your collections. - -## API - -Find the full API in the [official API docs](https://supabase.github.io/vecs/api). - -### Connecting - -Before you can interact with vecs, create the client to communicate with Postgres. - -```python -import vecs - -DB_CONNECTION = "postgresql://:@:/" - -# create vector store client -vx = vecs.create_client(DB_CONNECTION) -``` - -### Create collection - -You can create a collection to store vectors specifying the collection's name and the number of dimensions in the vectors you intend to store. - -```python -docs = vx.create_collection(name="docs", dimension=3) -``` - -If another collection exists with the same name, - -### Get an existing collection - -To access a previously created collection, use `get_collection` to retrieve it by name - -```python -docs = vx.get_collection(name="docs") -``` - -### Upserting vectors - -`vecs` combines the concepts of "insert" and "update" into "upsert". Upserting records adds them to the collection if the `id` is not present, or updates the existing record if the `id` does exist. - -```python -# add records to the collection -docs.upsert( - vectors=[ - ( - "vec0", # the vector's identifier - [0.1, 0.2, 0.3], # the vector. list or np.array - {"year": 1973} # associated metadata - ), - ( - "vec1", - [0.7, 0.8, 0.9], - {"year": 2012} - ) - ] -) -``` - -### Create an index - -Collections can be queried immediately after being created. -However, for good performance, the collection should be indexed after records have been upserted. - -Indexes should be created **after** the collection has been populated with records. Building an index on an empty collection will significantly reduce recall. Once the index has been created you can still upsert new documents into the collection but you should rebuild the index if the size of the collection more than doubles. - -Only one index may exist per-collection. By default, creating an index will replace any existing index. - -To create an index: - -```python -## -# INSERT RECORDS HERE -## - -# index the collection to be queried by cosine distance -docs.create_index(measure=vecs.IndexMeasure.cosine_distance) -``` - -Available options for query `measure` are: - -- `vecs.IndexMeasure.cosine_distance` -- `vecs.IndexMeasure.l2_distance` -- `vecs.IndexMeasure.max_inner_product` - -which correspond to different methods for comparing query vectors to the vectors in the database. - -If you aren't sure which to use, stick with the default (cosine_distance) by omitting the parameter i.e.: `docs.create_index()`. - - - -The time required to create an index grows with the number of records and size of vectors. For a few thousand records expect sub-minute a response in under a minute. It may take a few minutes for larger collections. - - - -For an in-depth guide on vector indexes, see [Managing indexes](/docs/guides/ai/managing-indexes). - -### Query - -Be aware that indexes are essential for good performance. If you do not create an index, every query will return a warning that includes the `IndexMeasure` you should index. - -#### Basic - -The simplest form of search is to provide a query vector. - -```python -docs.query( - query_vector=[0.4,0.5,0.6], # required - limit=5, # number of records to return - filters={}, # metadata filters - measure="cosine_distance", # distance measure to use - include_value=False, # should distance measure values be returned? - include_metadata=False, # should record metadata be returned? -) -``` - -Which returns a list of vector record `ids`. - -#### Metadata Filtering - -The metadata that is associated with each record can also be filtered during a query. - -As an example, `{"year": {"$eq": 2005}}` filters a `year` metadata key to be equal to 2005 - -In context: - -```python -docs.query( - query_vector=[0.4,0.5,0.6], - filters={"year": {"$eq": 2012}}, # metadata filters -) -``` - -For a complete reference, see the [metadata guide](https://supabase.github.io/vecs/concepts_metadata/). - -## Resources - -- Official Vecs Documentation: https://supabase.github.io/vecs/api -- Source Code: https://github.com/supabase/vecs - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/managing-indexes.mdx b/apps/docs/pages/guides/ai/managing-indexes.mdx deleted file mode 100644 index 6269919badf40..0000000000000 --- a/apps/docs/pages/guides/ai/managing-indexes.mdx +++ /dev/null @@ -1,95 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-managing-indexes', - title: 'Managing indexes', - description: 'Understanding vector indexes', - sidebar_label: 'Managing indexes', -} - -Once your vector table starts to grow, you will likely want to add an index to speed up queries. Without indexes, you'll be performing a sequential scan which can be a resource-intensive operation when you have many records. - -## IVFFlat indexes - -Today `pgvector` indexes use an algorithm called IVFFlat. IVF stands for 'inverted file indexes'. It works by clustering your vectors in order to reduce the similarity search scope. Rather than comparing a vector to every other vector, the vector is only compared against vectors within the same cell cluster (or nearby clusters, depending on your configuration). - -### Inverted lists (cell clusters) - -When you create the index, you choose the number of inverted lists (cell clusters). Increase this number to speed up queries, but at the expense of recall. - -For example, to create an index with 100 lists on a column that uses the cosine operator: - -```sql -create index on items using ivfflat (column_name vector_cosine_ops) with (lists = 100); -``` - -For more info on the different operators, see [Distance operations](#distance-operators). - -For every query, you can set the number of probes (1 by default). The number of probes corresponds to the number of nearby cells to probe for a match. Increase this for better recall at the expense of speed. - -To set the number of probes for the duration of the session run: - -```sql -set ivfflat.probes = 10; -``` - -To set the number of probes only for the current transaction run: - -```sql -begin; -set local ivfflat.probes = 10; -select ... -commit; -``` - -If the number of probes is the same as the number of lists, exact nearest neighbor search will be performed and the planner won't use the index. - -### Approximate nearest neighbor - -One important note with IVF indexes is that nearest neighbor search is approximate, since exact search on high dimensional data can't be indexed efficiently. This means that similarity results will change (slightly) after you add an index (trading recall for speed). - -## Distance operators - -The type of index required depends on the distance operator you are using. `pgvector` includes 3 distance operators: - -| Operator | Description | [**Operator class**](https://www.postgresql.org/docs/current/sql-createopclass.html) | -| -------- | ---------------------- | ------------------------------------------------------------------------------------ | -| `<->` | Euclidean distance | `vector_l2_ops` | -| `<#>` | negative inner product | `vector_ip_ops` | -| `<=>` | cosine distance | `vector_cosine_ops` | - -Use the following SQL commands to create an index for the operator(s) used in your queries. - -### Euclidean L2 distance (`vector_l2_ops`) - -```sql -create index on items using ivfflat (column_name vector_l2_ops) with (lists = 100); -``` - -### Inner product (`vector_ip_ops`) - -```sql -create index on items using ivfflat (column_name vector_ip_ops) with (lists = 100); -``` - -### Cosine distance (`vector_cosine_ops`) - -```sql -create index on items using ivfflat (column_name vector_cosine_ops) with (lists = 100); -``` - -Currently vectors with up to 2,000 dimensions can be indexed. - -If you are using the `vecs` Python library, follow the instructions in [Managing collections](/docs/guides/ai/managing-collections#create-an-index) to create indexes. - -## When should you add indexes? - -`pgvector` recommends adding indexes only after the table has sufficient data, so that the internal IVFFlat cell clusters are based on your data's distribution. Anytime the distribution changes significantly, consider recreating indexes. - -## Resources - -Read more about indexing on `pgvector`'s [GitHub page](https://github.com/pgvector/pgvector#indexing). - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/python/[slug].tsx b/apps/docs/pages/guides/ai/python/[slug].tsx deleted file mode 100644 index fcbd53160c069..0000000000000 --- a/apps/docs/pages/guides/ai/python/[slug].tsx +++ /dev/null @@ -1,156 +0,0 @@ -import { CodeHikeConfig, remarkCodeHike } from '@code-hike/mdx' -import { GetStaticPaths, GetStaticProps } from 'next' -import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote' -import { serialize } from 'next-mdx-remote/serialize' -import { relative } from 'path' -import rehypeSlug from 'rehype-slug' -import remarkGfm from 'remark-gfm' -import codeHikeTheme from 'config/code-hike.theme.json' assert { type: 'json' } -import components from '~/components' -import Layout from '~/layouts/DefaultGuideLayout' -import { UrlTransformFunction, linkTransform } from '~/lib/mdx/plugins/rehypeLinkTransform' -import remarkMkDocsAdmonition from '~/lib/mdx/plugins/remarkAdmonition' -import { removeTitle } from '~/lib/mdx/plugins/remarkRemoveTitle' - -// We fetch these docs at build time from an external repo -const org = 'supabase' -const repo = 'vecs' -const branch = 'main' -const docsDir = 'docs' -const externalSite = 'https://supabase.github.io/vecs' - -// Each external docs page is mapped to a local page -const pageMap = [ - { - slug: 'api', - meta: { - title: 'API', - }, - remoteFile: 'api.md', - }, - { - slug: 'collections', - meta: { - title: 'Collections', - }, - remoteFile: 'concepts_collections.md', - }, - { - slug: 'indexes', - meta: { - title: 'Indexes', - }, - remoteFile: 'concepts_indexes.md', - }, - { - slug: 'metadata', - meta: { - title: 'Metadata', - }, - remoteFile: 'concepts_metadata.md', - }, -] - -interface PythonClientDocsProps { - source: MDXRemoteSerializeResult - meta: { - title: string - description?: string - } -} - -export default function PythonClientDocs({ source, meta }: PythonClientDocsProps) { - return ( - - - - ) -} - -/** - * Fetch markdown from external repo and transform links - */ -export const getStaticProps: GetStaticProps = async ({ params }) => { - const page = pageMap.find(({ slug }) => slug === params.slug) - - if (!page) { - throw new Error(`No page mapping found for slug '${params.slug}'`) - } - - const { remoteFile, meta } = page - - const response = await fetch( - `https://raw.githubusercontent.com/${org}/${repo}/${branch}/${docsDir}/${remoteFile}` - ) - - const source = await response.text() - - const urlTransform: UrlTransformFunction = (url) => { - try { - const externalSiteUrl = new URL(externalSite) - - const placeholderHostname = 'placeholder' - const { hostname, pathname, hash } = new URL(url, `http://${placeholderHostname}`) - - // Don't modify a url with a FQDN or a url that's only a hash - if (hostname !== placeholderHostname || pathname === '/') { - return url - } - - const relativePage = ( - pathname.endsWith('.md') - ? pathname.replace(/\.md$/, '') - : relative(externalSiteUrl.pathname, pathname) - ).replace(/^\//, '') - - const page = pageMap.find(({ remoteFile }) => `${relativePage}.md` === remoteFile) - - // If we have a mapping for this page, use the mapped path - if (page) { - return page.slug + hash - } - - // If we don't have this page in our docs, link to original docs - return `${externalSite}/${relativePage}${hash}` - } catch (err) { - console.error('Error transforming markdown URL', err) - return url - } - } - - const codeHikeOptions: CodeHikeConfig = { - theme: codeHikeTheme, - lineNumbers: true, - showCopyButton: true, - skipLanguages: [], - autoImport: false, - } - - const mdxSource = await serialize(source, { - scope: { - chCodeConfig: codeHikeOptions, - }, - mdxOptions: { - remarkPlugins: [ - remarkGfm, - remarkMkDocsAdmonition, - [removeTitle, meta.title], - [remarkCodeHike, codeHikeOptions], - ], - rehypePlugins: [[linkTransform, urlTransform], rehypeSlug], - }, - }) - - return { props: { source: mdxSource, meta } } -} - -export const getStaticPaths: GetStaticPaths = async () => { - return { - paths: pageMap.map(({ slug }) => ({ - params: { - slug, - }, - })), - fallback: false, - } -} diff --git a/apps/docs/pages/guides/ai/quickstarts/face-similarity.mdx b/apps/docs/pages/guides/ai/quickstarts/face-similarity.mdx deleted file mode 100644 index 160ed479b6d9f..0000000000000 --- a/apps/docs/pages/guides/ai/quickstarts/face-similarity.mdx +++ /dev/null @@ -1,62 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-vecs-python-client', - title: 'Face similarity search', - subtitle: 'Identify the celebrities who look most similar to you using Supabase Vecs.', - breadcrumb: 'AI Quickstarts', -} - -This guide will walk you through a ["Face Similarity Search"](https://github.com/supabase/supabase/blob/master/examples/ai/face_similarity.ipynb) example using Colab and Supabase Vecs. You will be able to identify the celebrities who look most similar to you (or any other person). You will: - -1. Launch a Postgres database that uses pgvector to store embeddings -1. Launch a notebook that connects to your database -1. Load the "`ashraq/tmdb-people-image`" celebrity dataset -1. Use the `face_recognition` model to create an embedding for every celebrity photo. -1. Search for similar faces inside the dataset. - - - -## Launching a notebook - -Launch our [`semantic_text_deduplication`](https://github.com/supabase/supabase/blob/master/examples/ai/face_similarity.ipynb) notebook in Colab: - - - - - -At the top of the notebook, you'll see a button `Copy to Drive`. Click this button to copy the notebook to your Google Drive. - -## Connecting to your database - -Inside the Notebook, find the cell which specifies the `DB_CONNECTION`. It will contain some code like this: - -```python -import vecs - -DB_CONNECTION = "postgresql://:@:/" - -# create vector store client -vx = vecs.create_client(DB_CONNECTION) -``` - -Replace the `DB_CONNECTION` with your own connection string for your database, which you set up in first step of this guide. - -## Stepping through the notebook - -Now all that's left is to step through the notebook. You can do this by clicking the "execute" button (`ctrl+enter`) at the top left of each code cell. The notebook guides you through the process of creating a collection, adding data to it, and querying it. - -You can view the inserted items in the [Table Editor](https://supabase.com/dashboard/project/_/editor/), by selecting the `vecs` schema from the schema dropdown. - -![Colab documents](/docs/img/ai/google-colab/colab-documents.png) - -## Next steps - -You can now start building your own applications with Vecs. Check our [examples](/docs/guides/ai#examples) for ideas. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/quickstarts/generate-text-embeddings.mdx b/apps/docs/pages/guides/ai/quickstarts/generate-text-embeddings.mdx deleted file mode 100644 index ae9e4b2b3e9b0..0000000000000 --- a/apps/docs/pages/guides/ai/quickstarts/generate-text-embeddings.mdx +++ /dev/null @@ -1,211 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-generating-embeddings', - title: 'Generate Embeddings', - subtitle: 'Generate text embeddings using Edge Functions + Transformer.js.', - breadcrumb: 'AI Quickstarts', -} - -This guide will walk you through how to generate high quality text embeddings in [Edge Functions](/docs/guides/functions) using Transformers.js. Inference is performed directly in Edge Functions using open source Hugging Face models, so no external API is required. - -## What is Transformers.js? - -[Transformers.js](https://huggingface.co/docs/transformers.js/index) is a library that allows you to perform inference using the JavaScript runtime. You can run Hugging Face embedding models through Transformers.js directly in Supabase [Edge Functions](/docs/guides/functions). - -## Build the Edge Function - -Let's build an Edge Function that will accept an input string and generate an embedding for it. Edge Functions are server-side TypeScript HTTP endpoints that run on-demand closest to your users. - - - - - - - - Make sure you have the latest version of the [Supabase CLI installed](/docs/guides/cli/getting-started). - - Initialize Supabase in the root directory of your app and start your local stack. - - - - - - ```shell - supabase init - supabase start - ``` - - - - - - - - - - Create an Edge Function that we will use to generate embeddings. We'll call this `embed` (you can name this anything you like). - - This will create a new TypeScript file called `index.ts` under `./supabase/functions/embed`. - - - - - - ```shell - supabase functions new embed - ``` - - - - - - - - - - Let's modify the Edge Function to import the Transformers.js client and configure it for the Deno runtime. - - ```ts ./supabase/functions/embed/index.ts - import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' - import { env, pipeline } from 'https://cdn.jsdelivr.net/npm/@xenova/transformers@2.5.0' - - // Configuration for Deno runtime - env.useBrowserCache = false; - env.allowLocalModels = false; - ``` - - - - - - - - - - Next let's construct the `pipe()` function we'll use to generate the embeddings. We use the Transformer.js `pipeline()` function to create this. - - - - - - ```ts ./supabase/functions/embed/index.ts - const pipe = await pipeline( - 'feature-extraction', - 'Supabase/gte-small', - ); - ``` - - - - - - Note the two arguments we pass to `pipeline()`: - - 1. The first argument specifies the type of [inference task](https://huggingface.co/docs/transformers.js/index#tasks) to perform. `feature-extraction` is used for embedding generation. - 2. The second argument specifies which Hugging Face model to use for the embedding generation. Supabase officially supports models available on the [Supabase org](https://huggingface.co/Supabase). - - - - We intentially construct the pipeline before the `serve()` function. This allows us to reuse the pre-loaded model in future warm-start requests, significantly speeding up future queries. Note that you'll only notice this speedup after deploying your function to Supabase - requests in local development will always be a cold-start. - - - - - - - - - - - - Modify our `serve()` request handler to accept an `input` string from the POST request JSON body. - - Finally let's generate the embedding by: - - 1. Calling `pipe()` to perform the embedding generation - 2. Extracting the embedding from the output as a number array - 3. Returning it as a JSON response - - - - - - ```ts ./supabase/functions/embed/index.ts - serve(async (req) => { - // Extract input string from JSON body - const { input } = await req.json(); - - // Generate the embedding from the user input - const output = await pipe(input, { - pooling: 'mean', - normalize: true, - }); - - // Extract the embedding output - const embedding = Array.from(output.data); - - // Return the embedding - return new Response( - JSON.stringify({ embedding }), - { headers: { 'Content-Type': 'application/json' } } - ); - }); - ``` - - - - - - Note the two options we pass to `pipe()`: - - - `pooling`: The first option sets `pooling` to `mean`. Pooling referes to how token-level embedding representations are compressed into a single sentence embedding that reflects the meaning of the entire sentence. Average pooling is the most common type of pooling for sentence embeddings and is the method supported by Transformers.js. - - `normalize`: The second option tells Transformers.js to normalize the embedding vector so that it can be used with distance measures like dot product. A normalized vector means its length (magnitude) is 1 - also referred to as a unit vector. A vector is normalized by dividing each element by the vector's length (magnitude), which maintains its direction but changes its length to 1. - - - - - - - - - - To test the Edge Function, first start a local functions server. - - - - - - ```shell - supabase functions serve - ``` - - - - - - Then in a new shell, create an HTTP request using cURL and pass in your input in the JSON body. - - ```shell - curl --request POST 'http://localhost:54321/functions/v1/embed' \ - --header 'Authorization: Bearer ANON_KEY' \ - --header 'Content-Type: application/json' \ - --data '{ "input": "hello world" }' - ``` - - Be sure to replace `ANON_KEY` with your project's anonymous key. You can get this key by running `supabase status`. - - - - - - - -## Next steps - -- Learn more about [embedding concepts](/docs/guides/ai/concepts) -- [Store your embeddings](/docs/guides/ai/vector-columns) in a database - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/quickstarts/hello-world.mdx b/apps/docs/pages/guides/ai/quickstarts/hello-world.mdx deleted file mode 100644 index d612ed23d86aa..0000000000000 --- a/apps/docs/pages/guides/ai/quickstarts/hello-world.mdx +++ /dev/null @@ -1,62 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-vecs-python-client', - title: 'Creating and managing collections', - subtitle: 'Connecting to your database with Colab.', - breadcrumb: 'AI Quickstarts', -} - -This guide will walk you through a basic ["Hello World"](https://github.com/supabase/supabase/blob/master/examples/ai/vector_hello_world.ipynb) example using Colab and Supabase Vecs. You'll learn how to: - -1. Launch a Postgres database that uses pgvector to store embeddings -1. Launch a notebook that connects to your database -1. Create a vector collection -1. Add data to the collection -1. Query the collection - - - -## Launching a notebook - -Launch our [`vector_hello_world`](https://github.com/supabase/supabase/blob/master/examples/ai/vector_hello_world.ipynb) notebook in Colab: - - - - - -At the top of the notebook, you'll see a button `Copy to Drive`. Click this button to copy the notebook to your Google Drive. - -## Connecting to your database - -Inside the Notebook, find the cell which specifies the `DB_CONNECTION`. It will contain some code like this: - -```python -import vecs - -DB_CONNECTION = "postgresql://:@:/" - -# create vector store client -vx = vecs.create_client(DB_CONNECTION) -``` - -Replace the `DB_CONNECTION` with your own connection string for your database, which you set up in first step of this guide. - -## Stepping through the notebook - -Now all that's left is to step through the notebook. You can do this by clicking the "execute" button (`ctrl+enter`) at the top left of each code cell. The notebook guides you through the process of creating a collection, adding data to it, and querying it. - -You can view the inserted items in the [Table Editor](https://supabase.com/dashboard/project/_/editor/), by selecting the `vecs` schema from the schema dropdown. - -![Colab documents](/docs/img/ai/google-colab/colab-documents.png) - -## Next steps - -You can now start building your own applications with Vecs. Check our [examples](/docs/guides/ai#examples) for ideas. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/quickstarts/text-deduplication.mdx b/apps/docs/pages/guides/ai/quickstarts/text-deduplication.mdx deleted file mode 100644 index d15cbbd128911..0000000000000 --- a/apps/docs/pages/guides/ai/quickstarts/text-deduplication.mdx +++ /dev/null @@ -1,65 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import HuggingFaceDeployment from '~/components/MDX/ai/quickstart_hf_deployment.mdx' - -export const meta = { - id: 'ai-vecs-python-client', - title: 'Semantic Text Deduplication', - subtitle: 'Finding duplicate movie reviews with Supabase Vecs.', - breadcrumb: 'AI Quickstarts', -} - -This guide will walk you through a ["Semantic Text Deduplication"](https://github.com/supabase/supabase/blob/master/examples/ai/semantic_text_deduplication.ipynb) example using Colab and Supabase Vecs. You'll learn how to find similar movie reviews using embeddings, and remove any that seem like duplicates. You will: - -1. Launch a Postgres database that uses pgvector to store embeddings -1. Launch a notebook that connects to your database -1. Load the IMDB dataset -1. Use the `sentence-transformers/all-MiniLM-L6-v2` model to create an embedding representing the semantic meaning of each review. -1. Search for all duplicates. - - - -## Launching a notebook - -Launch our [`semantic_text_deduplication`](https://github.com/supabase/supabase/blob/master/examples/ai/semantic_text_deduplication.ipynb) notebook in Colab: - - - - - -At the top of the notebook, you'll see a button `Copy to Drive`. Click this button to copy the notebook to your Google Drive. - -## Connecting to your database - -Inside the Notebook, find the cell which specifies the `DB_CONNECTION`. It will contain some code like this: - -```python -import vecs - -DB_CONNECTION = "postgresql://:@:/" - -# create vector store client -vx = vecs.create_client(DB_CONNECTION) -``` - -Replace the `DB_CONNECTION` with your own connection string for your database, which you set up in first step of this guide. - -## Stepping through the notebook - -Now all that's left is to step through the notebook. You can do this by clicking the "execute" button (`ctrl+enter`) at the top left of each code cell. The notebook guides you through the process of creating a collection, adding data to it, and querying it. - -You can view the inserted items in the [Table Editor](https://supabase.com/dashboard/project/_/editor/), by selecting the `vecs` schema from the schema dropdown. - -![Colab documents](/docs/img/ai/google-colab/colab-documents.png) - - - -## Next steps - -You can now start building your own applications with Vecs. Check our [examples](/docs/guides/ai#examples) for ideas. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/structured-unstructured.mdx b/apps/docs/pages/guides/ai/structured-unstructured.mdx deleted file mode 100644 index 04b35b5b4cbcb..0000000000000 --- a/apps/docs/pages/guides/ai/structured-unstructured.mdx +++ /dev/null @@ -1,114 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'structured-unstructured-embeddings', - title: 'Structured and Unstructured', - description: - 'Supabase is flexible enough to associate structured and unstructured metadata with embeddings.', - subtitle: - 'Supabase is flexible enough to associate structured and unstructured metadata with embeddings.', - sidebar_label: 'Structured and unstructured embeddings', -} - -Most vector stores treat metadata associated with embeddings like NoSQL, unstructured data. Supabase is flexible enough to store unstructured and structured metadata. - -## Structured - -```sql -create table docs ( - id uuid primary key, - embedding vector(3), - content text, - url string -); - -insert into docs - (id, embedding, content, url) -values - ('79409372-7556-4ccc-ab8f-5786a6cfa4f7', array[0.1, 0.2, 0.3], 'Hello world', '/hello-world'); -``` - -Notice that we've associated two pieces of metadata, `content` and `url`, with the embedding. Those fields can be filtered, constrained, indexed, and generally operated on using the full power of SQL. Structured metadata fits naturally with a traditional Supabase application, and can be managed via database [migrations](/docs/guides/getting-started/local-development#database-migrations). - -## Unstructured - -```sql -create table docs ( - id uuid primary key, - embedding vector(3), - meta jsonb -); - -insert into docs - (id, embedding, meta) -values - ( - '79409372-7556-4ccc-ab8f-5786a6cfa4f7', - array[0.1, 0.2, 0.3], - '{"content": "Hello world", "url": "/hello-world"}' - ); -``` - -An unstructured approach does not specify the metadata fields that are expected. It stores all metadata in a flexible `json`/`jsonb` column. The tradeoff is that the querying/filtering capabilities of a schemaless data type are less flexible than when each field has a dedicated column. It also pushes the burden of metadata data integrity onto application code, which is more error prone than enforcing constraints in the database. - -The unstructured approach is recommended: - -- for ephemeral/interactive workloads e.g. data science or scientific research -- when metadata fields are user-defined or unknown -- during rapid prototyping - -Client libraries like python's [vecs](https://github.com/supabase/vecs) use this structure. For example, running: - -```py -#!/usr/bin/env python3 -import vecs - -docs = vx.create_collection(name="docs", dimension=1536) - -docs.upsert(vectors=[ - ('79409372-7556-4ccc-ab8f-5786a6cfa4f7', [100, 200, 300], { url: '/hello-world' }) -]) - -``` - -automatically creates the unstructured SQL table during the call to `create_collection`. - -Note that when working with client libraries that emit SQL DDL, like `create table ...`, you should add that SQL to your migrations when moving to production to maintain a single source of truth for your database's schema. - -## Hybrid - -The structured metadata style is recommended when the fields being tracked are known in advance. If you have a combination of known and unknown metadata fields, you can accommodate the unknown fields by adding a `json`/`jsonb` column to the table. In that situation, known fields should continue to use dedicated columns for best query performance and throughput. - -```sql -create table docs ( - id uuid primary key, - embedding vector(3), - content text, - url string, - meta jsonb -); - -insert into docs - (id, embedding, content, url, meta) -values - ( - '79409372-7556-4ccc-ab8f-5786a6cfa4f7', - array[0.1, 0.2, 0.3], - 'Hello world', - '/hello-world', - '{"key": "value"}' - ); -``` - -## Choosing the right model - -Both approaches create a table where you can store your embeddings and some metadata. You should choose the best approach for your use-case. In summary: - -- Structured metadata is best when fields are known in advance or query patterns are predictable e.g. a production Supabase application -- Unstructured metadata is best when fields are unknown/user-defined or when working with data interactively e.g. exploratory research - -Both approaches are valid, and the one you should choose depends on your use-case. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/vecs-python-client.mdx b/apps/docs/pages/guides/ai/vecs-python-client.mdx deleted file mode 100644 index bdcecb77c433a..0000000000000 --- a/apps/docs/pages/guides/ai/vecs-python-client.mdx +++ /dev/null @@ -1,91 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import StepHikeCompact from '~/components/StepHikeCompact' - -export const meta = { - id: 'ai-vecs-python-client', - title: 'Python client', - subtitle: 'Manage unstructured vector stores in PostgreSQL.', - breadcrumb: 'AI Quickstarts', -} - -Supabase provides a Python client called [`vecs`](https://github.com/supabase/vecs) for managing unstructured vector stores. This client provides a set of useful tools for creating and querying collections in PostgreSQL using the [pgvector](/docs/guides/database/extensions/pgvector) extension. - -## Quick start - -Let's see how Vecs works using a local database. Make sure you have the Supabase CLI [installed](/docs/guides/cli#installation) on your machine. - -### Initialize your project - -Start a local Postgres instance in any folder using the `init` and `start` commands. Make sure you have Docker running! - -```bash -# Initialize your project -supabase init - -# Start Postgres -supabase start -``` - -### Create a collection - -Inside a Python shell, run the following commands to create a new collection called "docs", with 3 dimensions. - -```py -import vecs - -# create vector store client -vx = vecs.create_client("postgresql://postgres:postgres@localhost:54322/postgres") - -# create a collection of vectors with 3 dimensions -docs = vx.create_collection(name="docs", dimension=3) -``` - -### Add embeddings - -Now we can insert some embeddings into our "docs" collection using the `upsert()` command: - -```py -import vecs - -# create vector store client -docs = vecs.get_collection(name="docs") - -# a collection of vectors with 3 dimensions -vectors=[ - ("vec0", [0.1, 0.2, 0.3], {"year": 1973}), - ("vec1", [0.7, 0.8, 0.9], {"year": 2012}) -] - -# insert our vectors -docs.upsert(vectors=vectors) -``` - -### Query the collection - -You can now query the collection to retrieve a relevant match: - -```py -import vecs - -docs = vecs.get_collection(name="docs") - -# query the collection filtering metadata for "year" = 2012 -docs.query( - query_vector=[0.4,0.5,0.6], # required - limit=1, # number of records to return - filters={"year": {"$eq": 2012}}, # metadata filters -) -``` - -## Deep Dive - -For a more in-depth guide on `vecs` collections, see [Managing collections](/docs/guides/ai/managing-collections). - -## Resources - -- Official Vecs Documentation: https://supabase.github.io/vecs/api -- Source Code: https://github.com/supabase/vecs - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/ai/vector-columns.mdx b/apps/docs/pages/guides/ai/vector-columns.mdx deleted file mode 100644 index b263cb9b619de..0000000000000 --- a/apps/docs/pages/guides/ai/vector-columns.mdx +++ /dev/null @@ -1,169 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'ai-vector-columns', - title: 'Vector columns', - description: 'Learn how to use vectors within your own Postgres tables', - sidebar_label: 'Vector columns', -} - -Supabase offers a number of different ways to store and query vectors within Postgres. If you prefer to use Python to store and query your vectors using collections, see [Managing collections](/docs/guides/ai/managing-collections). If you want more control over vectors within your own Postgres tables or would like to interact with them using a different language like JavaScript, keep reading. - -Vectors in Supabase are enabled via [pgvector](https://github.com/pgvector/pgvector/), a PostgreSQL extension for storing and querying vectors in Postgres. It can be used to store [embeddings](/docs/guides/ai/concepts#what-are-embeddings). - -## Usage - -### Enable the extension - - - - -1. Go to the [Database](https://supabase.com/dashboard/project/_/database/tables) page in the Dashboard. -2. Click on **Extensions** in the sidebar. -3. Search for "vector" and enable the extension. - - - - -```sql - -- Example: enable the "vector" extension. -create extension vector -with - schema extensions; - --- Example: disable the "vector" extension -drop - extension if exists vector; -``` - -Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension". -To disable an extension, call `drop extension`. - - - - -### Create a table to store vectors - -After enabling the `vector` extension, you will get access to a new data type called `vector`. The size of the vector (indicated in parenthesis) represents the number of dimensions stored in that vector. - -```sql -create table documents ( - id serial primary key, - title text not null, - body text not null, - embedding vector(384) -); -``` - -In the above SQL snippet, we create a `documents` table with a column called `embedding` (note this is just a regular Postgres column - you can name it whatever you like). We give the `embedding` column a `vector` data type with 384 dimensions. Change this to the number of dimensions produced by your embedding model. For example, if you are [generating embeddings](/docs/guides/ai/quickstarts/generate-text-embeddings) using the open source [`gte-small`](https://huggingface.co/Supabase/gte-small) model, you would set this number to 384 since that model produces 384 dimensions. - - - -In general, embeddings with fewer dimensions perform best. See our [analysis on fewer dimensions in pgvector](https://supabase.com/blog/fewer-dimensions-are-better-pgvector). - - - -### Storing a vector / embedding - -In this example we'll generate a vector using Transformers.js, then store it in the database using the Supabase JavaScript client. - -```js -import { pipeline } from '@xenova/transformers' -const generateEmbedding = await pipeline('feature-extraction', 'Supabase/gte-small') - -const title = 'First post!' -const body = 'Hello world!' - -// Generate a vector using Transformers.js -const output = await generateEmbedding(body, { - pooling: 'mean', - normalize: true, -}) - -// Extract the embedding output -const embedding = Array.from(output.data) - -// Store the vector in Postgres -const { data, error } = await supabase.from('documents').insert({ - title, - body, - embedding, -}) -``` - -This example uses the JavaScript Supabase client, but you can modify it to work with any [supported language library](/docs#client-libraries). - -### Querying a vector / embedding - -Similarity search is the most common use case for vectors. `pgvector` support 3 new operators for computing distance: - -| Operator | Description | -| -------- | ---------------------- | -| `<->` | Euclidean distance | -| `<#>` | negative inner product | -| `<=>` | cosine distance | - -Choosing the right operator depends on your needs. Dot product tends to be the fastest if your vectors are normalized. For more information on how embeddings work and how they relate to each other, see [What are Embeddings?](/docs/guides/ai/concepts#what-are-embeddings). - -Supabase client libraries like `supabase-js` connect to your Postgres instance via [PostgREST](docs/guides/getting-started/architecture#postgrest-api). PostgREST does not currently support `pgvector` similarity operators, so we'll need to wrap our query in a Postgres function and call it via the `rpc()` method: - -```sql -create or replace function match_documents ( - query_embedding vector(384), - match_threshold float, - match_count int -) -returns table ( - id bigint, - content text, - similarity float -) -language sql stable -as $$ - select - documents.id, - documents.content, - 1 - (documents.embedding <=> query_embedding) as similarity - from documents - where 1 - (documents.embedding <=> query_embedding) > match_threshold - order by similarity desc - limit match_count; -$$; -``` - -This function takes a `query_embedding` argument and compares it to all other embeddings in the `documents` table. Each comparison returns a similarity score. If the similarity is greater than the `match_threshold` argument, it is returned. The number of rows returned is limited by the `match_count` argument. - -Feel free to modify this method to fit the needs of your application. The `match_threshold` ensures that only documents that have a minimum similarity to the `query_embedding` are returned. Without this, you may end up returning documents that subjectively don't match. This value will vary for each application - you will need to perform your own testing to determine the threshold that makes sense for your app. - -To execute the function from your client library, call `rpc()` with the name of your Postgres function: - -```ts -const { data: documents } = await supabaseClient.rpc('match_documents', { - query_embedding: embedding, // Pass the embedding you want to compare - match_threshold: 0.78, // Choose an appropriate threshold for your data - match_count: 10, // Choose the number of matches -}) -``` - -In this example `embedding` would be another embedding you wish to compare against your table of pre-generated embedding documents. For example if you were building a search engine, every time the user submits their query you would first generate an embedding on the search query itself, then pass it into the above `rpc()` function to match. - - - -Be sure to use embeddings produced from the same embedding model when calculating distance. Comparing embeddings from two different models will produce no meaningful result. - - - -Vectors and embeddings can be used for much more than search. Learn more about embeddings at [What are Embeddings?](/docs/guides/ai/concepts#what-are-embeddings). - -### Indexes - -Once your vector table starts to grow, you will likely want to add an index to speed up queries. See [Managing indexes](/docs/guides/ai/managing-indexes) to learn how vector indexes work and how to create them. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api.mdx b/apps/docs/pages/guides/api.mdx deleted file mode 100644 index 5ac4bc65ba3ee..0000000000000 --- a/apps/docs/pages/guides/api.mdx +++ /dev/null @@ -1,90 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'api', - title: 'Serverless APIs', - description: 'Auto-generating and Realtime APIs.', - sidebar_label: 'Overview', - video: 'https://www.youtube.com/v/rPAJJFdtPw0', -} - -Supabase auto-generates three types of API directly from your database schema. - -- REST - connect to your database through a restful interface, directly from the browser. -- GraphQL - manipulate your database using a graph-like query language. -- Realtime - listen to database changes. - -All the APIs are auto-generated from your database and are designed to get you building as fast as possible, without writing a single line of code. - -You can use them directly from the browser (two-tier architecture), or as a complement to your own API server (three-tier architecture). - -## Features - -- **Instant and auto-generated.**
    As you update your database the changes are immediately accessible through your API. -- **Self documenting.**
    Supabase generates documentation in the Dashboard which updates as you make database changes. -- **Secure.**
    The API is configured to work with PostgreSQL's Row Level Security, provisioned behind an API gateway with key-auth enabled. -- **Fast.**
    Our benchmarks for basic reads are more than 300% faster than Firebase. The API is a very thin layer on top of Postgres, which does most of the heavy lifting. -- **Scalable.**
    The API can serve thousands of simultaneous requests, and works well for Serverless workloads. - -## REST API [#rest-api-overview] - -Supabase provides a RESTful API using [PostgREST](https://postgrest.org/). This is a very thin API layer on top of Postgres. -It provides everything you need from a CRUD API at the URL `https://.supabase.co/rest/v1/`. - -The REST interface is automatically reflected from your database's schema and supports: - -- Basic CRUD operations (Create/Read/Update/Delete) -- Arbitrarily deep relationships among tables/views, functions that return table types can also nest related tables/views. -- Works with Postgres Views, Materialized Views and Foreign Tables -- Works with Postgres Functions -- User defined computed columns and computed relationships -- Works with the Postgres security model - including Row Level Security, Roles, and Grants. - -The REST API resolves all requests to a single SQL statement leading to fast response times and high throughput. - -Reference: - -- [Docs](https://postgrest.org/) -- [Source Code](https://github.com/PostgREST/postgrest) - -## GraphQL API [#graphql-api-overview] - -Supabase uses [pg_graphql](https://supabase.github.io/pg_graphql/) to expose a GraphQL API endpoint at `https://.supabase.co/graphql/v1/`. -You can introspect and query the GraphQL API of an existing Supabase project within Studio [here](https://supabase.com/dashboard/project/_/api/graphiql), -or navigate there manually at `API Docs > GraphQL > GraphiQL`. - -The GraphQL interface is automatically reflected from your database's schema and supports: - -- Basic CRUD operations (Create/Read/Update/Delete) -- Support for Tables, Views, Materialized Views, and Foreign Tables -- Arbitrarily deep relationships among tables/views -- User defined computed fields -- The Postgres security model - including Row Level Security, Roles, and Grants. - -The GraphQL API resolves all requests in a single round-trip leading to fast response times and high throughput. - -Reference: - -- [Docs](https://supabase.github.io/pg_graphql/) -- [Source Code](https://github.com/supabase/pg_graphql) - -## Realtime API [#realtime-api-overview] - -Supabase provides a Realtime API using [Realtime](https://github.com/supabase/realtime). You can use this to listen to database changes over websockets. -Realtime leverages PostgreSQL's built-in logical replication. You can manage your Realtime API simply by managing Postgres publications. -Go to your project's [Replication section](https://supabase.com/dashboard/project/_/database/replication) to get started. - -## API URL and Keys - -You can find the API URL and Keys in the [Dashboard](https://supabase.com/dashboard/project/_/settings/api). - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api/api-keys.mdx b/apps/docs/pages/guides/api/api-keys.mdx deleted file mode 100644 index be0be2b277137..0000000000000 --- a/apps/docs/pages/guides/api/api-keys.mdx +++ /dev/null @@ -1,70 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'api-keys', - title: 'Understanding API Keys', - description: 'Securing your Serverless API with Postgres Row Level Security.', -} - -Supabase provides two default keys when you create a project: an `anon` key, and a `service_role` key. You can find both keys in the [API Settings](https://supabase.com/dashboard/project/_/settings/api). - -The Serverless APIs are designed to work with Postgres Row Level Security (RLS). These keys both map to Postgres roles. You can find an `anon` user and a `service_role` user in the [Roles](http://supabase.com/dashboard/project/_/database/roles) section of the dashboard. - -The keys are both long-lived JWTs. If you decode these keys, you will see that they contain the "role", an "issued date", and an "expiry date" ~10 years in the future. - -```json -{ - "role": "anon", - "iat": 1625137684, - "exp": 1940713684 -} -``` - -## The `anon` key - -The `anon` key has very few privileges. You can use it in your [RLS policies](/docs/guides/auth/row-level-security) for "anonymous" access. For example, this policy will allow access to the `profiles` table: - -```sql -create policy "Allow anonymous access" on profiles to anon for -select - using (true); -``` - -And similarity for disallowing access: - -```sql -create policy "Disallow anonymous access" on profiles to anon for -select - using (false); -``` - -If you are using [Supabase Auth](/docs/guides/auth/overview), then the `anon` role will automatically update to `authenticated` once a user is logged in: - -```sql -create policy "Allow access to authenticated users" on profiles to authenticated for -select - using (true); -``` - -## The `service_role` key - -The "service_role" is a predefined Postgres role with elevated privileges, designed to perform various administrative and service-related tasks. It can bypass Row Level Security, so it should only be used on a private server. - - - Never expose the `service_role` key in a browser or anywhere where a user can see it. - - -A common use case for the `service_role` key is running data analytics jobs on the backend. To support joins on user id, it is often useful to grant the service role read access to `auth.users` table. - -```sql -grant -select - on table auth.users to service_role; -``` - -We have [partnered with GitHub](https://github.blog/changelog/2022-03-28-supabase-is-now-a-github-secret-scanning-partner/) to scan for Supabase `service_role` keys pushed to public repositories. -If they detect any keys with service_role privileges being pushed to GitHub, they will forward the API key to us, so that we can automatically revoke the detected secrets and notify you, protecting your data against malicious actors. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api/creating-routes.mdx b/apps/docs/pages/guides/api/creating-routes.mdx deleted file mode 100644 index 170f843d7884b..0000000000000 --- a/apps/docs/pages/guides/api/creating-routes.mdx +++ /dev/null @@ -1,246 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'creating-routes', - title: 'Creating API Routes', - description: - 'API routes are automatically created when you create Postgres Tables, Views, or Functions.', -} - -API routes are automatically created when you create Postgres Tables, Views, or Functions. - -## Create a table - -Let's create our first API route by creating a table called `todos` to store tasks. -This creates a corresponding route `todos` which can accept `GET`, `POST`, `PATCH`, & `DELETE` requests. - - - - -1. Go to the [Table editor](https://supabase.com/dashboard/project/_/editor) page in the Dashboard. -1. Click **New Table** and create a table with the name `todos`. -1. Click **Save**. -1. Click **New Column** and create a column with the name `task` and type `text`. -1. Click **Save**. - - - - - - -```sql - -- Create a table called "todos" with a column to store tasks. -create table - todos ( - id bigint generated by default as identity primary key, - task text check (char_length(task) > 3) - ); -``` - - - - -## API URL and Keys - -Every Supabase project has a unique API URL. Your API is secured behind an API gateway which requires an API Key for every request. - -1. Go to the [Settings](https://supabase.com/dashboard/project/_/settings/general) page in the Dashboard. -2. Click **API** in the sidebar. -3. Find your API `URL`, `anon`, and `service_role` keys on this page. - - - -The REST API and the GraphQL API are both accessible through this URL: - -- REST: `https://.supabase.co/rest/v1` -- GraphQL: `https://.supabase.co/graphql/v1` - -Both of these routes require the `anon` key to be passed through an `apikey` header. - -## Using the API - -### REST API - -You can interact with your API directly via HTTP requests, or you can use the client libraries which we provide. - -Let's see how to make a request to the `todos` table which we created in the first step, -using the API URL (`SUPABASE_URL`) and Key (`SUPABASE_ANON_KEY`) we provided: - - - - -```javascript -// Initialize the JS client -import { createClient } from '@supabase/supabase-js' -const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY) - -// Make a request -const { data: todos, error } = await supabase.from('todos').select('*') -``` - - - - -```bash -# Append /rest/v1/ to your URL, and then use the table name as the route -curl '/rest/v1/todos' \ --H "apikey: " \ --H "Authorization: Bearer " -``` - - - - -JS Reference: [select()](/docs/reference/javascript/select), -[insert()](/docs/reference/javascript/insert), -[update()](/docs/reference/javascript/update), -[upsert()](/docs/reference/javascript/upsert), -[delete()](/docs/reference/javascript/delete), -[rpc()](/docs/reference/javascript/rpc) (call Postgres functions). - -### GraphQL API - -You can use any GraphQL client with the Supabase GraphQL API. For our GraphQL example we will use [urql](https://formidable.com/open-source/urql/docs/). - - - - -```javascript -import { createClient, useQuery } from 'urql' - -// Prepare API key and Authorization header -const headers = { - apikey: , - authorization: `Bearer ${}`, -} - -// Create GraphQL client -// See: https://formidable.com/open-source/urql/docs/basics/react-preact/#setting-up-the-client -const client = createClient({ - url: '/graphql/v1', - fetchOptions: function createFetchOptions() { - return { headers } - }, -}) - -// Prepare our GraphQL query -const TodosQuery = ` - query { - todosCollection { - edges { - node { - id - title - } - } - } - } -` - -// Query for the data (React) -const [result, reexecuteQuery] = useQuery({ - query: TodosQuery, -}) - -// Read the result -const { data, fetching, error } = result -``` - - - - -```bash -# Append /graphql/v1/ to your URL, and then use the table name as the route -curl --request POST '/graphql/v1' \ --H 'apikey: ' \ --H 'Authorization: Bearer ' \ --H 'Content-Type: application/json' \ --d '{ "query":"{ todos(first: 3) { edges { node { id } } } }" }' -``` - - - - -### Realtime API - -By default Realtime is disabled on your database. Let's turn on Realtime for the `todos` table. - - - - -1. Go to the [Database](https://supabase.com/dashboard/project/_/database/tables) page in the Dashboard. -2. Click on **Replication** in the sidebar. -3. Control which database events are sent by toggling **Insert**, **Update**, and **Delete**. -4. Control which tables broadcast changes by selecting **Source** and toggling each table. - - - - - - -```sql -alter - publication supabase_realtime add table todos; -``` - - - - -From the client, we can listen to any new data that is inserted into the `todos` table: - -```javascript -// Initialize the JS client -import { createClient } from '@supabase/supabase-js' -const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY) - -// Create a function to handle inserts -const handleInserts = (payload) => { - console.log('Change received!', payload) -} - -// Listen to inserts -const { data: todos, error } = await supabase.from('todos').on('INSERT', handleInserts).subscribe() -``` - -Use [subscribe()](/docs/reference/javascript/subscribe) to listen to database changes. -The Realtime API works through PostgreSQL's replication functionality. Postgres sends database changes to a [publication](/docs/guides/database/replication#publications) -called `supabase_realtime`, and by managing this publication you can control which data is broadcast. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api/graphql/graphiql.mdx b/apps/docs/pages/guides/api/graphql/graphiql.mdx deleted file mode 100644 index a3ce41073fdf1..0000000000000 --- a/apps/docs/pages/guides/api/graphql/graphiql.mdx +++ /dev/null @@ -1,22 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'graphiql', - title: 'GraphiQL documentation', - description: 'Some docs on graphiql.', - video: 'https://www.youtube.com/v/7CqlTU9aOR4', -} - -Every Supabase project has a GraphQL Endpoint: `https://.supabase.co/graphql/v1`. - -This endpoint is compatible with any GraphiQL implementation that can pass an `apikey` header. -Some suggested applications: - -- [paw.cloud](https://paw.cloud) -- [insomnia.rest](https://insomnia.rest) -- [postman.com/graphql](https://www.postman.com/graphql/) -- Self-hosted GraphiQL: GraphiQL can be served through a simple HTML file. See [this discussion](https://github.com/supabase/supabase/discussions/6144) for more details. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api/joins-and-nesting.mdx b/apps/docs/pages/guides/api/joins-and-nesting.mdx deleted file mode 100644 index d64486a8b25cc..0000000000000 --- a/apps/docs/pages/guides/api/joins-and-nesting.mdx +++ /dev/null @@ -1,210 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'joins-and-nested-tables', - title: 'Querying Joins and Nested tables', - description: 'The Serverless APIs automatically detect relationships between Postgres tables.', -} - -The Serverless APIs automatically detect relationships between Postgres tables. Since Postgres is a relational database, this is a very common scenario. - -## One-to-many joins - -Let's use an example database that stores `countries` and `cities`: - - - - -**Countries** - -| `id` | `name` | -| ---- | -------------- | -| 1 | United Kingdom | -| 2 | United States | - -**Cities** - -| `id` | `name` | `country_id` | -| ---- | ----------- | ------------ | -| 1 | London | 1 | -| 2 | Manchester | 1 | -| 3 | Los Angeles | 2 | -| 4 | New York | 2 | - - - - -```sql -create table countries ( - "id" serial primary key, - "name" text -); - -insert into countries - (id, name) -values - (1, 'United Kingdom'), - (2, 'United States'); - -create table cities ( - "id" serial primary key, - "name" text, - "country_id" int references "countries" -); - -insert into cities - (name, country_id) -values - ('London', 1), - ('Manchester', 1), - ('Los Angeles', 2), - ('New York', 2); -``` - - - - -The APIs will automatically detect relationships based on the foreign keys: - - - - -```js -const { data, error } = await supabase.from('countries').select(` - id, - name, - cities ( id, name ) -`) -``` - - - - -```dart -final data = await supabase.from('countries').select('id, name, cities(id, name)'); -``` - - - - -```javascript -const Query = ` - query { - countriesCollection { - edges { - node { - id - name - cities { - id, - name - } - } - } - } - } -` -``` - - - - -```bash -GET https://[REF].supabase.co/rest/v1/countries?select=id,name,cities(id,name) -``` - - - - -## Many-to-many joins - -The Serverless APIs will detect many-to-many joins. For example, if you have a database which stored teams of users (where each user could belong to many teams): - -```sql -create table users ( - "id" serial primary key, - "name" text -); - -create table teams ( - "id" serial primary key, - "team_name" text -); - -create table members ( - "user_id" int references users, - "team_id" int references teams, - primary key (user_id, team_id) -); -``` - -In these cases you don't need to explicitly define the joining table (members). If we wanted to fetch all the teams and the members in each team: - - - - -```js -const { data, error } = await supabase.from('teams').select(` - id, - team_name, - users ( id, name ) -`) -``` - - - - -```dart -final data = await supabase.from('teams').select('id, team_name, users(id, name)'); -``` - - - - -```javascript -const Query = ` - query { - teamsCollection { - edges { - node { - id - team_name - users { - id, - name - } - } - } - } - } -` -``` - - - - -```bash -GET https://[REF].supabase.co/rest/v1/teams?select=id,team_name,users(id,name) -``` - - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api/quickstart.mdx b/apps/docs/pages/guides/api/quickstart.mdx deleted file mode 100644 index 8e7baf747a533..0000000000000 --- a/apps/docs/pages/guides/api/quickstart.mdx +++ /dev/null @@ -1,234 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import StepHikeCompact from '~/components/StepHikeCompact' - -export const meta = { - title: 'Build an API route in less than 2 minutes.', - subtitle: 'Create your first API route by creating a table called `todos` to store tasks.', - breadcrumb: 'API Quickstart', -} - -Let's create our first REST route which we can query using `cURL` or the browser. - -We'll create a database table called `todos` for storing tasks. This creates a corresponding API route `/rest/v1/todos` which can accept `GET`, `POST`, `PATCH`, & `DELETE` requests. - - - - - - - [Create a new project](https://supabase.com/dashboard) in the Supabase Dashboard. - - After your project is ready, create a table in your Supabase database. You can do this with either the Table interface or the [SQL Editor](https://supabase.com/dashboard/project/_/sql). - - - - - - - - - ```sql - -- Create a table called "todos" - -- with a column to store tasks. - create table todos ( - id serial primary key, - task text - ); - ``` - - - - - - - - - - - - - - - - - - Let's turn on Row Level Security for this table and allow anonymous access. - - - - - - ```sql - -- Turn on security - alter table "todos" - enable row level security; - - -- Allow anonymous access - create policy "Allow anonymous access" - on todos - for select - to anon - using (true); - ``` - - - - - - - - - Now we can add some data to our table which we can access through our API. - - - - - - ```sql - insert into todos (task) - values - ('Create tables'), - ('Enable security'), - ('Add data'), - ('Fetch data from the API'); - ``` - - - - - - - - - Find your API URL and Keys in your Dashboard [API Settings](https://supabase.com/dashboard/project/_/settings/api). You can now query your "todos" table by appending `/rest/v1/todos` to the API URL. - - Copy this block of code, substitute `` and ``, then run it from a terminal. - - - - - ```bash Terminal - curl 'https://.supabase.co/rest/v1/todos' \ - -H "apikey: " \ - -H "Authorization: Bearer " - ``` - - - - - - - -## Bonus - -There are several options for accessing your data: - -### Browser - -You can query the route in your browser, by appending the `anon` key as a query parameter: - -`https://.supabase.co/rest/v1/users?apikey=` - -### Client libraries - -We provide a number of [Client Libraries](https://github.com/supabase/supabase#client-libraries). - - - - -```js -const { data, error } = await supabase.from('todos').select() -``` - - - - -```dart -final data = await supabase.from('todos').select('*'); -``` - - - - -```python -response = supabase.table('todos').select("*").execute() -``` - - - - -### GraphQL - -Every table can be accessed through the GraphQL API by switching `/rest/v1` with `/graphql/v1`. - - - - -```javascript -import { createClient, useQuery } from 'urql' - -const URL = '/graphql/v1' -const ANON_KEY = '' - -// Prepare API key and Authorization header -const headers = { - apikey: `${ANON_KEY}`, - authorization: `Bearer ${ANON_KEY}`, -} - -const client = createClient({ - url: URL, - fetchOptions: function createFetchOptions() { - return { headers } - }, -}) - -// Prepare our GraphQL query -const TodosQuery = ` - query { - todosCollection { - edges { - node { - id - task - } - } - } - } -` - -// Query for the data (React) -const [result, reexecuteQuery] = useQuery({ - query: TodosQuery, -}) - -// Read the result -const { data, fetching, error } = result -``` - - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api/rest/auto-generated-docs.mdx b/apps/docs/pages/guides/api/rest/auto-generated-docs.mdx deleted file mode 100644 index 329654aa88d5c..0000000000000 --- a/apps/docs/pages/guides/api/rest/auto-generated-docs.mdx +++ /dev/null @@ -1,24 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auto-docs', - title: 'Auto-generated documentation', - description: 'Supabase provides documentation that updates automatically.', -} - -Supabase generates documentation in the [Dashboard](https://supabase.com/dashboard) which updates as you make database changes. - -1. Go to the [API](https://supabase.com/dashboard/project/_/api) page in the Dashboard. -2. Select any table under **Tables and Views** in the sidebar. -3. Switch between the JavaScript and the cURL docs using the tabs. - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api/rest/client-libs.mdx b/apps/docs/pages/guides/api/rest/client-libs.mdx deleted file mode 100644 index aa967a4b9ebd3..0000000000000 --- a/apps/docs/pages/guides/api/rest/client-libs.mdx +++ /dev/null @@ -1,33 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'client-libs', - title: 'Client Libraries', - description: 'Supabase provides several client libraries for the REST and Realtime APIs.', - video: 'https://www.youtube.com/v/7CqlTU9aOR4', -} - -Supabase provides client libraries for the REST and Realtime APIs. Some libraries are officially supported, and some are contributed by the community. - -## Official Libraries - -| `Language` | `Source Code` | `Documentation` | -| --------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -| Javascript/Typescript | [supabase-js](https://github.com/supabase/supabase-js) | [Docs](https://supabase.com/docs/reference/javascript/introduction) | -| Dart/Flutter | [supabase-flutter](https://github.com/supabase/supabase-flutter/tree/main/packages/supabase_flutter) | [Docs](https://supabase.com/docs/reference/dart/introduction) | - -## Community Libraries - -| `Language` | `Source Code` | `Documentation` | -| ----------------------- | -------------------------------------------------------------------------------- | --------------------------------------------------------------- | -| C# | [supabase-csharp](https://github.com/supabase-community/supabase-csharp) | [Docs](https://supabase.com/docs/reference/csharp/introduction) | -| Go | [supabase-go](https://github.com/supabase-community/supabase-go) | | -| Kotlin | [supabase-kt](https://github.com/supabase-community/supabase-kt) | [Docs](https://supabase.com/docs/reference/kotlin/introduction) | -| Python | [supabase-py](https://github.com/supabase-community/supabase-py) | [Docs](https://supabase.com/docs/reference/python/initializing) | -| Ruby | [supabase-rb](https://github.com/supabase-community/supabase-rb) | | -| Swift | [supabase-swift](https://github.com/supabase-community/supabase-swift) | [Docs](https://supabase.com/docs/reference/swift/introduction) | -| Godot Engine (GDScript) | [supabase-gdscript](https://github.com/supabase-community/godot-engine.supabase) | | - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api/rest/generating-types.mdx b/apps/docs/pages/guides/api/rest/generating-types.mdx deleted file mode 100644 index 5baad562ba083..0000000000000 --- a/apps/docs/pages/guides/api/rest/generating-types.mdx +++ /dev/null @@ -1,123 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'generating-types', - title: 'Generating Types', - description: 'How to generate types for your API and Supabase libraries.', - video: 'https://www.youtube.com/v/7CqlTU9aOR4', -} - -Supabase APIs are generated from your database, which means that we can use database introspection to generate type-safe API definitions. - -
    - -
    - -## Generating types using Supabase CLI - -The Supabase CLI is a single binary Go application that provides everything you need to setup a local development environment. - -You can [install the CLI](https://www.npmjs.com/package/supabase) via npm or other supported package managers. The minimum required version of the CLI is [v1.8.1](https://github.com/supabase/cli/releases). - -```bash -npm i supabase@">=1.8.1" --save-dev -``` - -Login with your Personal Access Token: - -```bash -npx supabase login -``` - -Generate types for your project to produce the `types/supabase.ts` file: - -```bash -npx supabase gen types typescript --project-id "$PROJECT_REF" --schema public > types/supabase.ts -``` - -After you have generated your types, you can use them in `src/index.ts` - -```tsx -import { NextApiRequest, NextApiResponse } from 'next' -import { createClient } from '@supabase/supabase-js' -import { Database } from '../types/supabase' - -const supabase = createClient( - process.env.NEXT_PUBLIC_SUPABASE_URL, - process.env.SUPABASE_SECRET_KEY -) - -export default async (req: NextApiRequest, res: NextApiResponse) => { - const allOnlineUsers = await supabase.from('users').select('*').eq('status', 'ONLINE') - res.status(200).json(allOnlineUsers) -} -``` - -## Update types automatically with GitHub Actions - -One way to keep your type definitions in sync with your database is to set up a GitHub action that runs on a schedule. - -Add the script above to your `package.json` to run it using `npm run update-types` - -```json -"update-types": "npx supabase gen types typescript --project-id \"$PROJECT_REF\" > types/supabase.ts" -``` - -Create a file `.github/workflows/update-types.yml` with the following snippet to define the action along with the environment variables. This script will commit new type changes to your repo every night. - -```yaml -name: Update database types - -on: - schedule: - # sets the action to run daily. You can modify this to run the action more or less frequently - - cron: '0 0 * * *' - -jobs: - update: - runs-on: ubuntu-latest - env: - SUPABASE_ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} - PROJECT_REF: - steps: - - uses: actions/checkout@v2 - with: - persist-credentials: false - fetch-depth: 0 - - uses: actions/setup-node@v2.1.5 - with: - node-version: 16 - - run: npm run update-types - - name: check for file changes - id: git_status - run: | - echo "::set-output name=status::$(git status -s)" - - name: Commit files - if: ${{contains(steps.git_status.outputs.status, ' ')}} - run: | - git add types/database/index.ts - git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" - git commit -m "Update database types" -a - - name: Push changes - if: ${{contains(steps.git_status.outputs.status, ' ')}} - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - branch: ${{ github.ref }} -``` - -Alternatively, you can use a community-supported GitHub action: [generate-supabase-db-types-github-action](https://github.com/lyqht/generate-supabase-db-types-github-action). - -## Resources - -- [Generating Supabase types with GitHub Actions](https://blog.esteetey.dev/how-to-create-and-test-a-github-action-that-generates-types-from-supabase-database) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api/securing-your-api.mdx b/apps/docs/pages/guides/api/securing-your-api.mdx deleted file mode 100644 index e10524f0733e2..0000000000000 --- a/apps/docs/pages/guides/api/securing-your-api.mdx +++ /dev/null @@ -1,64 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'securing-your-api', - title: 'Securing your API', - description: 'Securing your Serverless API with Postgres Row Level Security.', -} - -The Serverless APIs are designed to work with Postgres Row Level Security (RLS). If you use [Supabase Auth](/docs/guides/auth), you can restrict data based on the logged-in user. -To control access to your data, you can use [Policies](/docs/guides/auth#policies). - -## Enabling Row Level Security - -If you create a table through the Dashboard, RLS will be enabled by default. This is not the case, however, if you create a table or view using SQL. -To enable RLS on any table: - - - - -1. Go to the [Authentication](https://supabase.com/dashboard/project/_/auth/users) page in the Dashboard. -2. Click on **Policies** in the sidebar. -3. Select **Enable RLS** to enable Row Level Security. - - - - -```sql -alter table - todos enable row level security; -``` - - - - -With RLS enabled, you can create Policies that allow or disallow users to access and update data. We provide a detailed guide for creating Row Level Security Policies in our [Authorization documentation](/docs/guides/auth/row-level-security). - -## Safeguards towards accidental deletes and updates - -By default, all projects have the [safeupdate](https://github.com/eradman/pg-safeupdate) Postgres extension enabled for API queries. -This ensures that `delete()` and `update()` requests will fail if there are no filters provided. -To confirm that safeupdate is enabled for API queries, run the following query: - -```sql -select - usename, - useconfig -from pg_shadow -where usename = 'authenticator'; -``` - -The expected value for `useconfig` should be: - -```sql -['session_preload_libraries=supautils, safeupdate'] -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/api/using-custom-schemas.mdx b/apps/docs/pages/guides/api/using-custom-schemas.mdx deleted file mode 100644 index 87d791aa5d947..0000000000000 --- a/apps/docs/pages/guides/api/using-custom-schemas.mdx +++ /dev/null @@ -1,59 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'using-custom-schemas', - title: 'Using Custom Schemas', - description: 'You need additional steps to use custom database schemas with Serverless APIs.', -} - -By default, your database has a `public` schema which is automatically exposed on Serverless APIs. You can also expose custom database schemas - to do so you need to follow these steps: - -1. Go to [API settings](https://supabase.com/dashboard/project/_/settings/api) and add your custom schema to "Exposed schemas". -2. Run the following SQL, substituting `myschema` with your schema name: - -```sql -GRANT USAGE ON SCHEMA myschema TO anon, authenticated, service_role; -GRANT ALL ON ALL TABLES IN SCHEMA myschema TO anon, authenticated, service_role; -GRANT ALL ON ALL ROUTINES IN SCHEMA myschema TO anon, authenticated, service_role; -GRANT ALL ON ALL SEQUENCES IN SCHEMA myschema TO anon, authenticated, service_role; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA myschema GRANT ALL ON TABLES TO anon, authenticated, service_role; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA myschema GRANT ALL ON ROUTINES TO anon, authenticated, service_role; -ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA myschema GRANT ALL ON SEQUENCES TO anon, authenticated, service_role; -``` - -Now you can access these schemas from Serverless APIs: - - - - -```js -// Initialize the JS client -import { createClient } from '@supabase/supabase-js' -const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, { db: { schema: 'myschema' } }) - -// Make a request -const { data: todos, error } = await supabase.from('todos').select('*') -``` - - - - -```bash -# Append /rest/v1/ to your URL, and then use the table name as the route -curl '/rest/v1/todos' \ - -H "apikey: " \ - -H "Authorization: Bearer " \ - -H "Accept-Profile: myschema" -``` - - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth.mdx b/apps/docs/pages/guides/auth.mdx deleted file mode 100644 index a7e261423f6f8..0000000000000 --- a/apps/docs/pages/guides/auth.mdx +++ /dev/null @@ -1,197 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -import { useRouter } from 'next/router' - -export const meta = { - id: 'auth', - title: 'Auth', - description: 'Use Supabase to Authenticate and Authorize your users.', - sidebar_label: 'Overview', - video: 'https://www.youtube.com/v/6ow_jW4epf8', -} - -## Overview - -There are two parts to every Auth system: - -- **Authentication:** should this person be allowed in? If yes, who are they? -- **Authorization:** once they are in, what are they allowed to do? - -Supabase Auth is designed to work either as a standalone product, or deeply integrated with the other Supabase products. -Postgres is at the heart of everything we do, and the Auth system follows this principle. We leverage Postgres' built-in Auth functionality wherever possible. - -Here's a quick, 2 minute tour of the Auth features built-in to Supabase: - -
    - -
    - -## Authentication - -You can authenticate your users in several ways: - -- Email & password. -- Magic links (one-click logins). -- Social providers. -- Phone logins. - -### Providers - -We provide a suite of Providers and login methods, as well as [Auth helpers](/docs/guides/auth/auth-helpers/). - -#### Social Auth - -
    - -
    - -#### Phone Auth - -
    - -
    - -### Configure third-party providers - -You can enable third-party providers with the click of a button by navigating to Authentication > Providers > Auth Providers and inputting your `Client ID` and `Secret` for each. - -![OAuth Logins.](/docs/img/supabase-oauth-logins.png) - -### Redirect URLs and wildcards - -When using third-party providers, the [Supabase client library](/docs/reference/javascript/auth-signinwithoauth#sign-in-using-a-third-party-provider-with-redirect) redirects the user to the provider. When the third-party provider successfully authenticates the user, the provider redirects the user to the Supabase Auth callback URL where they are further redirected to the URL specified in the `redirectTo` parameter. This parameter defaults to the [`SITE_URL`](/docs/reference/auth/config#site_url). You can modify the `SITE_URL` or add additional [redirect URLs](https://supabase.com/dashboard/project/_/auth/url-configuration). - -You can use wildcard match patterns to support preview URLs from providers like Netlify and Vercel. See the [full list of supported patterns](https://pkg.go.dev/github.com/gobwas/glob#Compile). Use [this tool](https://www.digitalocean.com/community/tools/glob?comments=true&glob=http%3A%2F%2Flocalhost%3A3000%2F%2A%2A&matches=false&tests=http%3A%2F%2Flocalhost%3A3000&tests=http%3A%2F%2Flocalhost%3A3000%2F&tests=http%3A%2F%2Flocalhost%3A3000%2F%3Ftest%3Dtest&tests=http%3A%2F%2Flocalhost%3A3000%2Ftest-test%3Ftest%3Dtest&tests=http%3A%2F%2Flocalhost%3A3000%2Ftest%2Ftest%3Ftest%3Dtest) to test your patterns. - -> ⚠️ WARNING: While the "globstar" (`**`) is useful for local development and preview URLs, we recommend setting the exact redirect URL path for your site URL in production. - -#### Netlify preview URLs - -For deployments with Netlify, set the `SITE_URL` to your official site URL. Add the following additional redirect URLs for local development and deployment previews: - -- `http://localhost:3000/**` -- `https://**--my_org.netlify.app/**` - -#### Vercel preview URLs - -For deployments with Vercel, set the `SITE_URL` to your official site URL. Add the following additional redirect URLs for local development and deployment previews: - -- `http://localhost:3000/**` -- `https://*-username.vercel.app/**` - -Vercel provides an environment variable for the URL of the deployment called `NEXT_PUBLIC_VERCEL_URL`. See the [Vercel docs](https://vercel.com/docs/concepts/projects/environment-variables#system-environment-variables) for more details. You can use this variable to dynamically redirect depending on the environment. You should also set the value of the environment variable called NEXT_PUBLIC_SITE_URL, this should be set to your site URL in production environment to ensure that redirects function correctly. - -```js -const getURL = () => { - let url = - process?.env?.NEXT_PUBLIC_SITE_URL ?? // Set this to your site URL in production env. - process?.env?.NEXT_PUBLIC_VERCEL_URL ?? // Automatically set by Vercel. - 'http://localhost:3000/' - // Make sure to include `https://` when not localhost. - url = url.includes('http') ? url : `https://${url}` - // Make sure to include a trailing `/`. - url = url.charAt(url.length - 1) === '/' ? url : `${url}/` - return url -} - -const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'github', - options: { - redirectTo: getURL(), - }, -}) -``` - -#### Mobile deep linking URIs - -For mobile applications you can use deep linking URIs. For example for your `SITE_URL` you can specify something like `com.supabase://login-callback/` and for additional redirect URLs something like `com.supabase.staging://login-callback/` if needed. - -## Authorization - -When you need granular authorization rules, nothing beats PostgreSQL's Row Level Security (RLS). - -Policies are PostgreSQL's rule engine. They are incredibly powerful and flexible, allowing you to write complex SQL rules which fit your unique business needs. - -Get started with our [Row Level Security Guides](/docs/guides/auth/row-level-security). - -### Row Level Security - -Authentication only gets you so far. When you need granular authorization rules, nothing beats PostgreSQL's [Row Level Security (RLS)](https://www.postgresql.org/docs/current/ddl-rowsecurity.html). Supabase makes it simple to turn RLS on and off. - - - -### Policies - -[Policies](https://www.postgresql.org/docs/current/sql-createpolicy.html) are PostgreSQL's rule engine. They are incredibly powerful and flexible, allowing you to write complex SQL rules which fit your unique business needs. - - - -With policies, your database becomes the rules engine. Instead of repetitively filtering your queries, like this ... - -```js -const loggedInUserId = 'd0714948' -let { data, error } = await supabase - .from('users') - .select('user_id, name') - .eq('user_id', loggedInUserId) - -// console.log(data) -// => { id: 'd0714948', name: 'Jane' } -``` - -... you can simply define a rule on your database table, `auth.uid() = user_id`, and your request will return the rows which pass the rule, even when you remove the filter from your middleware: - -```js -let { data, error } = await supabase.from('users').select('user_id, name') - -// console.log(data) -// Still => { id: 'd0714948', name: 'Jane' } -``` - -### How It Works - -1. A user signs up. Supabase creates a new user in the `auth.users` table. -2. Supabase returns a new JWT, which contains the user's `UUID`. -3. Every request to your database also sends the JWT. -4. Postgres inspects the JWT to determine the user making the request. -5. The user's UID can be used in policies to restrict access to rows. - -Supabase provides a special function in Postgres, `auth.uid()`, which extracts the user's UID from the JWT. This is especially useful when creating policies. - -## User Management - -Supabase provides multiple endpoints to authenticate and manage your users: - -- [Sign up](/docs/reference/javascript/auth-signup) -- [Sign in with password](/docs/reference/javascript/auth-signinwithpassword) -- [Sign in with passwordless / one-time password (OTP)](/docs/reference/javascript/auth-signinwithotp) -- [Sign in with OAuth](/docs/reference/javascript/auth-signinwithoauth) -- [Sign out](/docs/reference/javascript/auth-signout) - -When users sign up, Supabase assigns them a unique ID. You can reference this ID anywhere in your database. For example, you might create a `profiles` table referencing `id` in the `auth.users` table using a `user_id` field. - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-captcha.mdx b/apps/docs/pages/guides/auth/auth-captcha.mdx deleted file mode 100644 index e36e96262bc7b..0000000000000 --- a/apps/docs/pages/guides/auth/auth-captcha.mdx +++ /dev/null @@ -1,202 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-captcha', - title: 'Enable Captcha Protection', - description: 'Add Captcha Protection to your Supabase project', - video: 'https://www.youtube.com/v/em1cpOAXknM', -} - -Supabase provides you with the option of adding captcha to your sign-in, sign-up, and password reset forms. This keeps your website safe from bots and malicious scripts. Supabase authentication has support for [hCaptcha](https://www.hcaptcha.com/) and [Cloudflare Turnstile](https://www.cloudflare.com/products/turnstile/). - -
    - -
    - -## Sign up for Captcha - - - -Go to the [hCaptcha](https://www.hcaptcha.com/) website and sign up for an account. On the welcome page, copy the **Sitekey** and **Secret key**. - -If you have already signed up and didn't copy this information from the welcome page, you can get the **Secret key** from the settings page. - -![site_secret_settings.png](/docs/img/guides/auth-captcha/site_secret_settings.png) - -The **Sitekey** can be found in the **Settings** of the active site you created. - -![sites_dashboard.png](/docs/img/guides/auth-captcha/sites_dashboard.png) - -In the Settings page, look for the **Sitekey** section and copy the key. - -![sitekey_settings.png](/docs/img/guides/auth-captcha/sitekey_settings.png) - - - - - Go to the [Cloudflare website](https://dash.cloudflare.com/login) and sign up for an account. On the welcome page, head to the Turnstile section and add a new site. Create a site and take note of the **Sitekey** and **Secret Key** as shown below - ![cloudflare_settings.png](/docs/img/guides/auth-captcha/cloudflare_settings.png) - - - -## Enable Captcha protection for your Supabase project - -Navigate to the **[Auth](https://supabase.com/dashboard/project/_/settings/auth)** section of your Project Settings in the Supabase Dashboard and find the **Enable Captcha protection** toggle under the **Security and Protection** section. - -![supabase_auth_general_settings.png](/docs/img/guides/auth-captcha/supabase_auth_general_settings.png) - -Enter your Captcha **Secret key** and click **Save**. - -## Add the Captcha frontend component - -The frontend requires some changes to provide the captcha on-screen for the user. This example uses React and the corresponding Captcha React component, but both Captcha providers can be used with any JavaScript framework. - - - - - -Install `@hcaptcha/react-hcaptcha` in your project as a dependency. - -```bash -npm install @hcaptcha/react-hcaptcha -``` - -Now import the `HCaptcha` component from the `@hcaptcha/react-hcaptcha` library. - -```javascript -import HCaptcha from '@hcaptcha/react-hcaptcha' -``` - -Let's create a empty state to store our `captchaToken` - -```jsx -const [captchaToken, setCaptchaToken] = useState() -``` - -Now lets add the HCaptcha component to the JSX section of our code - -```jsx - -``` - -We will pass it the sitekey we copied from the hCaptcha website as a property along with a onVerify property which takes a callback function. This callback function will have a token as one of its properties. Let's set the token in the state using `setCaptchaToken` - -```jsx - { setCaptchaToken(token) } -/> -``` - -Now lets use the captcha token we receive in our Supabase signUp function. - -```jsx -await supabase.auth.signUp({ - email, - password, - options: { captchaToken }, -}) -``` - -We will also need to reset the captcha challenge after we have made a call to the function above. - -Create a ref to use on our HCaptcha component. - -```jsx -const captcha = useRef() -``` - -Let's add a ref attribute on the `HCaptcha` component and assign the `captcha` constant to it. - -```jsx - { - setCaptchaToken(token) - }} -/> -``` - -Reset the `captcha` after the signUp function is called using the following code: - -```jsx -captcha.current.resetCaptcha() -``` - -In order to test that this works locally we will need to use something like [ngrok](https://ngrok.com/) or add an entry to your hosts file. You can read more about this in the [hCaptcha docs](https://docs.hcaptcha.com/#local-development). - - - - - - The frontend requires some changes to provide the captcha on-screen for the user. This example uses React and the Turnstile React component, but Turnstile can be used with any JavaScript framework. - -Install @marsidev/react-turnstile in your project as a dependency. - -```bash -npm install @marsidev/react-turnstile -``` - -Now import the Turnstile component from the @marsidev/react-turnstile library. - -```jsx -import { Turnstile } from '@marsidev/react-turnstile' -``` - -Let's create an empty state to store our `captchaToken` - -```jsx -const [captchaToken, setCaptchaToken] = useState() -``` - -Now lets add the Cloudflare Turnstile component to the JSX section of our code: - -```html - -``` - -We will pass it the sitekey we copied from the Cloudflare website as a property along with a `onSuccess` property which takes a callback function. This callback function will have a token as one of its properties. Let's set the token in the state using `setCaptchaToken`: - -```jsx - { setCaptchaToken(token) } -/> -``` - -We can now use the captchaToken we receive in our Supabase `signUp` function. - -```jsx -await supabase.auth.signUp({ - email, - password, - options: { captchaToken }, -}) -``` - -To test locally, you will need to add localhost to the domain whitelist as per the [Cloudflare docs](https://developers.cloudflare.com/turnstile/reference/testing/) - - - - -Run the application and you should now be provided with a captcha challenge. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-email-templates.mdx b/apps/docs/pages/guides/auth/auth-email-templates.mdx deleted file mode 100644 index 30dccd9321ba5..0000000000000 --- a/apps/docs/pages/guides/auth/auth-email-templates.mdx +++ /dev/null @@ -1,76 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Email Templates', - description: 'Learn how to configure the email templates on Supabase.', -} - -You can customize the email messages used for the authentication flows. You can edit the following email templates: - -- Confirm signup -- Invite user -- Magic Link -- Change Email Address -- Reset Password - -## Terminology - -The templating system provides the following variables for use: - -| Name | Description | -| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `{{ .ConfirmationURL }}` | Contains the confirmation URL. For example, a signup confirmation URL would look like: `https://project-ref.supabase.co/auth/v1/verify?token={{ .TokenHash }}&type=signup&redirect_to=https://example.com/path` . | -| `{{ .Token }}` | Contains a 6-digit One-Time-Password (OTP) that can be used instead of the `{{. ConfirmationURL }}` . | -| `{{ .TokenHash }}` | Contains a hashed version of the `{{ .Token }}`. This is useful for constructing your own email link in the email template. | -| `{{ .SiteURL }}` | Contains your application's Site URL. This can be configured in your project's [authentication settings](https://supabase.com/dashboard/project/_/auth/url-configuration). | - -## Limitations - -### Email Prefetching - -Certain email providers may have spam detection or other security features that prefetch URL links from incoming emails. -In this scenario, the `{{ .ConfirmationURL }}` sent will be consumed instantly which leads to a "Token has expired or is invalid" error. -To guard against this: - -- Use an email OTP instead by including `{{ .Token }}` in the email template. -- Create your own custom email link to redirect the user to a page where they can click on a button to confirm the action. - For example, you can include the following in your email template: - - ```html - Confirm your signup - - ``` - - The user should be brought to a page on your site where they can confirm the action by clicking a button. - The button should contain the actual confirmation link which can be obtained from parsing the `confirmation_url={{ .ConfirmationURL }}` query parameter in the URL. - -### Email Tracking - -If you are using an external email provider that enables "email tracking", the links inside the Supabase email templates will be overwritten and won't perform as expected. We recommend disabling email tracking to ensure email links are not overwritten. - -### Redirecting the user to a server-side endpoint - -If you intend to use [Server-side rendering](/docs/guides/auth/server-side-rendering), you might want the email link to redirect the user to a server-side endpoint to check if they are authenticated before returning the page. However, the default email link will redirect the user after verification to the redirect URL with the session in the query fragments. Since the session is returned in the query fragments by default, you won't be able to access it on the server-side. - -You can customize the email link in the email template to redirect the user to a server-side endpoint successfully. For example: - -```html -Accept the invite - -``` -When the user clicks on the link, the request will hit `https://api.example.com/v1/authenticate` and you can grab the `token_hash` and `type` query parameters from the URL. Then, you can call the [`verifyOtp`](/docs/reference/javascript/auth-verifyotp) method to get back an authenticated session before redirecting the user back to the client. Since the `verifyOtp` method makes a `POST` request to Supabase Auth to verify the user, the session will be returned in the response body, which can be read by the server. For example: - -```js -const { token_hash, type } = Object.fromEntries(new URLSearchParams(window.location.search)) -const { data: { session }, error } = supabase.auth.verifyOtp({ token_hash, type }) - -// subsequently redirect the user back to the client -// ... - -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-email.mdx b/apps/docs/pages/guides/auth/auth-email.mdx deleted file mode 100644 index 2aa114b48a25c..0000000000000 --- a/apps/docs/pages/guides/auth/auth-email.mdx +++ /dev/null @@ -1,104 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-email', - title: 'Login With Email', - description: 'Use Supabase to Authenticate and Authorize your users using email.', -} - -## Overview - -Setting up Email logins for your Supabase application. - -- Add Email authenticator to your [Supabase Project](https://supabase.com/dashboard) -- Add the login code to your application - [JavaScript](https://github.com/supabase/supabase-js) | [Flutter](https://github.com/supabase/supabase-flutter) - -## Configure email settings - -1. For [Site URL](https://supabase.com/dashboard/project/_/auth/url-configuration), enter the final (hosted) URL of your app. -1. For [Auth Providers](https://supabase.com/dashboard/project/_/auth/providers), **enable email provider**. - - - -For self-hosting, you can update your project configuration using the files and environment variables provided. -See the [self-hosting docs](/docs/guides/hosting/overview#configuration) for details. - - - -## Add login code to your client app - - - - -When your user signs in, call [signInWithPassword()](/docs/reference/javascript/auth-signinwithpassword) with their email address and password: - -```js -async function signInWithEmail() { - const { data, error } = await supabase.auth.signInWithPassword({ - email: 'example@email.com', - password: 'example-password', - }) -} -``` - - - - -When your user signs in, call [signInWithPassword()](/docs/reference/dart/auth-signinwithpassword) with their email address and password: - -```dart -Future signInWithEmail() async { - final AuthResponse res = await supabase.auth.signInWithPassword( - email: 'example@email.com', - password: 'example-password' - ); -} -``` - - - - - - - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signOut() { - const { error } = await supabase.auth.signOut() -} -``` - - - - -When your user signs out, call [signOut()](/docs/reference/dart/auth-signout) to remove them from the browser session and any objects from localStorage: - -```dart -Future signOut() async { - await supabase.auth.signOut(); -} -``` - - - - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Supabase Flutter Client](https://github.com/supabase/supabase-flutter) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers.mdx b/apps/docs/pages/guides/auth/auth-helpers.mdx deleted file mode 100644 index 26b798b820be0..0000000000000 --- a/apps/docs/pages/guides/auth/auth-helpers.mdx +++ /dev/null @@ -1,68 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'index', - title: 'Auth Helpers Overview', - description: 'A collection of framework-specific Auth utilities for working with Supabase.', - sidebar_label: 'Overview', -} - -A collection of framework-specific Auth utilities for working with Supabase. - -
    -
    - {/* Auth UI */} -
    - -
    - {/* Flutter Auth UI */} -
    - -
    - {/* Next.js */} -
    - -
    - {/* SvelteKit */} -
    - -
    - {/* Remix */} -
    - -
    -
    -
    - -## Status - -The Auth Helpers are in `beta`. They are usable in their current state, but it's likely that there will be breaking changes. - -## Additional Links - -- [Source code](https://github.com/supabase/auth-helpers) -- [Known bugs and issues](https://github.com/supabase/auth-helpers/issues) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx b/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx deleted file mode 100644 index ed2aea88f976f..0000000000000 --- a/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx +++ /dev/null @@ -1,340 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-ui', - title: 'Auth UI', - description: 'A prebuilt, customizable React component for authenticating users.', -} - -Auth UI is a pre-built React component for authenticating users. -It supports custom themes and extensible styles to match your brand and aesthetic. - - - -## Set up Auth UI - -Install the latest version of [supabase-js](/docs/reference/javascript) and the Auth UI package: - -```bash -npm install @supabase/supabase-js @supabase/auth-ui-react @supabase/auth-ui-shared -``` - -### Import the Auth component - -Pass `supabaseClient` from `@supabase/supabase-js` as a prop to the component. - -```js /src/index.js -import { createClient } from '@supabase/supabase-js' -import { Auth } from '@supabase/auth-ui-react' - -const supabase = createClient('', '') - -const App = () => -``` - -This renders the Auth component without any styling. -We recommend using one of the predefined themes to style the UI. -Import the theme you want to use and pass it to the `appearance.theme` prop. - -```js mark=4,16 /src/index.js -import { Auth } from '@supabase/auth-ui-react' -import { - // Import predefined theme - ThemeSupa, -} from '@supabase/auth-ui-shared' - -const supabase = createClient( - '', - '' -) - -const App = () => ( - -) -``` - -### Social Providers - -The Auth component also supports login with [official social providers](../../auth#providers). - -```js mark=11 /src/index.js -import { createClient } from '@supabase/supabase-js' -import { Auth } from '@supabase/auth-ui-react' -import { ThemeSupa } from '@supabase/auth-ui-shared' - -const supabase = createClient('', '') - -const App = () => ( - -) -``` - -### Options - -Options are available via `queryParams`: - -```jsx - -``` - -### Supported Views - -The Auth component is currently shipped with the following views: - -- [Email Login](../auth-email) -- [Magic Link login](../auth-magic-link) -- [Social Login](../social-login) -- Update password -- Forgotten password - -We are planning on adding more views in the future. Follow along on that [repo](https://github.com/supabase/auth-ui). - -## Customization - -There are several ways to customize Auth UI: - -- Use one of the [predefined themes](#predefined-themes) that comes with Auth UI -- Extend a theme by [overriding the variable tokens](#override-themes) in a theme -- [Create your own theme](#create-theme) -- [Use your own CSS classes](#custom-css-classes) -- [Use inline styles](#custom-inline-styles) -- [Use your own labels](#custom-labels) - -### Predefined themes - -Auth UI comes with several themes to customize the appearance. Each predefined theme comes with at least two variations, a `default` variation, and a `dark` variation. You can switch between these themes using the `theme` prop. Import the theme you want to use and pass it to the `appearance.theme` prop. - -```js mark=3,14 /src/index.js -import { createClient } from '@supabase/supabase-js' -import { Auth } from '@supabase/auth-ui-react' -import { ThemeSupa } from '@supabase/auth-ui-shared' - -const supabase = createClient( - '', - '' -) - -const App = () => ( - -) -``` - - - -Currently there is only one predefined theme available, but we plan to add more. - - - -### Switch theme variations - -Auth UI comes with two theme variations: `default` and `dark`. You can switch between these themes with the `theme` prop. - -```js mark=15 /src/index.js -import { createClient } from '@supabase/supabase-js' -import { Auth } from '@supabase/auth-ui-react' -import { ThemeSupa } from '@supabase/auth-ui-shared' - -const supabase = createClient( - '', - '' -) - -const App = () => ( - -) -``` - -If you don't pass a value to `theme` it uses the `"default"` theme. You can pass `"dark"` to the theme prop to switch to the `dark` theme. If your theme has other variations, use the name of the variation in this prop. - -### Override themes - -Auth UI themes can be overridden using variable tokens. See the [list of variable tokens](https://github.com/supabase/auth-ui/blob/main/packages/shared/src/theming/Themes.ts). - -```js mark=12:19 /src/index.js -import { createClient } from '@supabase/supabase-js' -import { Auth } from '@supabase/auth-ui-react' -import { ThemeSupa } from '@supabase/auth-ui-shared' - -const supabase = createClient('', '') - -const App = () => ( - -) -``` - -If you created your own theme, you may not need to override any of the them. - -### Create your own theme [#create-theme] - -You can create your own theme by following the same structure within a `appearance.theme` property. -See the list of [tokens within a theme](https://github.com/supabase/auth-ui/blob/main/packages/shared/src/theming/Themes.ts). - -```js /src/index.js -import { createClient } from '@supabase/supabase-js' -import { Auth } from '@supabase/auth-ui-react' - -const supabase = createClient('', '') - -const customTheme = { - default: { - colors: { - brand: 'hsl(153 60.0% 53.0%)', - brandAccent: 'hsl(154 54.8% 45.1%)', - brandButtonText: 'white', - // .. - }, - }, - dark: { - colors: { - brandButtonText: 'white', - defaultButtonBackground: '#2e2e2e', - defaultButtonBackgroundHover: '#3e3e3e', - //.. - }, - }, - // You can also add more theme variations with different names. - evenDarker: { - colors: { - brandButtonText: 'white', - defaultButtonBackground: '#1e1e1e', - defaultButtonBackgroundHover: '#2e2e2e', - //.. - }, - }, -} - -const App = () => ( - -) -``` - -You can swich between different variations of your theme with the ["theme" prop](#switch-theme-variations). - -### Custom CSS classes [#custom-css-classes] - -You can use custom CSS classes for the following elements: -`"button"`, `"container"`, `"anchor"`, `"divider"`, `"label"`, `"input"`, `"loader"`, `"message"`. - -```js /src/index.js -import { createClient } from '@supabase/supabase-js' -import { Auth } from '@supabase/auth-ui-react' - -const supabase = createClient('', '') - -const App = () => ( - -) -``` - -### Custom inline CSS [#custom-inline-styles] - -You can use custom CSS inline styles for the following elements: -`"button"`, `"container"`, `"anchor"`, `"divider"`, `"label"`, `"input"`, `"loader"`, `"message"`. - -```js /src/index.js -import { createClient } from '@supabase/supabase-js' -import { Auth } from '@supabase/auth-ui-react' - -const supabase = createClient('', '') - -const App = () => ( - -) -``` - -### Custom labels [#custom-labels] - -You can use custom labels with `localization.variables`. See the [list of labels](https://github.com/supabase/auth-ui/blob/main/packages/shared/src/localization/en.json) that can be overwritten. - -```js mark=10:15 /src/index.js -import { createClient } from '@supabase/supabase-js' -import { Auth } from '@supabase/auth-ui-react' - -const supabase = createClient('', '') - -const App = () => ( - -) -``` - -Currently, translating error messages (e.g. "Invalid credentials") is not supported. Check [related issue.](https://github.com/supabase/auth-ui/issues/86) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/flutter-auth-ui.mdx b/apps/docs/pages/guides/auth/auth-helpers/flutter-auth-ui.mdx deleted file mode 100644 index 13af6fb5ddd59..0000000000000 --- a/apps/docs/pages/guides/auth/auth-helpers/flutter-auth-ui.mdx +++ /dev/null @@ -1,130 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'flutter-auth-ui', - title: 'Flutter Auth UI', - description: 'Prebuilt, customizable Flutter widgets for authenticating users.', -} - -Flutter Auth UI is a Flutter package containing pre-built widgets for authenticating users. -It is unstyled and can match your brand and aesthetic. - - - -## Add Flutter Auth UI - -Add the latest version of the package [supabase-auth-ui](https://pub.dev/packages/supabase_auth_ui) to pubspec.yaml: - -```yaml -dependencies: - flutter: - sdk: flutter - supabase_auth_ui: ^0.1.0+2 -``` - -### Initialize the Flutter Auth Package - -```dart -import 'package:flutter/material.dart'; -import 'package:supabase_auth_ui/supabase_auth_ui.dart'; - -void main() async { - await Supabase.initialize( - url: dotenv.get('SUPABASE_URL'), - anonKey: dotenv.get('SUPABASE_ANON_KEY'), - ); - - runApp(const MyApp()); -} -``` - -### Email Auth - -Use a SupaEmailAuth widget to create an email and password signin and signup form. It also contains a button to toggle to display a forgot password form. - -You can pass metadataFields to add additional fields to the form to pass as metadata to Supabase. - -```dart -SupaEmailAuth( - redirectTo: kIsWeb ? null : 'io.mydomain.myapp://callback', - onSignInComplete: (response) {}, - onSignUpComplete: (response) {}, - metadataFields: [ - MetaDataField( - prefixIcon: const Icon(Icons.person), - label: 'Username', - key: 'username', - validator: (val) { - if (val == null || val.isEmpty) { - return 'Please enter something'; - } - return null; - }, - ), - ], -) -``` - -### Magic Link Auth - -Use SupaMagicAuth widget to create a magic link signIn form. - -```dart -SupaMagicAuth( - redirectUrl: kIsWeb ? null : 'io.mydomain.myapp://callback', - onSuccess: (Session response) {}, - onError: (error) {}, -) -``` - -### Reset password - -Use SupaResetPassword to create a password reset form. - -```dart -SupaResetPassword( - accessToken: supabase.auth.currentSession?.accessToken, - onSuccess: (UserResponse response) {}, - onError: (error) {}, -) -``` - -### Phone Auth - -Use SupaPhoneAuth to create a phone authentication form. - -```dart -SupaPhoneAuth( - authAction: SupaAuthAction.signUp, - onSuccess: (AuthResponse response) {}, - ), -``` - -### Social Auth - -The package supports login with [official social providers](../../auth#providers). - -Use SupaSocialsAuth to create list of social login buttons. - -```dart -SupaSocialsAuth( - socialProviders: [ - SocialProviders.apple, - SocialProviders.google, - ], - colored: true, - redirectUrl: kIsWeb - ? null - : 'io.mydomain.myapp://callback', - onSuccess: (Session response) {}, - onError: (error) {}, -) -``` - -### Theming - -This package uses plain Flutter components allowing you to control the appearance of the components using your own theme. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/nextjs-pages.mdx b/apps/docs/pages/guides/auth/auth-helpers/nextjs-pages.mdx deleted file mode 100644 index fc23df156a4fa..0000000000000 --- a/apps/docs/pages/guides/auth/auth-helpers/nextjs-pages.mdx +++ /dev/null @@ -1,906 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'nextjs-pages', - title: 'Supabase Auth with Next.js Pages Directory', - description: - 'Authentication helpers for Next.js API routes, middleware, and SSR in the Pages Directory.', - sidebar_label: 'Next.js (pages)', -} - -This submodule provides convenience helpers for implementing user authentication in Next.js applications using the pages directory. - -> Note: As of [Next.js 13.4](https://nextjs.org/blog/next-13-4), the App Router has reached stable status. This is now the recommended path for new Next.js app. Check out our guide on using [Auth Helpers with the Next.js App Directory](/docs/guides/auth/auth-helpers/nextjs). - -## Install the Next.js helper library - -```sh Terminal -npm install @supabase/auth-helpers-nextjs @supabase/supabase-js -``` - -This library supports the following tooling versions: - -- Node.js: `^10.13.0 || >=12.0.0` -- Next.js: `>=10` - -Additionally, install the **React Auth Helpers** for components and hooks that can be used across all React-based frameworks. - -```sh Terminal -npm install @supabase/auth-helpers-react -``` - -## Set up environment variables - -Retrieve your project URL and anon key in your project's [API settings](https://supabase.com/dashboard/project/_/settings/api) in the Dashboard to set up the following environment variables. For local development you can set them in a `.env.local` file. See an [example](https://github.com/supabase/auth-helpers/blob/main/examples/nextjs/.env.local.example). - -```bash .env.local -NEXT_PUBLIC_SUPABASE_URL=your-supabase-url -NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key -``` - -## Basic Setup - - - - -Wrap your `pages/_app.js` component with the `SessionContextProvider` component: - -```jsx pages/_app.js -import { createPagesBrowserClient } from '@supabase/auth-helpers-nextjs' -import { SessionContextProvider } from '@supabase/auth-helpers-react' -import { useState } from 'react' - -function MyApp({ Component, pageProps }) { - // Create a new supabase browser client on every first render. - const [supabaseClient] = useState(() => createPagesBrowserClient()) - - return ( - - - - ) -} -``` - - - - -Wrap your `pages/_app.tsx` component with the `SessionContextProvider` component: - -```tsx mark=2,8 pages/_app.tsx -import { createPagesBrowserClient } from '@supabase/auth-helpers-nextjs' -import { SessionContextProvider, Session } from '@supabase/auth-helpers-react' -import { useState } from 'react' - -function MyApp({ - Component, - pageProps, -}: AppProps<{ - initialSession: Session -}>) { - // Create a new supabase browser client on every first render. - const [supabaseClient] = useState(() => createPagesBrowserClient()) - - return ( - - - - ) -} -``` - - - - -You can now determine if a user is authenticated by checking that the `user` object returned by the `useUser()` hook is defined. - -### Code Exchange API Route - -The `Code Exchange` API route is required for the [server-side auth flow](https://supabase.com/docs/guides/auth/server-side-rendering) implemented by the Next.js Auth Helpers. It exchanges an auth `code` for the user's `session`, which is set as a cookie for future requests made to Supabase. - - - - -Create a new file at `pages/api/auth/callback.js` and populate with the following: - -```jsx pages/api/auth/callback.js -import { NextApiHandler } from 'next' -import { createPagesServerClient } from '@supabase/auth-helpers-nextjs' - -const handler = async (req, res) => { - const { code } = req.query - - if (code) { - const supabase = createPagesServerClient({ req, res }) - await supabase.auth.exchangeCodeForSession(String(code)) - } - - res.redirect('/') -} - -export default handler -``` - - - - - -Create a new file at `pages/api/auth/callback.ts` and populate with the following: - -```tsx pages/api/auth/callback.ts -import { NextApiHandler } from 'next' -import { createPagesServerClient } from '@supabase/auth-helpers-nextjs' - -const handler: NextApiHandler = async (req, res) => { - const { code } = req.query - - if (code) { - const supabase = createPagesServerClient({ req, res }) - await supabase.auth.exchangeCodeForSession(String(code)) - } - - res.redirect('/') -} - -export default handler -``` - - - - -## Usage with TypeScript - -You can pass types that were [generated with the Supabase CLI](/docs/reference/javascript/typescript-support#generating-types) to the Supabase Client to get enhanced type safety and auto completion: - -### Browser client - -Creating a new supabase client object: - -```tsx -import { createPagesBrowserClient } from '@supabase/auth-helpers-nextjs' -import { Database } from '../database.types' - -const supabaseClient = createPagesBrowserClient() -``` - -Retrieving a supabase client object from the SessionContext: - -```tsx -import { useSupabaseClient } from '@supabase/auth-helpers-react' -import { Database } from '../database.types' - -const supabaseClient = useSupabaseClient() -``` - -### Server client - -```tsx -// Creating a new supabase server client object (e.g. in API route): -import { createPagesServerClient } from '@supabase/auth-helpers-nextjs' -import type { NextApiRequest, NextApiResponse } from 'next' -import type { Database } from 'types_db' - -export default async (req: NextApiRequest, res: NextApiResponse) => { - const supabaseServerClient = createPagesServerClient({ - req, - res, - }) - const { - data: { user }, - } = await supabaseServerClient.auth.getUser() - - res.status(200).json({ name: user?.name ?? '' }) -} -``` - -## Client-side data fetching with RLS - -For [row level security](/docs/learn/auth-deep-dive/auth-row-level-security) to work properly when fetching data client-side, you need to make sure to use the `supabaseClient` from the `useSupabaseClient` hook and only run your query once the user is defined client-side in the `useUser()` hook: - -```jsx mark=10:17 -import { Auth } from '@supabase/auth-ui-react' -import { ThemeSupa } from '@supabase/auth-ui-shared' -import { useUser, useSupabaseClient } from '@supabase/auth-helpers-react' -import { useEffect, useState } from 'react' - -const LoginPage = () => { - const supabaseClient = useSupabaseClient() - const user = useUser() - const [data, setData] = useState() - - useEffect(() => { - async function loadData() { - const { data } = await supabaseClient.from('test').select('*') - setData(data) - } - // Only run query once user is logged in. - if (user) loadData() - }, [user]) - - if (!user) - return ( - - ) - - return ( - <> - -

    user:

    -
    {JSON.stringify(user, null, 2)}
    -

    client-side data fetching with RLS

    -
    {JSON.stringify(data, null, 2)}
    - - ) -} - -export default LoginPage -``` - -## Server-side rendering (SSR) - -Create a server supabase client to retrieve the logged in user's session: - -```jsx pages/profile.js -import { createPagesServerClient } from '@supabase/auth-helpers-nextjs' - -export default function Profile({ user }) { - return
    Hello {user.name}
    -} - -export const getServerSideProps = async (ctx) => { - // Create authenticated Supabase Client - const supabase = createPagesServerClient(ctx) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return { - redirect: { - destination: '/', - permanent: false, - }, - } - - return { - props: { - initialSession: session, - user: session.user, - }, - } -} -``` - -## Server-side data fetching with RLS - -You can use the server supabase client to run [row level security](/docs/learn/auth-deep-dive/auth-row-level-security) authenticated queries server-side: - - - - -```jsx -import { createPagesServerClient } from '@supabase/auth-helpers-nextjs' - -export default function ProtectedPage({ user, data }) { - return ( - <> -
    Protected content for {user.email}
    -
    {JSON.stringify(data, null, 2)}
    -
    {JSON.stringify(user, null, 2)}
    - - ) -} - -export const getServerSideProps = async (ctx) => { - // Create authenticated Supabase Client - const supabase = createPagesServerClient(ctx) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return { - redirect: { - destination: '/', - permanent: false, - }, - } - - // Run queries with RLS on the server - const { data } = await supabase.from('users').select('*') - - return { - props: { - initialSession: session, - user: session.user, - data: data ?? [], - }, - } -} -``` - -
    - - -```tsx -import { User, createPagesServerClient } from '@supabase/auth-helpers-nextjs' -import { GetServerSidePropsContext } from 'next' - -export default function ProtectedPage({ user, data }: { user: User; data: any }) { - return ( - <> -
    Protected content for {user.email}
    -
    {JSON.stringify(data, null, 2)}
    -
    {JSON.stringify(user, null, 2)}
    - - ) -} - -export const getServerSideProps = async (ctx: GetServerSidePropsContext) => { - // Create authenticated Supabase Client - const supabase = createPagesServerClient(ctx) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return { - redirect: { - destination: '/', - permanent: false, - }, - } - - // Run queries with RLS on the server - const { data } = await supabase.from('users').select('*') - - return { - props: { - initialSession: session, - user: session.user, - data: data ?? [], - }, - } -} -``` - -
    -
    - -## 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. - - - - -```jsx -import { createPagesServerClient } from '@supabase/auth-helpers-nextjs' - -export default function ProtectedPage({ user, allRepos }) { - return ( - <> -
    Protected content for {user.email}
    -

    Data fetched with provider token:

    -
    {JSON.stringify(allRepos, null, 2)}
    -

    user:

    -
    {JSON.stringify(user, null, 2)}
    - - ) -} - -export const getServerSideProps = async (ctx) => { - // Create authenticated Supabase Client - const supabase = createPagesServerClient(ctx) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return { - redirect: { - destination: '/', - permanent: false, - }, - } - - // Retrieve provider_token & logged in user's third-party id from metadata - const { provider_token, user } = session - const userId = user.user_metadata.user_name - - const allRepos = await ( - await fetch(`https://api.github.com/search/repositories?q=user:${userId}`, { - method: 'GET', - headers: { - Authorization: `token ${provider_token}`, - }, - }) - ).json() - - return { props: { user, allRepos } } -} -``` - -
    - - -```tsx -import { User, createPagesServerClient } from '@supabase/auth-helpers-nextjs' -import { GetServerSidePropsContext } from 'next' - -export default function ProtectedPage({ user, allRepos }: { user: User; allRepos: any }) { - return ( - <> -
    Protected content for {user.email}
    -

    Data fetched with provider token:

    -
    {JSON.stringify(allRepos, null, 2)}
    -

    user:

    -
    {JSON.stringify(user, null, 2)}
    - - ) -} - -export const getServerSideProps = async (ctx: GetServerSidePropsContext) => { - // Create authenticated Supabase Client - const supabase = createPagesServerClient(ctx) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return { - redirect: { - destination: '/', - permanent: false, - }, - } - - // Retrieve provider_token & logged in user's third-party id from metadata - const { provider_token, user } = session - const userId = user.user_metadata.user_name - - const allRepos = await ( - await fetch(`https://api.github.com/search/repositories?q=user:${userId}`, { - method: 'GET', - headers: { - Authorization: `token ${provider_token}`, - }, - }) - ).json() - - return { props: { user, allRepos } } -} -``` - -
    -
    - -## Protecting API routes - -Create a server supabase client to retrieve the logged in user's session: - - - - -```jsx pages/api/protected-route.js -import { createPagesServerClient } from '@supabase/auth-helpers-nextjs' - -const ProtectedRoute = async (req, res) => { - // Create authenticated Supabase Client - const supabase = createPagesServerClient({ req, res }) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return res.status(401).json({ - error: 'not_authenticated', - description: 'The user does not have an active session or is not authenticated', - }) - - // Run queries with RLS on the server - const { data } = await supabase.from('test').select('*') - res.json(data) -} - -export default ProtectedRoute -``` - - - - -```tsx pages/api/protected-route.ts -import { NextApiHandler } from 'next' -import { createPagesServerClient } from '@supabase/auth-helpers-nextjs' - -const ProtectedRoute: NextApiHandler = async (req, res) => { - // Create authenticated Supabase Client - const supabase = createPagesServerClient({ req, res }) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return res.status(401).json({ - error: 'not_authenticated', - description: 'The user does not have an active session or is not authenticated', - }) - - // Run queries with RLS on the server - const { data } = await supabase.from('test').select('*') - res.json(data) -} - -export default ProtectedRoute -``` - - - - -## Auth with Next.js Middleware - -As an alternative to protecting individual pages you can use a [Next.js Middleware](https://nextjs.org/docs/middleware) to protect the entire directory or those that match the config object. In the following example, all requests to `/middleware-protected/*` will check whether a user is signed in, if successful the request will be forwarded to the destination route, otherwise the user will be redirected: - -```ts middleware.ts -import { createMiddlewareClient } from '@supabase/auth-helpers-nextjs' -import { NextResponse } from 'next/server' -import type { NextRequest } from 'next/server' - -export async function middleware(req: NextRequest) { - // We need to create a response and hand it to the supabase client to be able to modify the response headers. - const res = NextResponse.next() - // Create authenticated Supabase Client. - const supabase = createMiddlewareClient({ req, res }) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - // Check auth condition - if (session?.user.email?.endsWith('@gmail.com')) { - // Authentication successful, forward request to protected route. - return res - } - - // Auth condition not met, redirect to home page. - const redirectUrl = req.nextUrl.clone() - redirectUrl.pathname = '/' - redirectUrl.searchParams.set(`redirectedFrom`, req.nextUrl.pathname) - return NextResponse.redirect(redirectUrl) -} - -export const config = { - matcher: '/middleware-protected/:path*', -} -``` - -## Migration Guide - -### Migrating to v0.7.X - -#### PKCE Auth Flow - -PKCE is the new server-side auth flow implemented by the Next.js Auth Helpers. It requires a new API route for `/api/auth/callback` that exchanges an auth `code` for the user's `session`. - -Check the [Code Exchange API Route steps](/docs/guides/auth/auth-helpers/nextjs-pages#code-exchange-api-route) above to implement this route. - -#### Authentication - -For authentication methods that have a `redirectTo` or `emailRedirectTo`, this must be set to this new code exchange API Route - `/api/auth/callback`. This is an example with the `signUp` function: - -```jsx -supabase.auth.signUp({ - email: 'jon@example.com', - password: 'sup3rs3cur3', - options: { - emailRedirectTo: 'http://localhost:3000/auth/callback', - }, -}) -``` - -#### Deprecated Functions - -With v0.7.x of the Next.js Auth Helpers a new naming convention has been implemented for createClient functions. The `createBrowserSupabaseClient` and `createServerSupabaseClient` functions have been marked as deprecated, and will be removed in a future version of the Auth Helpers. - -- `createBrowserSupabaseClient` has been replaced with `createPagesBrowserClient` -- `createServerSupabaseClient` has been replaced with `createPagesServerClient` - -### Migrating to v0.5.X - -To make these helpers more flexible as well as more maintainable and easier to upgrade for new versions of Next.js, we're stripping them down to the most useful part which is managing the cookies and giving you an authenticated supabase-js client in any environment (client, server, middleware/edge). - -Therefore we're marking the `withApiAuth`, `withPageAuth`, and `withMiddlewareAuth` higher order functions as deprecated and they will be removed in the next **minor** release (v0.6.X). - -Please follow the steps below to update your API routes, pages, and middleware handlers. Thanks! - -#### `withApiAuth` deprecated! - -Use `createPagesServerClient` within your `NextApiHandler`: - - - - -```tsx pages/api/protected-route.ts -import { withApiAuth } from '@supabase/auth-helpers-nextjs' - -export default withApiAuth(async function ProtectedRoute(req, res, supabase) { - // Run queries with RLS on the server - const { data } = await supabase.from('test').select('*') - res.json(data) -}) -``` - - - - -```tsx pages/api/protected-route.ts -import { NextApiHandler } from 'next' -import { createPagesServerClient } from '@supabase/auth-helpers-nextjs' - -const ProtectedRoute: NextApiHandler = async (req, res) => { - // Create authenticated Supabase Client - const supabase = createPagesServerClient({ req, res }) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return res.status(401).json({ - error: 'not_authenticated', - description: 'The user does not have an active session or is not authenticated', - }) - - // Run queries with RLS on the server - const { data } = await supabase.from('test').select('*') - res.json(data) -} - -export default ProtectedRoute -``` - - - - -#### `withPageAuth` deprecated! - -Use `createPagesServerClient` within `getServerSideProps`: - - - - -```tsx pages/profile.tsx -import { withPageAuth, User } from '@supabase/auth-helpers-nextjs' - -export default function Profile({ user }: { user: User }) { - return
    {JSON.stringify(user, null, 2)}
    -} - -export const getServerSideProps = withPageAuth({ redirectTo: '/' }) -``` - -
    - - -```tsx pages/profile.js -import { createPagesServerClient, User } from '@supabase/auth-helpers-nextjs' -import { GetServerSidePropsContext } from 'next' - -export default function Profile({ user }: { user: User }) { - return
    {JSON.stringify(user, null, 2)}
    -} - -export const getServerSideProps = async (ctx: GetServerSidePropsContext) => { - // Create authenticated Supabase Client - const supabase = createPagesServerClient(ctx) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return { - redirect: { - destination: '/', - permanent: false, - }, - } - - return { - props: { - initialSession: session, - user: session.user, - }, - } -} -``` - -
    -
    - -#### `withMiddlewareAuth` deprecated! - - - - -```tsx middleware.ts -import { withMiddlewareAuth } from '@supabase/auth-helpers-nextjs' - -export const middleware = withMiddlewareAuth({ - redirectTo: '/', - authGuard: { - isPermitted: async (user) => { - return user.email?.endsWith('@gmail.com') ?? false - }, - redirectTo: '/insufficient-permissions', - }, -}) - -export const config = { - matcher: '/middleware-protected', -} -``` - - - - -```tsx middleware.ts -import { createMiddlewareClient } from '@supabase/auth-helpers-nextjs' -import { NextResponse } from 'next/server' -import type { NextRequest } from 'next/server' - -export async function middleware(req: NextRequest) { - // We need to create a response and hand it to the supabase client to be able to modify the response headers. - const res = NextResponse.next() - // Create authenticated Supabase Client. - const supabase = createMiddlewareClient({ req, res }) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - // Check auth condition - if (session?.user.email?.endsWith('@gmail.com')) { - // Authentication successful, forward request to protected route. - return res - } - - // Auth condition not met, redirect to home page. - const redirectUrl = req.nextUrl.clone() - redirectUrl.pathname = '/' - redirectUrl.searchParams.set(`redirectedFrom`, req.nextUrl.pathname) - return NextResponse.redirect(redirectUrl) -} - -export const config = { - matcher: '/middleware-protected', -} -``` - - - - -### Migrating to v0.4.X and supabase-js v2 - -With the update to `supabase-js` v2 the `auth` API routes are no longer required, therefore you can go ahead and delete your `auth` directory under the `/pages/api/` directory. Please refer to the [v2 migration guide](/docs/reference/javascript/v1/upgrade-guide) for the full set of changes within supabase-js. - -The `/api/auth/logout` API route has been removed, please use the `signout` method instead: - -```jsx - -``` - -The `supabaseClient` and `supabaseServerClient` have been removed in favor of the `createPagesBrowserClient` and `createPagesServerClient` methods. This allows you to provide the CLI-generated types to the client: - -```tsx -// client-side -import type { Database } from 'types_db' -const [supabaseClient] = useState(() => createPagesBrowserClient()) - -// server-side API route -import type { NextApiRequest, NextApiResponse } from 'next' -import type { Database } from 'types_db' - -export default async (req: NextApiRequest, res: NextApiResponse) => { - const supabaseServerClient = createPagesServerClient({ - req, - res, - }) - const { - data: { user }, - } = await supabaseServerClient.auth.getUser() - - res.status(200).json({ name: user?.name ?? '' }) -} -``` - -- The `UserProvider` has been replaced by the `SessionContextProvider`. Make sure to wrap your `pages/_app.js` componenent with the `SessionContextProvider`. Then, throughout your application you can use the `useSessionContext` hook to get the `session` and the `useSupabaseClient` hook to get an authenticated `supabaseClient`. -- The `useUser` hook now returns the `user` object or `null`. -- Usage with TypeScript: You can pass types that were [generated with the Supabase CLI](/docs/reference/javascript/typescript-support#generating-types) to the Supabase Client to get enhanced type safety and auto completion: - -Creating a new supabase client object: - -```tsx -import { Database } from '../database.types' - -const [supabaseClient] = useState(() => createPagesBrowserClient()) -``` - -Retrieving a supabase client object from the SessionContext: - -```tsx -import { useSupabaseClient } from '@supabase/auth-helpers-react' -import { Database } from '../database.types' - -const supabaseClient = useSupabaseClient() -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx b/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx deleted file mode 100644 index 0aaafb1f2375b..0000000000000 --- a/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx +++ /dev/null @@ -1,1316 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'nextjs', - title: 'Supabase Auth with the Next.js App Router', - description: - 'Authentication and Authorization helpers for creating an authenticated Supabase client with the Next.js 13 App Router.', - sidebar_label: 'Next.js', -} - -The [Next.js Auth Helpers package](https://github.com/supabase/auth-helpers) configures Supabase Auth to store the user's `session` in a `cookie`, rather than `localStorage`. This makes it available across the client and server of the App Router - [Client Components](/docs/guides/auth/auth-helpers/nextjs#client-components), [Server Components](/docs/guides/auth/auth-helpers/nextjs#server-components), [Server Actions](/docs/guides/auth/auth-helpers/nextjs#server-actions), [Route Handlers](/docs/guides/auth/auth-helpers/nextjs#route-handlers) and [Middleware](/docs/guides/auth/auth-helpers/nextjs#middleware). The `session` is automatically sent along with any requests to Supabase. - -
    - -
    - - - -If you are using the `pages` directory, check out [Auth Helpers in Next.js Pages Directory](/docs/guides/auth/auth-helpers/nextjs-pages). - - - -## Automatic Configuration (recommended) - -Use the `create-next-app` command and the `with-supabase` template to automate the configuration of cookie-based auth with the Next.js Auth Helpers. - -```sh Terminal -npx create-next-app -e with-supabase -``` - -This creates a new Next.js app configured with: - -- [Cookie-based Auth](/docs/guides/auth/auth-helpers/nextjs#authentication) -- [Middleware to refresh user's session](/docs/guides/auth/auth-helpers/nextjs#managing-session-with-middleware) -- [Code Exchange Route](/docs/guides/auth/auth-helpers/nextjs#Managing-sign-in-with-code-exchange) -- [TypeScript](https://www.typescriptlang.org/) -- [Tailwind CSS](https://tailwindcss.com/) - -### Declare Environment Variables - -Retrieve your project's URL and anon key from your [API settings](https://supabase.com/dashboard/project/_/settings/api), and create a `.env.local` file with the following environment variables: - -```bash .env.local -NEXT_PUBLIC_SUPABASE_URL=your-supabase-url -NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key -``` - -### Run Next.js App - -Run the development server and navigate to http://localhost:3000. - -```sh Terminal -npm run dev -``` - -## Manual Configuration - -### Install Next.js Auth Helpers library - -```sh Terminal -npm install @supabase/auth-helpers-nextjs @supabase/supabase-js -``` - -### Declare Environment Variables - -Retrieve your project's URL and anon key from your [API settings](https://supabase.com/dashboard/project/_/settings/api), and create a `.env.local` file with the following environment variables: - -```bash .env.local -NEXT_PUBLIC_SUPABASE_URL=your-supabase-url -NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key -``` - -### Managing session with Middleware - -When using the Supabase client on the server, you must perform extra steps to ensure the user's auth session remains active. Since the user's session is tracked in a cookie, we need to read this cookie and update it if necessary. - -Next.js Server Components allow you to read a cookie but not write back to it. Middleware on the other hand allow you to both read and write to cookies. - -Next.js [Middleware](https://nextjs.org/docs/app/building-your-application/routing/middleware) runs immediately before each route is rendered. We'll use Middleware to refresh the user's session before loading Server Component routes. - - - - -Create a new `middleware.js` file in the root of your project and populate with the following: - -```js middleware.js -import { createMiddlewareClient } from '@supabase/auth-helpers-nextjs' -import { NextResponse } from 'next/server' - -export async function middleware(req) { - const res = NextResponse.next() - const supabase = createMiddlewareClient({ req, res }) - await supabase.auth.getSession() - return res -} -``` - - - - - -Create a new `middleware.ts` file in the root of your project and populate with the following: - -```ts middleware.ts -import { createMiddlewareClient } from '@supabase/auth-helpers-nextjs' -import { NextResponse } from 'next/server' - -import type { NextRequest } from 'next/server' -import type { Database } from '@/lib/database.types' - -export async function middleware(req: NextRequest) { - const res = NextResponse.next() - const supabase = createMiddlewareClient({ req, res }) - await supabase.auth.getSession() - return res -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createMiddlewareClient` to add type support to the Supabase client. - - - - - - - - -The `getSession` function must be called for any Server Component routes that use a Supabase client. - - - -### Managing sign-in with Code Exchange - -The Next.js Auth Helpers are configured to use the [server-side auth flow](/docs/guides/auth/server-side-rendering) to sign users into your application. This requires you to setup a `Code Exchange` route, to exchange an auth `code` for the user's `session`, which is set as a cookie for future requests made to Supabase. - -To make this work with Next.js, we create a callback Route Handler that performs this exchange: - - - - -Create a new file at `app/auth/callback/route.js` and populate with the following: - -```js app/auth/callback/route.js -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { NextResponse } from 'next/server' - -export const dynamic = 'force-dynamic' - -export async function GET(request) { - const requestUrl = new URL(request.url) - const code = requestUrl.searchParams.get('code') - - if (code) { - const supabase = createRouteHandlerClient({ cookies }) - await supabase.auth.exchangeCodeForSession(code) - } - - // URL to redirect to after sign in process completes - return NextResponse.redirect(requestUrl.origin) -} -``` - - - - - -Create a new file at `app/auth/callback/route.ts` and populate with the following: - -```ts app/auth/callback/route.ts -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { NextResponse } from 'next/server' - -import type { NextRequest } from 'next/server' -import type { Database } from '@/lib/database.types' - -export const dynamic = 'force-dynamic' - -export async function GET(request: NextRequest) { - const requestUrl = new URL(request.url) - const code = requestUrl.searchParams.get('code') - - if (code) { - const supabase = createRouteHandlerClient({ cookies }) - await supabase.auth.exchangeCodeForSession(code) - } - - // URL to redirect to after sign in process completes - return NextResponse.redirect(requestUrl.origin) -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createRouteHandlerClient` to add type support to the Supabase client. - - - - - - -## Authentication - -
    - -
    - -Authentication can be initiated [client](/docs/guides/auth/auth-helpers/nextjs#client-side) or [server-side](/docs/guides/auth/auth-helpers/nextjs#server-side). All of the [supabase-js authentication strategies](/docs/reference/javascript/auth-api) are supported with the Auth Helpers client. - - - -The authentication flow requires the [Code Exchange Route](/docs/guides/auth/auth-helpers/nextjs#managing-sign-in-with-code-exchange) to exchange a `code` for the user's `session`. - - - -### Client-side - -Client Components can be used to trigger the authentication process from event handlers. - - - - -```jsx app/login.jsx -'use client' - -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' -import { useRouter } from 'next/navigation' -import { useState } from 'react' - -export default function Login() { - const [email, setEmail] = useState('') - const [password, setPassword] = useState('') - const router = useRouter() - const supabase = createClientComponentClient() - - const handleSignUp = async () => { - await supabase.auth.signUp({ - email, - password, - options: { - emailRedirectTo: `${location.origin}/auth/callback`, - }, - }) - router.refresh() - } - - const handleSignIn = async () => { - await supabase.auth.signInWithPassword({ - email, - password, - }) - router.refresh() - } - - const handleSignOut = async () => { - await supabase.auth.signOut() - router.refresh() - } - - return ( - <> - setEmail(e.target.value)} value={email} /> - setPassword(e.target.value)} - value={password} - /> - - - - - ) -} -``` - - - - - -```tsx app/login.tsx -'use client' - -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' -import { useRouter } from 'next/navigation' -import { useState } from 'react' - -import type { Database } from '@/lib/database.types' - -export default function Login() { - const [email, setEmail] = useState('') - const [password, setPassword] = useState('') - const router = useRouter() - const supabase = createClientComponentClient() - - const handleSignUp = async () => { - await supabase.auth.signUp({ - email, - password, - options: { - emailRedirectTo: `${location.origin}/auth/callback`, - }, - }) - router.refresh() - } - - const handleSignIn = async () => { - await supabase.auth.signInWithPassword({ - email, - password, - }) - router.refresh() - } - - const handleSignOut = async () => { - await supabase.auth.signOut() - router.refresh() - } - - return ( - <> - setEmail(e.target.value)} value={email} /> - setPassword(e.target.value)} - value={password} - /> - - - - - ) -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createClientComponentClient` to add type support to the Supabase client. - - - - - - -### Server-side - -The combination of [Server Components](https://nextjs.org/docs/getting-started/react-essentials#server-components) and [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers) can be used to trigger the authentication process from form submissions. - -#### Sign Up Route - - - - -```jsx app/auth/sign-up.js -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { NextResponse } from 'next/server' - -export const dynamic = 'force-dynamic' - -export async function POST(request) { - const requestUrl = new URL(request.url) - const formData = await request.formData() - const email = formData.get('email') - const password = formData.get('password') - const supabase = createRouteHandlerClient({ cookies }) - - await supabase.auth.signUp({ - email, - password, - options: { - emailRedirectTo: `${requestUrl.origin}/auth/callback`, - }, - }) - - return NextResponse.redirect(requestUrl.origin, { - status: 301, - }) -} -``` - - - - - -```tsx app/auth/sign-up.ts -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { NextResponse } from 'next/server' - -import type { Database } from '@/lib/database.types' - -export const dynamic = 'force-dynamic' - -export async function POST(request: Request) { - const requestUrl = new URL(request.url) - const formData = await request.formData() - const email = String(formData.get('email')) - const password = String(formData.get('password')) - const supabase = createRouteHandlerClient({ cookies }) - - await supabase.auth.signUp({ - email, - password, - options: { - emailRedirectTo: `${requestUrl.origin}/auth/callback`, - }, - }) - - return NextResponse.redirect(requestUrl.origin, { - status: 301, - }) -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createRouteHandlerClient` to add type support to the Supabase client. - - - - - - - - -Returning a `301` status redirects from a POST to a GET route - - - -#### Login Route - - - - -```jsx app/auth/login.js -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { NextResponse } from 'next/server' - -export const dynamic = 'force-dynamic' - -export async function POST(request) { - const requestUrl = new URL(request.url) - const formData = await request.formData() - const email = formData.get('email') - const password = formData.get('password') - const supabase = createRouteHandlerClient({ cookies }) - - await supabase.auth.signInWithPassword({ - email, - password, - }) - - return NextResponse.redirect(requestUrl.origin, { - status: 301, - }) -} -``` - - - - - -```tsx app/auth/login.ts -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { NextResponse } from 'next/server' - -import type { Database } from '@/lib/database.types' - -export const dynamic = 'force-dynamic' - -export async function POST(request: Request) { - const requestUrl = new URL(request.url) - const formData = await request.formData() - const email = String(formData.get('email')) - const password = String(formData.get('password')) - const supabase = createRouteHandlerClient({ cookies }) - - await supabase.auth.signInWithPassword({ - email, - password, - }) - - return NextResponse.redirect(requestUrl.origin, { - status: 301, - }) -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createRouteHandlerClient` to add type support to the Supabase client. - - - - - - - - -Returning a `301` status redirects from a POST to a GET route - - - -#### Logout Route - - - - -```jsx app/auth/logout.js -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { NextResponse } from 'next/server' - -export const dynamic = 'force-dynamic' - -export async function POST(request) { - const requestUrl = new URL(request.url) - const supabase = createRouteHandlerClient({ cookies }) - - await supabase.auth.signOut() - - return NextResponse.redirect(`${requestUrl.origin}/login`, { - status: 301, - }) -} -``` - - - - - -```tsx app/auth/logout.ts -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { NextResponse } from 'next/server' - -import type { Database } from '@/lib/database.types' - -export const dynamic = 'force-dynamic' - -export async function POST(request: Request) { - const requestUrl = new URL(request.url) - const supabase = createRouteHandlerClient({ cookies }) - - await supabase.auth.signOut() - - return NextResponse.redirect(`${requestUrl.origin}/login`, { - status: 301, - }) -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createRouteHandlerClient` to add type support to the Supabase client. - - - - - - -#### Login Page - - - - -```jsx app/login.jsx -export default function Login() { - return ( -
    - - - - - - - -
    - ) -} -``` - -
    - - - -```tsx app/login.tsx -export default function Login() { - return ( -
    - - - - - - -
    - ) -} -``` - -
    -
    - -## Creating a Supabase Client - -There are 5 ways to access the Supabase client with the Next.js Auth Helpers: - -- [Client Components](/docs/guides/auth/auth-helpers/nextjs#client-components) — `createClientComponentClient` in Client Components -- [Server Components](/docs/guides/auth/auth-helpers/nextjs#server-components) — `createServerComponentClient` in Server Components -- [Server Actions](/docs/guides/auth/auth-helpers/nextjs#server-actions) — `createServerActionClient` in Server Actions -- [Route Handlers](/docs/guides/auth/auth-helpers/nextjs#route-handlers) — `createRouteHandlerClient` in Route Handlers -- [Middleware](/docs/guides/auth/auth-helpers/nextjs#middleware) — `createMiddlewareClient` in Middleware - -This allows for the Supabase client to be easily instantiated in the correct context. All you need to change is the context in the middle `create[ClientComponent|ServerComponent|ServerAction|RouteHandler|Middleware]Client` and the Auth Helpers will take care of the rest. - -### Client Components - -
    - -
    - -[Client Components](https://nextjs.org/docs/getting-started/react-essentials#client-components) allow the use of client-side hooks - such as `useEffect` and `useState`. They can be used to request data from Supabase client-side, and [subscribe to realtime events](https://github.com/supabase/supabase/tree/master/examples/auth/nextjs/app/realtime-posts.tsx). - - - - -```jsx app/client/page.jsx -'use client' - -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' -import { useEffect, useState } from 'react' - -export default function Page() { - const [todos, setTodos] = useState() - const supabase = createClientComponentClient() - - useEffect(() => { - const getData = async () => { - const { data } = await supabase.from('todos').select() - setTodos(data) - } - - getData() - }, []) - - return todos ?
    {JSON.stringify(todos, null, 2)}
    :

    Loading todos...

    -} -``` - -
    - - - -```tsx app/client/page.tsx -'use client' - -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' -import { useEffect, useState } from 'react' - -import type { Database } from '@/lib/database.types' - -type Todo = Database['public']['Tables']['todos']['Row'] - -export default function Page() { - const [todos, setTodos] = useState(null) - const supabase = createClientComponentClient() - - useEffect(() => { - const getData = async () => { - const { data } = await supabase.from('todos').select() - setTodos(data) - } - - getData() - }, []) - - return todos ?
    {JSON.stringify(todos, null, 2)}
    :

    Loading todos...

    -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createClientComponentClient` to add type support to the Supabase client. - - - -
    -
    - - - -Check out the [Next.js auth example repo](https://github.com/supabase/supabase/tree/master/examples/auth/nextjs) for more examples, including [realtime subscriptions](https://github.com/supabase/supabase/tree/master/examples/auth/nextjs/app/realtime-posts.tsx). - - - -#### Singleton - -The `createClientComponentClient` function implements a [Singleton pattern](https://en.wikipedia.org/wiki/Singleton_pattern) by default, meaning that all invocations will return the same Supabase client instance. If you need multiple Supabase instances across Client Components, you can pass an additional configuration option `{ isSingleton: false }` to get a new client every time this function is called. - -```jsx -const supabase = createClientComponentClient({ isSingleton: false }) -``` - -### Server Components - -
    - -
    - -[Server Components](https://nextjs.org/docs/getting-started/react-essentials#server-components) allow for asynchronous data to be fetched server-side. - - - -In order to use Supabase in Server Components, you need to have implemented the [Middleware](/docs/guides/auth/auth-helpers/nextjs#managing-session-with-middleware) steps above. - - - - - - -```jsx app/page.jsx -import { cookies } from 'next/headers' -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' - -export const dynamic = 'force-dynamic' - -export default async function Page() { - const supabase = createServerComponentClient({ cookies }) - const { data } = await supabase.from('todos').select() - return
    {JSON.stringify(data, null, 2)}
    -} -``` - -
    - - - -```tsx app/page.tsx -import { cookies } from 'next/headers' -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' - -import type { Database } from '@/lib/database.types' - -export const dynamic = 'force-dynamic' - -export default async function ServerComponent() { - const supabase = createServerComponentClient({ cookies }) - const { data } = await supabase.from('todos').select() - return
    {JSON.stringify(data, null, 2)}
    -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createServerComponentClient` to add type support to the Supabase client. - - - -
    -
    - - - -Check out the [Next.js auth example repo](https://github.com/supabase/supabase/tree/master/examples/auth/nextjs) for more examples, including redirecting unauthenticated users - [protected pages](https://github.com/supabase/supabase/tree/master/examples/auth/nextjs/app/[id]/page.tsx). - - - -### Server Actions - -
    - -
    - -[Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions) allow mutations to be performed server-side. - - - -Next.js Server Actions are currently in `alpha` so may change without notice. - - - - - - -```jsx app/new-post.jsx -import { cookies } from 'next/headers' -import { createServerActionClient } from '@supabase/auth-helpers-nextjs' -import { revalidatePath } from 'next/cache' - -export const dynamic = 'force-dynamic' - -export default async function NewTodo() { - const addTodo = async (formData) => { - 'use server' - - const title = formData.get('title') - const supabase = createServerActionClient({ cookies }) - await supabase.from('todos').insert({ title }) - revalidatePath('/') - } - - return ( -
    - -
    - ) -} -``` - -
    - - - -```tsx app/new-post.tsx -import { cookies } from 'next/headers' -import { createServerActionClient } from '@supabase/auth-helpers-nextjs' -import { revalidatePath } from 'next/cache' - -import type { Database } from '@/lib/database.types' - -export const dynamic = 'force-dynamic' - -export default async function NewTodo() { - const addTodo = async (formData: FormData) => { - 'use server' - - const title = formData.get('title') - const supabase = createServerActionClient({ cookies }) - await supabase.from('todos').insert({ title }) - revalidatePath('/') - } - - return ( -
    - -
    - ) -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createServerActionClient` to add type support to the Supabase client. - - - -
    -
    - -### Route Handlers - -
    - -
    - -[Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/router-handlers) replace API Routes and allow for logic to be performed server-side. They can respond to `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`, and `OPTIONS` requests. - - - - -```jsx app/api/todos/route.js -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { NextResponse } from 'next/server' -import { cookies } from 'next/headers' - -export const dynamic = 'force-dynamic' - -export async function POST(request) { - const { title } = await request.json() - const supabase = createRouteHandlerClient({ cookies }) - const { data } = await supabase.from('todos').insert({ title }).select() - return NextResponse.json(data) -} -``` - - - - - -```tsx app/api/todos/route.ts -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { NextResponse } from 'next/server' -import { cookies } from 'next/headers' - -import type { Database } from '@/lib/database.types' - -export const dynamic = 'force-dynamic' - -export async function POST(request: Request) { - const { title } = await request.json() - const supabase = createRouteHandlerClient({ cookies }) - const { data } = await supabase.from('todos').insert({ title }).select() - return NextResponse.json(data) -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createRouteHandlerClient` to add type support to the Supabase client. - - - - - - -### Middleware - -See [refreshing session example](/docs/guides/auth/auth-helpers/nextjs#managing-session-with-middleware) above. - -### Edge Runtime - -The Next.js Edge Runtime allows you to host Server Components and Route Handlers from Edge nodes, serving the routes as close as possible to your user's location. - -A route can be configured to use the Edge Runtime by exporting a `runtime` variable set to `edge`. Additionally, the `cookies()` function must be called from the Edge route, before creating a Supabase Client. - -#### Server Components - - - - -```jsx app/page.jsx -import { cookies } from 'next/headers' -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' - -export const runtime = 'edge' -export const dynamic = 'force-dynamic' - -export default async function Page() { - const cookieStore = cookies() - - const supabase = createServerComponentClient({ - cookies: () => cookieStore, - }) - - const { data } = await supabase.from('todos').select() - return
    {JSON.stringify(data, null, 2)}
    -} -``` - -
    - - - -```tsx app/page.tsx -import { cookies } from 'next/headers' -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' - -import type { Database } from '@/lib/database.types' - -export const runtime = 'edge' -export const dynamic = 'force-dynamic' - -export default async function Page() { - const cookieStore = cookies() - - const supabase = createServerComponentClient({ - cookies: () => cookieStore, - }) - - const { data } = await supabase.from('todos').select() - return
    {JSON.stringify(data, null, 2)}
    -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createServerComponentClient` to add type support to the Supabase client. - - - -
    -
    - -#### Route Handlers - - - - -```jsx app/api/todos/route.js -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { NextResponse } from 'next/server' -import { cookies } from 'next/headers' - -export const runtime = 'edge' -export const dynamic = 'force-dynamic' - -export async function POST(request) { - const { title } = await request.json() - const cookieStore = cookies() - - const supabase = createRouteHandlerClient({ - cookies: () => cookieStore, - }) - - const { data } = await supabase.from('todos').insert({ title }).select() - return NextResponse.json(data) -} -``` - - - - - -```tsx app/api/todos/route.ts -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { NextResponse } from 'next/server' -import { cookies } from 'next/headers' - -import type { Database } from '@/lib/database.types' - -export const runtime = 'edge' -export const dynamic = 'force-dynamic' - -export async function POST(request: Request) { - const { title } = await request.json() - const cookieStore = cookies() - - const supabase = createRouteHandlerClient({ - cookies: () => cookieStore, - }) - - const { data } = await supabase.from('todos').insert({ title }).select() - return NextResponse.json(data) -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createRouteHandlerClient` to add type support to the Supabase client. - - - - - - -### Static Routes - -Server Components and Route Handlers are static by default - data is fetched once at build time and the value is cached. Since the request to Supabase now happens at build time, there is no user, session or cookie to pass along with the request to Supabase. Therefore, the `createClient` function from `supabase-js` can be used to fetch data for static routes. - -#### Server Components - - - - -```jsx app/page.jsx -import { createClient } from '@supabase/supabase-js' - -export default async function Page() { - const supabase = createClient( - process.env.NEXT_PUBLIC_SUPABASE_URL, - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY - ) - - const { data } = await supabase.from('todos').select() - return
    {JSON.stringify(data, null, 2)}
    -} -``` - -
    - - - -```tsx app/page.tsx -import { createClient } from '@supabase/supabase-js' - -import type { Database } from '@/lib/database.types' - -export default async function Page() { - const supabase = createClient( - process.env.NEXT_PUBLIC_SUPABASE_URL!, - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! - ) - - const { data } = await supabase.from('todos').select() - return
    {JSON.stringify(data, null, 2)}
    -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createClient` to add type support to the Supabase client. - - - -
    -
    - -#### Route Handlers - - - - -```jsx app/api/todos/route.js -import { createClient } from '@supabase/supabase-js' -import { NextResponse } from 'next/server' - -export async function POST(request) { - const { title } = await request.json() - - const supabase = createClient( - process.env.NEXT_PUBLIC_SUPABASE_URL, - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY - ) - - const { data } = await supabase.from('todos').insert({ title }).select() - return NextResponse.json(data) -} -``` - - - - - -```tsx app/api/todos/route.ts -import { createClient } from '@supabase/supabase-js' -import { NextResponse } from 'next/server' - -import type { Database } from '@/lib/database.types' - -export async function POST(request: Request) { - const { title } = await request.json() - - const supabase = createClient( - process.env.NEXT_PUBLIC_SUPABASE_URL!, - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! - ) - - const { data } = await supabase.from('todos').insert({ title }).select() - return NextResponse.json(data) -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createClient` to add type support to the Supabase client. - - - - - - -## More examples - -- [Build a Twitter Clone with the Next.js App Router and Supabase - free egghead course](https://egghead.io/courses/build-a-twitter-clone-with-the-next-js-app-router-and-supabase-19bebadb) -- [Cookie-based Auth and the Next.js 13 App Router (free course)](https://youtube.com/playlist?list=PL5S4mPUpp4OtMhpnp93EFSo42iQ40XjbF) -- [Full App Router example](https://github.com/supabase/supabase/tree/master/examples/auth/nextjs) -- [Realtime Subscriptions](https://github.com/supabase/supabase/tree/master/examples/auth/nextjs/app/realtime-posts.tsx) -- [Protected Routes](https://github.com/supabase/supabase/tree/master/examples/auth/nextjs/app/[id]/page.tsx) -- [Conditional Rendering in Client Components with SSR](https://github.com/supabase/supabase/tree/master/examples/auth/nextjs/app/login-form.tsx) - -## Migration Guide - -### Migrating to v0.7.X - -#### PKCE Auth Flow - -PKCE is the new server-side auth flow implemented by the Next.js Auth Helpers. It requires a new Route Handler for `/auth/callback` that exchanges an auth `code` for the user's `session`. - -Check the [Code Exchange Route steps](/docs/guides/auth/auth-helpers/nextjs#managing-sign-in-with-code-exchange) above to implement this Route Handler. - -#### Authentication - -For authentication methods that have a `redirectTo` or `emailRedirectTo`, this must be set to this new code exchange Route Handler - `/auth/callback`. This is an example with the `signUp` function: - -```jsx -supabase.auth.signUp({ - email: 'jon@example.com', - password: 'sup3rs3cur3', - options: { - emailRedirectTo: 'http://localhost:3000/auth/callback', - }, -}) -``` - -#### Deprecated Functions - -With v0.7.x of the Next.js Auth Helpers a new naming convention has been implemented for createClient functions. The `createMiddlewareSupabaseClient`, `createBrowserSupabaseClient`, `createServerComponentSupabaseClient` and `createRouteHandlerSupabaseClient` functions have been marked as deprecated, and will be removed in a future version of the Auth Helpers. - -- `createMiddlewareSupabaseClient` has been replaced with `createMiddlewareClient` -- `createBrowserSupabaseClient` has been replaced with `createClientComponentClient` -- `createServerComponentSupabaseClient` has been replaced with `createServerComponentClient` -- `createRouteHandlerSupabaseClient` has been replaced with `createRouteHandlerClient` - -#### createClientComponentClient returns singleton - -You no longer need to implement logic to ensure there is only a single instance of the Supabase Client shared across all Client Components - this is now the default and handled by the `createClientComponentClient` function. Call it as many times as you want! - -```jsx -"use client"; - -import { createClientComponentClient } from "@supabase/auth-helpers-nextjs"; - -export default function() { - const supabase = createClientComponentClient(); - return ... -} -``` - -For an example of creating multiple Supabase clients, check [Singleton section](/docs/guides/auth/auth-helpers/nextjs#singleton) above. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/remix.mdx b/apps/docs/pages/guides/auth/auth-helpers/remix.mdx deleted file mode 100644 index e1769bca84d32..0000000000000 --- a/apps/docs/pages/guides/auth/auth-helpers/remix.mdx +++ /dev/null @@ -1,774 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'remix', - title: 'Supabase Auth with Remix', - description: 'Authentication helpers for loaders and actions in Remix.', - sidebar_label: 'Remix', -} - -This submodule provides convenience helpers for implementing user authentication in Remix applications. - -
    - -
    - -> For a complete implementation example, check out [this free egghead course](https://egghead.io/courses/build-a-realtime-chat-app-with-remix-and-supabase-d36e2618) or [this GitHub repo](https://github.com/supabase/auth-helpers/tree/main/examples/remix). - -## Install the Remix helper library - -```sh Terminal -npm install @supabase/auth-helpers-remix @supabase/supabase-js -``` - -This library supports the following tooling versions: - -- Remix: `>=1.7.2` - -## Set up environment variables - -Retrieve your project URL and anon key in your project's [API settings](https://supabase.com/dashboard/project/_/settings/api) in the Dashboard to set up the following environment variables. For local development you can set them in a `.env` file. See an [example](https://github.com/supabase/auth-helpers/blob/main/examples/remix/.env.example). - -```bash .env -SUPABASE_URL=YOUR_SUPABASE_URL -SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY -``` - -### Code Exchange Route - -The `Code Exchange` route is required for the [server-side auth flow](https://supabase.com/docs/guides/auth/server-side-rendering) implemented by the Remix Auth Helpers. It exchanges an auth `code` for the user's `session`, which is set as a cookie for future requests made to Supabase. - - - - -Create a new file at `app/routes/auth.callback.jsx` and populate with the following: - -```jsx app/routes/auth.callback.jsx -import { redirect } from '@remix-run/node' -import { createServerClient } from '@supabase/auth-helpers-remix' - -export const loader = async ({ request }) => { - const response = new Response() - const url = new URL(request.url) - const code = url.searchParams.get('code') - - if (code) { - const supabaseClient = createServerClient( - process.env.SUPABASE_URL, - process.env.SUPABASE_ANON_KEY, - { request, response } - ) - await supabaseClient.auth.exchangeCodeForSession(code) - } - - return redirect('/', { - headers: response.headers, - }) -} -``` - - - - - -Create a new file at `app/routes/auth.callback.tsx` and populate with the following: - -```tsx app/routes/auth.callback.tsx -import { redirect } from '@remix-run/node' -import { createServerClient } from '@supabase/auth-helpers-remix' - -import type { Database } from 'db_types' -import type { LoaderArgs } from '@remix-run/node' - -export const loader = async ({ request }: LoaderArgs) => { - const response = new Response() - const url = new URL(request.url) - const code = url.searchParams.get('code') - - if (code) { - const supabaseClient = createServerClient( - process.env.SUPABASE_URL!, - process.env.SUPABASE_ANON_KEY!, - { request, response } - ) - await supabaseClient.auth.exchangeCodeForSession(code) - } - - return redirect('/', { - headers: response.headers, - }) -} -``` - -> `Database` is a TypeScript definitions file [generated by the Supabase CLI](/docs/reference/javascript/typescript-support#generating-types). - - - - -## Server-side - -The Supabase client can now be used server-side - in loaders and actions - by calling the `createServerClient` function. - -### Loader - -Loader functions run on the server immediately before the component is rendered. They respond to all GET requests on a route. You can create an authenticated Supabase client by calling the `createServerClient` function and passing it your `SUPABASE_URL`, `SUPABASE_ANON_KEY`, and a `Request` and `Response`. - - - - -```jsx -import { json } from '@remix-run/node' // change this import to whatever runtime you are using -import { createServerClient } from '@supabase/auth-helpers-remix' - -export const loader = async ({ request }) => { - const response = new Response() - // an empty response is required for the auth helpers - // to set cookies to manage auth - - const supabaseClient = createServerClient( - process.env.SUPABASE_URL, - process.env.SUPABASE_ANON_KEY, - { request, response } - ) - - const { data } = await supabaseClient.from('test').select('*') - - // in order for the set-cookie header to be set, - // headers must be returned as part of the loader response - return json( - { data }, - { - headers: response.headers, - } - ) -} -``` - -> Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Loader` function. - - - - -```jsx -import { json } from '@remix-run/node' // change this import to whatever runtime you are using -import { createServerClient } from '@supabase/auth-helpers-remix' - -import type { LoaderArgs } from '@remix-run/node' // change this import to whatever runtime you are using - -export const loader = async ({ request }: LoaderArgs) => { - const response = new Response() - const supabaseClient = createServerClient( - process.env.SUPABASE_URL!, - process.env.SUPABASE_ANON_KEY!, - { request, response } - ) - - const { data } = await supabaseClient.from('test').select('*') - - return json( - { data }, - { - headers: response.headers, - } - ) -} -``` - -> Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Loader` function. - - - - -### Action - -Action functions run on the server and respond to HTTP requests to a route, other than GET - POST, PUT, PATCH, DELETE etc. You can create an authenticated Supabase client by calling the `createServerClient` function and passing it your `SUPABASE_URL`, `SUPABASE_ANON_KEY`, and a `Request` and `Response`. - - - - -```jsx -import { json } from '@remix-run/node' // change this import to whatever runtime you are using -import { createServerClient } from '@supabase/auth-helpers-remix' - -export const action = async ({ request }) => { - const response = new Response() - - const supabaseClient = createServerClient( - process.env.SUPABASE_URL, - process.env.SUPABASE_ANON_KEY, - { request, response } - ) - - const { data } = await supabaseClient.from('test').select('*') - - return json( - { data }, - { - headers: response.headers, - } - ) -} -``` - -> Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Action` function. - - - - -```jsx -import { json } from '@remix-run/node' // change this import to whatever runtime you are using -import { createServerClient } from '@supabase/auth-helpers-remix' - -import type { ActionArgs } from '@remix-run/node' // change this import to whatever runtime you are using - -export const action = async ({ request }: ActionArgs) => { - const response = new Response() - - const supabaseClient = createServerClient( - process.env.SUPABASE_URL!, - process.env.SUPABASE_ANON_KEY!, - { request, response } - ) - - const { data } = await supabaseClient.from('test').select('*') - - return json( - { data }, - { - headers: response.headers, - } - ) -} -``` - -> Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Action` function. - - - - -## Session and User - -You can determine if a user is authenticated by checking their session using the `getSession` function. - -```jsx -const { - data: { session }, -} = await supabaseClient.auth.getSession() -``` - -The session contains a user property. - -```jsx -const user = session?.user -``` - -Or, if you don't need the session, you can call the `getUser()` function. - -```jsx -const { - data: { user }, -} = await supabaseClient.auth.getUser() -``` - -## Client-side - -We still need to use Supabase client-side for things like authentication and realtime subscriptions. Anytime we use Supabase client-side it needs to be a single instance. - -### Creating a singleton Supabase client - -Since our environment variables are not available client-side, we need to plumb them through from the loader. - - - - -```jsx app/root.jsx -export const loader = () => { - const env = { - SUPABASE_URL: process.env.SUPABASE_URL, - SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY, - } - - return json({ env }) -} -``` - -> These may not be stored in `process.env` for environments other than Node. - -Next, we call the `useLoaderData` hook in our component to get the `env` object. - -```jsx app/root.jsx -const { env } = useLoaderData() -``` - -We then want to instantiate a single instance of a Supabase browser client, to be used across our client-side components. - -```jsx app/root.jsx -const [supabase] = useState(() => createBrowserClient(env.SUPABASE_URL, env.SUPABASE_ANON_KEY)) -``` - -And then we can share this instance across our application with Outlet Context. - -```jsx app/root.jsx - -``` - - - - -```tsx app/root.tsx -export const loader = ({}: LoaderArgs) => { - const env = { - SUPABASE_URL: process.env.SUPABASE_URL!, - SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY!, - } - - return json({ env }) -} -``` - -> These may not be stored in `process.env` for environments other than Node. - -Next, we call the `useLoaderData` hook in our component to get the `env` object. - -```tsx app/root.tsx -const { env } = useLoaderData() -``` - -We then want to instantiate a single instance of a Supabase browser client, to be used across our client-side components. - -```tsx app/root.tsx -const [supabase] = useState(() => - createBrowserClient(env.SUPABASE_URL, env.SUPABASE_ANON_KEY) -) -``` - -And then we can share this instance across our application with Outlet Context. - -```tsx app/root.tsx - -``` - - - - -### Syncing server and client state - -Since authentication happens client-side, we need to tell Remix to re-call all active loaders when the user signs in or out. - -Remix provides a hook `useRevalidator` that can be used to revalidate all loaders on the current route. - -Now to determine when to submit a post request to this action, we need to compare the server and client state for the user's access token. - -Let's pipe that through from our loader. - - - - - -```jsx app/root.jsx -export const loader = async ({ request }) => { - const env = { - SUPABASE_URL: process.env.SUPABASE_URL, - SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY, - } - - const response = new Response() - - const supabase = createServerClient(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY, { - request, - response, - }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - return json( - { - env, - session, - }, - { - headers: response.headers, - } - ) -} -``` - - - - - -```tsx app/root.tsx -export const loader = async ({ request }: LoaderArgs) => { - const env = { - SUPABASE_URL: process.env.SUPABASE_URL!, - SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY!, - } - - const response = new Response() - - const supabase = createServerClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, { - request, - response, - }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - return json( - { - env, - session, - }, - { - headers: response.headers, - } - ) -} -``` - - - - - -And then use the revalidator, inside the `onAuthStateChange` hook. - - - - - -```jsx app/root.jsx -const { env, session } = useLoaderData() -const { revalidate } = useRevalidator() - -const [supabase] = useState(() => createBrowserClient(env.SUPABASE_URL, env.SUPABASE_ANON_KEY)) - -const serverAccessToken = session?.access_token - -useEffect(() => { - const { - data: { subscription }, - } = supabase.auth.onAuthStateChange((event, session) => { - if (session?.access_token !== serverAccessToken) { - // server and client are out of sync. - revalidate() - } - }) - - return () => { - subscription.unsubscribe() - } -}, [serverAccessToken, supabase, revalidate]) -``` - - - - - -```tsx app/root.tsx -const { env, session } = useLoaderData() -const { revalidate } = useRevalidator() - -const [supabase] = useState(() => - createBrowserClient(env.SUPABASE_URL, env.SUPABASE_ANON_KEY) -) - -const serverAccessToken = session?.access_token - -useEffect(() => { - const { - data: { subscription }, - } = supabase.auth.onAuthStateChange((event, session) => { - if (event !== 'INITIAL_SESSION' && session?.access_token !== serverAccessToken) { - // server and client are out of sync. - revalidate() - } - }) - - return () => { - subscription.unsubscribe() - } -}, [serverAccessToken, supabase, revalidate]) -``` - - - - - -> Check out [this repo](https://github.com/supabase/auth-helpers/tree/main/examples/remix) for full implementation example - -### Authentication - -Now we can use our outlet context to access our single instance of Supabase and use any of the [supported authentication strategies from `supabase-js`](/docs/reference/javascript/auth-signup). - - - - - -```jsx app/components/login.jsx -export default function Login() { - const { supabase } = useOutletContext() - - const handleEmailLogin = async () => { - await supabase.auth.signInWithPassword({ - email: 'jon@supabase.com', - password: 'password', - }) - } - - const handleGitHubLogin = async () => { - await supabase.auth.signInWithOAuth({ - provider: 'github', - options: { - redirectTo: 'http://localhost:3000/auth/callback', - }, - }) - } - - const handleLogout = async () => { - await supabase.auth.signOut() - } - - return ( - <> - - - - - ) -} -``` - - - - - -```tsx app/components/login.tsx -export default function Login() { - const { supabase } = useOutletContext<{ supabase: SupabaseClient }>() - - const handleEmailLogin = async () => { - await supabase.auth.signInWithPassword({ - email: 'jon@supabase.com', - password: 'password', - }) - } - - const handleGitHubLogin = async () => { - await supabase.auth.signInWithOAuth({ - provider: 'github', - options: { - redirectTo: 'http://localhost:3000/auth/callback', - }, - }) - } - - const handleLogout = async () => { - await supabase.auth.signOut() - } - - return ( - <> - - - - - ) -} -``` - - - - - -### Subscribe to realtime events - - - - - -```jsx app/routes/realtime.jsx -import { useLoaderData, useOutletContext } from '@remix-run/react' -import { createServerClient } from '@supabase/auth-helpers-remix' -import { json } from '@remix-run/node' -import { useEffect, useState } from 'react' - -export const loader = async ({ request }) => { - const response = new Response() - const supabase = createServerClient(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY, { - request, - response, - }) - - const { data } = await supabase.from('posts').select() - - return json({ serverPosts: data ?? [] }, { headers: response.headers }) -} - -export default function Index() { - const { serverPosts } = useLoaderData() - const [posts, setPosts] = useState(serverPosts) - const { supabase } = useOutletContext() - - useEffect(() => { - setPosts(serverPosts) - }, [serverPosts]) - - useEffect(() => { - const channel = supabase - .channel('*') - .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'posts' }, (payload) => - setPosts([...posts, payload.new]) - ) - .subscribe() - - return () => { - supabase.removeChannel(channel) - } - }, [supabase, posts, setPosts]) - - return
    {JSON.stringify(posts, null, 2)}
    -} -``` - -
    - - - -```tsx app/routes/realtime.tsx -import { useLoaderData, useOutletContext } from '@remix-run/react' -import { createServerClient } from '@supabase/auth-helpers-remix' -import { json } from '@remix-run/node' -import { useEffect, useState } from 'react' - -import type { SupabaseClient } from '@supabase/auth-helpers-remix' -import type { Database } from 'db_types' - -type Post = Database['public']['Tables']['posts']['Row'] - -import type { LoaderArgs } from '@remix-run/node' - -export const loader = async ({ request }: LoaderArgs) => { - const response = new Response() - const supabase = createServerClient( - process.env.SUPABASE_URL!, - process.env.SUPABASE_ANON_KEY!, - { - request, - response, - } - ) - - const { data } = await supabase.from('posts').select() - - return json({ serverPosts: data ?? [] }, { headers: response.headers }) -} - -export default function Index() { - const { serverPosts } = useLoaderData() - const [posts, setPosts] = useState(serverPosts) - const { supabase } = useOutletContext<{ supabase: SupabaseClient }>() - - useEffect(() => { - setPosts(serverPosts) - }, [serverPosts]) - - useEffect(() => { - const channel = supabase - .channel('*') - .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'posts' }, (payload) => - setPosts([...posts, payload.new as Post]) - ) - .subscribe() - - return () => { - supabase.removeChannel(channel) - } - }, [supabase, posts, setPosts]) - - return
    {JSON.stringify(posts, null, 2)}
    -} -``` - -> `Database` is a TypeScript definitions file [generated by the Supabase CLI](/docs/reference/javascript/typescript-support#generating-types). - -
    - -
    - -> Ensure you have [enabled replication](https://supabase.com/dashboard/project/_/database/replication) on the table you are subscribing to. - -## Migration Guide - -### Migrating to v0.2.0 - -#### PKCE Auth Flow - -PKCE is the new server-side auth flow implemented by the Remix Auth Helpers. It requires a new `loader` route for `/auth/callback` that exchanges an auth `code` for the user's `session`. - -Check the [Code Exchange Route steps](/docs/guides/auth/auth-helpers/remix#code-exchange-route) above to implement this route. - -#### Authentication - -For authentication methods that have a `redirectTo` or `emailRedirectTo`, this must be set to this new code exchange API Route - `/api/auth/callback`. This is an example with the `signUp` function: - -```jsx -supabaseClient.auth.signUp({ - email: 'jon@example.com', - password: 'sup3rs3cur3', - options: { - emailRedirectTo: 'http://localhost:3000/auth/callback', - }, -}) -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx b/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx deleted file mode 100644 index 10fdf26cd6e62..0000000000000 --- a/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx +++ /dev/null @@ -1,1876 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'sveltekit', - title: 'Supabase Auth with SvelteKit', - description: 'Convenience helpers for implementing user authentication in SvelteKit.', - sidebar_label: 'SvelteKit', -} - -This submodule provides convenience helpers for implementing user authentication in [SvelteKit](https://kit.svelte.dev/) applications. - -## Configuration - -### Install SvelteKit Auth Helpers library - -This library supports Node.js `^16.15.0`. - -```sh Terminal -npm install @supabase/auth-helpers-sveltekit @supabase/supabase-js -``` - -### Declare Environment Variables - -Retrieve your project's URL and anon key from your [API settings](https://supabase.com/dashboard/project/_/settings/api), and create a `.env.local` file with the following environment variables: - -```bash .env.local -# Find these in your Supabase project settings https://supabase.com/dashboard/project/_/settings/api -PUBLIC_SUPABASE_URL=https://your-project.supabase.co -PUBLIC_SUPABASE_ANON_KEY=your-anon-key -``` - -### Creating a Supabase Client - - - - -Create a new `hooks.server.js` file in the root of your project and populate with the following: - -```js src/hooks.server.js -// src/hooks.server.js -import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public' -import { createSupabaseServerClient } from '@supabase/auth-helpers-sveltekit' - -export const handle = async ({ event, resolve }) => { - event.locals.supabase = createSupabaseServerClient({ - supabaseUrl: PUBLIC_SUPABASE_URL, - supabaseKey: PUBLIC_SUPABASE_ANON_KEY, - event, - }) - - /** - * a little helper that is written for convenience so that instead - * of calling `const { data: { session } } = await supabase.auth.getSession()` - * you just call this `await getSession()` - */ - event.locals.getSession = async () => { - const { - data: { session }, - } = await event.locals.supabase.auth.getSession() - return session - } - - return resolve(event, { - filterSerializedResponseHeaders(name) { - return name === 'content-range' - }, - }) -} -``` - - - - - -Create a new `hooks.server.ts` file in the root of your project and populate with the following: - -```ts src/hooks.server.ts -// src/hooks.server.ts -import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public' -import { createSupabaseServerClient } from '@supabase/auth-helpers-sveltekit' -import type { Handle } from '@sveltejs/kit' - -export const handle: Handle = async ({ event, resolve }) => { - event.locals.supabase = createSupabaseServerClient({ - supabaseUrl: PUBLIC_SUPABASE_URL, - supabaseKey: PUBLIC_SUPABASE_ANON_KEY, - event, - }) - - /** - * a little helper that is written for convenience so that instead - * of calling `const { data: { session } } = await supabase.auth.getSession()` - * you just call this `await getSession()` - */ - event.locals.getSession = async () => { - const { - data: { session }, - } = await event.locals.supabase.auth.getSession() - return session - } - - return resolve(event, { - filterSerializedResponseHeaders(name) { - return name === 'content-range' - }, - }) -} -``` - - - - - - -Note that we are specifying filterSerializedResponseHeaders here. We need to tell SvelteKit that supabase needs the content-range header. - - - -### Code Exchange Route - -The `Code Exchange` route is required for the [server-side auth flow](https://supabase.com/docs/guides/auth/server-side-rendering) implemented by the SvelteKit Auth Helpers. It exchanges an auth `code` for the user's `session`, which is set as a cookie for future requests made to Supabase. - - - - -Create a new file at `src/routes/auth/callback/+server.js` and populate with the following: - -```js src/routes/auth/callback/+server.js -import { redirect } from '@sveltejs/kit' - -export const GET = async ({ url, locals: { supabase } }) => { - const code = url.searchParams.get('code') - - if (code) { - await supabase.auth.exchangeCodeForSession(code) - } - - throw redirect(303, '/') -} -``` - - - - - -Create a new file at `src/routes/auth/callback/+server.ts` and populate with the following: - -```ts src/routes/auth/callback/+server.ts -import { redirect } from '@sveltejs/kit' - -export const GET = async ({ url, locals: { supabase } }) => { - const code = url.searchParams.get('code') - - if (code) { - await supabase.auth.exchangeCodeForSession(code) - } - - throw redirect(303, '/') -} -``` - - - - -### Generate types from your database - -In order to get the most out of TypeScript and it's intellisense, you should import the generated Database types into the `app.d.ts` type definition file that comes with your SvelteKit project, where `import('./DatabaseDefinitions')` points to the generated types file outlined in [v2 docs here](https://supabase.com/docs/reference/javascript/release-notes#typescript-support) after you have logged in, linked, and generated types through the Supabase CLI. - -```ts src/app.d.ts -// src/app.d.ts - -import { SupabaseClient, Session } from '@supabase/supabase-js' -import { Database } from './DatabaseDefinitions' - -declare global { - namespace App { - interface Locals { - supabase: SupabaseClient - getSession(): Promise - } - interface PageData { - session: Session | null - } - // interface Error {} - // interface Platform {} - } -} -``` - -## Authentication - -Authentication can be initiated [client](/docs/guides/auth/auth-helpers/sveltekit#client-side) or [server-side](/docs/guides/auth/auth-helpers/sveltekit#server-side). All of the [supabase-js authentication strategies](/docs/reference/javascript/auth-api) are supported with the Auth Helpers client. - - - -Note: The authentication flow requires the [Code Exchange Route](/docs/guides/auth/auth-helpers/sveltekit#code-exchange-route) to exchange a `code` for the user's `session`. - - - -### Client-side - -#### Send session to client - -To make the session available across the UI, including pages and layouts, it is crucial to pass the session as a parameter in the root layout's server load function. - - - - -```js src/routes/+layout.server.js -// src/routes/+layout.server.js -export const load = async ({ locals: { getSession } }) => { - return { - session: await getSession(), - } -} -``` - - - - -```ts src/routes/+layout.server.ts -// src/routes/+layout.server.ts -export const load = async ({ locals: { getSession } }) => { - return { - session: await getSession(), - } -} -``` - - - - -#### Shared Load functions and pages - -To utilize Supabase in shared load functions and within pages, it is essential to create a Supabase client in the root layout load. - - - - -```ts src/routes/+layout.js -// src/routes/+layout.js -import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public' -import { createSupabaseLoadClient } from '@supabase/auth-helpers-sveltekit' - -export const load = async ({ fetch, data, depends }) => { - depends('supabase:auth') - - const supabase = createSupabaseLoadClient({ - supabaseUrl: PUBLIC_SUPABASE_URL, - supabaseKey: PUBLIC_SUPABASE_ANON_KEY, - event: { fetch }, - serverSession: data.session, - }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - return { supabase, session } -} -``` - - - - - -```ts src/routes/+layout.ts -// src/routes/+layout.ts -import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public' -import { createSupabaseLoadClient } from '@supabase/auth-helpers-sveltekit' -import type { Database } from '../DatabaseDefinitions' - -export const load = async ({ fetch, data, depends }) => { - depends('supabase:auth') - - const supabase = createSupabaseLoadClient({ - supabaseUrl: PUBLIC_SUPABASE_URL, - supabaseKey: PUBLIC_SUPABASE_ANON_KEY, - event: { fetch }, - serverSession: data.session, - }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - return { supabase, session } -} -``` - - - -TypeScript types can be [generated with the Supabase CLI](https://supabase.com/docs/reference/javascript/typescript-support) and passed to `createSupabaseLoadClient` to add type support to the Supabase client. - - - - - - -Access the client inside pages by `$page.data.supabase` or `data.supabase` when using `export let data`. - -The usage of `depends` tells sveltekit that this load function should be executed whenever `invalidate` is called to keep the page store in sync. - -`createSupabaseLoadClient` caches the client when running in a browser environment and therefore does not create a new client for every time the load function runs. - -#### Setting up the event listener on the client side - -We need to create an event listener in the root `+layout.svelte` file in order to catch supabase events being triggered. - -```svelte src/routes/+layout.svelte - - - - -``` - -The usage of `invalidate` tells SvelteKit that the root `+layout.ts` load function should be executed whenever the session updates to keep the page store in sync. - -#### Sign in / Sign up / Sign out - -We can access the supabase instance in our `+page.svelte` file through the data object. - -```svelte src/routes/auth/+page.svelte - - - -
    - - - -
    - - - -``` - -### Server-side - -[Form Actions](https://kit.svelte.dev/docs/form-actions) can be used to trigger the authentication process from form submissions. - - - - -```js src/routes/login/+page.server.js -// src/routes/login/+page.server.js -import { fail } from '@sveltejs/kit' - -export const actions = { - default: async ({ request, url, locals: { supabase } }) => { - const formData = await request.formData() - const email = formData.get('email') - const password = formData.get('password') - - const { error } = await supabase.auth.signUp({ - email, - password, - options: { - emailRedirectTo: `${url.origin}/auth/callback`, - }, - }) - - if (error) { - return fail(500, { message: 'Server error. Try again later.', success: false, email }) - } - - return { - message: 'Please check your email for a magic link to log into the website.', - success: true, - } - }, -} -``` - -```svelte src/routes/login/+page.svelte - - - -
    - - - -
    -``` - -
    - - - -```js src/routes/login/+page.server.ts -// src/routes/login/+page.server.ts -export const actions = { - default: async ({ request, url, locals: { supabase } }) => { - const formData = await request.formData() - const email = formData.get('email') as string - const password = formData.get('password') as string - - const { error } = await supabase.auth.signUp({ - email, - password, - options: { - emailRedirectTo: `${url.origin}/auth/callback`, - }, - }) - - if (error) { - return fail(500, { message: 'Server error. Try again later.', success: false, email }) - } - - return { - message: 'Please check your email for a magic link to log into the website.', - success: true, - } - }, -} -``` - -```svelte src/routes/login/+page.svelte - - - -
    - - - -
    -``` - -
    -
    - -## Authorization - -### Protecting API routes - -Wrap an API Route to check that the user has a valid session. If they're not logged in the session is `null`. - -```ts src/routes/api/protected-route/+server.ts -// src/routes/api/protected-route/+server.ts -import { json, error } from '@sveltejs/kit' - -export const GET = async ({ locals: { supabase, getSession } }) => { - const session = await getSession() - if (!session) { - // the user is not signed in - throw error(401, { message: 'Unauthorized' }) - } - const { data } = await supabase.from('test').select('*') - - return json({ data }) -} -``` - -If you visit `/api/protected-route` without a valid session cookie, you will get a 401 response. - -### Protecting Actions - -Wrap an Action to check that the user has a valid session. If they're not logged in the session is `null`. - -```ts src/routes/posts/+page.server.ts -// src/routes/posts/+page.server.ts -import { error, fail } from '@sveltejs/kit' - -export const actions = { - createPost: async ({ request, locals: { supabase, getSession } }) => { - const session = await getSession() - - if (!session) { - // the user is not signed in - throw error(401, { message: 'Unauthorized' }) - } - // we are save, let the user create the post - const formData = await request.formData() - const content = formData.get('content') - - const { error: createPostError, data: newPost } = await supabase - .from('posts') - .insert({ content }) - - if (createPostError) { - return fail(500, { - supabaseErrorMessage: createPostError.message, - }) - } - return { - newPost, - } - }, -} -``` - -If you try to submit a form with the action `?/createPost` without a valid session cookie, you will get a 401 error response. - -### Protecting multiple routes - -To avoid writing the same auth logic in every single route you can use the handle hook to -protect multiple routes at once. - - - - -```js src/hooks.server.js -// src/hooks.server.js -import { redirect, error } from '@sveltejs/kit' - -export const handle = async ({ event, resolve }) => { - // protect requests to all routes that start with /protected-routes - if (event.url.pathname.startsWith('/protected-routes')) { - const session = await event.locals.getSession() - if (!session) { - // the user is not signed in - throw redirect(303, '/') - } - } - - // protect POST requests to all routes that start with /protected-posts - if (event.url.pathname.startsWith('/protected-posts') && event.request.method === 'POST') { - const session = await event.locals.getSession() - if (!session) { - // the user is not signed in - throw error(303, '/') - } - } - - return resolve(event) -} -``` - - - - - -```ts src/hooks.server.ts -// src/hooks.server.ts -import { type Handle, redirect, error } from '@sveltejs/kit' - -export const handle: Handle = async ({ event, resolve }) => { - // protect requests to all routes that start with /protected-routes - if (event.url.pathname.startsWith('/protected-routes')) { - const session = await event.locals.getSession() - if (!session) { - // the user is not signed in - throw redirect(303, '/') - } - } - - // protect POST requests to all routes that start with /protected-posts - if (event.url.pathname.startsWith('/protected-posts') && event.request.method === 'POST') { - const session = await event.locals.getSession() - if (!session) { - // the user is not signed in - throw error(303, '/') - } - } - - return resolve(event) -} -``` - - - - -## Data fetching - -### Client-side data fetching with RLS - -For [row level security](https://supabase.com/docs/guides/auth/row-level-security) to work properly when fetching data client-side, you need to use `supabaseClient` from `PageData` and only run your query once the session is defined client-side: - -```svelte src/routes/+page.svelte - - -{#if data.session} -

    client-side data fetching with RLS

    -
    {JSON.stringify(loadedData, null, 2)}
    -{/if} -``` - -### Server-side data fetching with RLS - -```svelte src/routes/profile/+page.svelte - - - -
    Protected content for {user.email}
    -
    {JSON.stringify(tableData, null, 2)}
    -
    {JSON.stringify(user, null, 2)}
    -``` - -```ts src/routes/profile/+page.ts -// src/routes/profile/+page.ts -import { redirect } from '@sveltejs/kit' - -export const load = async ({ parent }) => { - const { supabase, session } = await parent() - if (!session) { - throw redirect(303, '/') - } - const { data: tableData } = await supabase.from('test').select('*') - - return { - user: session.user, - tableData, - } -} -``` - -## Saving and deleting the session - -```ts -import { fail, redirect } from '@sveltejs/kit' -import { AuthApiError } from '@supabase/supabase-js' - -export const actions = { - signin: async ({ request, locals: { supabase } }) => { - const formData = await request.formData() - - const email = formData.get('email') as string - const password = formData.get('password') as string - - const { error } = await supabase.auth.signInWithPassword({ - email, - password, - }) - - if (error) { - if (error instanceof AuthApiError && error.status === 400) { - return fail(400, { - error: 'Invalid credentials.', - values: { - email, - }, - }) - } - return fail(500, { - error: 'Server error. Try again later.', - values: { - email, - }, - }) - } - - throw redirect(303, '/dashboard') - }, - - signout: async ({ locals: { supabase } }) => { - await supabase.auth.signOut() - throw redirect(303, '/') - }, -} -``` - -## Migration Guide [#migration] - -### Migrate to 0.10 - -#### PKCE Auth Flow - -Proof Key for Code Exchange (PKCE) is the new server-side auth flow implemented by the SvelteKit Auth Helpers. It requires a server endpoint for `/auth/callback` that exchanges an auth `code` for the user's `session`. - -Check the [Code Exchange Route steps](/docs/guides/auth/auth-helpers/sveltekit#code-exchange-route) above to implement this server endpoint. - -#### Authentication - -For authentication methods that have a `redirectTo` or `emailRedirectTo`, this must be set to this new code exchange route handler - `/auth/callback`. This is an example with the `signUp` function: - -```ts -await supabase.auth.signUp({ - email: 'jon@example.com', - password: 'sup3rs3cur3', - options: { - emailRedirectTo: 'http://localhost:3000/auth/callback', - }, -}) -``` - -### Migrate from 0.8.x to 0.9 [#migration-0-9] - -#### Set up the Supabase client [#migration-set-up-supabase-client] - -In version 0.9 we now setup our Supabase client for the server inside of a `hooks.server.ts` file. - - - - -```js src/lib/db.ts -// src/lib/db.ts -import { createClient } from '@supabase/auth-helpers-sveltekit' -import { env } from '$env/dynamic/public' -// or use the static env - -// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'; - -export const supabaseClient = createClient(env.PUBLIC_SUPABASE_URL, env.PUBLIC_SUPABASE_ANON_KEY) -``` - - - - -```js src/hooks.server.ts -// src/hooks.server.ts -import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public' -import { createSupabaseServerClient } from '@supabase/auth-helpers-sveltekit' -import type { Handle } from '@sveltejs/kit' - -export const handle: Handle = async ({ event, resolve }) => { - event.locals.supabase = createSupabaseServerClient({ - supabaseUrl: PUBLIC_SUPABASE_URL, - supabaseKey: PUBLIC_SUPABASE_ANON_KEY, - event, - }) - - /** - * a little helper that is written for convenience so that instead - * of calling `const { data: { session } } = await supabase.auth.getSession()` - * you just call this `await getSession()` - */ - event.locals.getSession = async () => { - const { - data: { session }, - } = await event.locals.supabase.auth.getSession() - return session - } - - return resolve(event, { - filterSerializedResponseHeaders(name) { - return name === 'content-range' - }, - }) -} -``` - - - - -#### Initialize the client [#migration-initialize-client] - -In order to use the Supabase library in your client code you will need to setup a shared load function inside the root `+layout.ts` and create a `+layout.svelte` to handle our event listening for Auth events. - - - - -```svelte src/routes/+layout.svelte - - - - -``` - - - - -```ts src/routes/+layout.ts -// src/routes/+layout.ts -import { invalidate } from '$app/navigation' -import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public' -import { createSupabaseLoadClient } from '@supabase/auth-helpers-sveltekit' -import type { LayoutLoad } from './$types' -import type { Database } from '../DatabaseDefinitions' - -export const load: LayoutLoad = async ({ fetch, data, depends }) => { - depends('supabase:auth') - - const supabase = createSupabaseLoadClient({ - supabaseUrl: PUBLIC_SUPABASE_URL, - supabaseKey: PUBLIC_SUPABASE_ANON_KEY, - event: { fetch }, - serverSession: data.session, - }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - return { supabase, session } -} -``` - -```svelte src/routes/+layout.svelte - - - - -``` - - - - -#### Set up hooks [#migration-set-up-hooks] - -Since version 0.9 relies on `hooks.server.ts` to setup our client, we no longer need the `hooks.client.ts` in our project for Supabase related code. - -#### Typings [#migration-typings] - - - - -```ts src/app.d.ts -// src/app.d.ts -/// - -// See https://kit.svelte.dev/docs/types#app -// for information about these interfaces -// and what to do when importing types -declare namespace App { - interface Supabase { - Database: import('./DatabaseDefinitions').Database - SchemaName: 'public' - } - - // interface Locals {} - interface PageData { - session: import('@supabase/auth-helpers-sveltekit').SupabaseSession - } - // interface Error {} - // interface Platform {} -} -``` - - - - -```ts src/app.d.ts -// src/app.d.ts -import { SupabaseClient, Session } from '@supabase/supabase-js' -import { Database } from './DatabaseDefinitions' - -declare global { - namespace App { - interface Locals { - supabase: SupabaseClient - getSession(): Promise - } - interface PageData { - session: Session | null - } - // interface Error {} - // interface Platform {} - } -} -``` - - - - -#### Protecting a page [#migration-protecting-a-page] - - - - -```svelte src/routes/profile/+page.svelte - - - -
    Protected content for {user.email}
    -
    {JSON.stringify(tableData, null, 2)}
    -
    {JSON.stringify(user, null, 2)}
    -``` - -```ts src/routes/profile/+page.ts -// src/routes/profile/+page.ts -import type { PageLoad } from './$types' -import { getSupabase } from '@supabase/auth-helpers-sveltekit' -import { redirect } from '@sveltejs/kit' - -export const load: PageLoad = async (event) => { - const { session, supabaseClient } = await getSupabase(event) - if (!session) { - throw redirect(303, '/') - } - const { data: tableData } = await supabaseClient.from('test').select('*') - - return { - user: session.user, - tableData, - } -} -``` - -
    - - -```svelte src/routes/profile/+page.svelte - - - -
    Protected content for {user.email}
    -
    {JSON.stringify(tableData, null, 2)}
    -
    {JSON.stringify(user, null, 2)}
    -``` - -```ts src/routes/profile/+page.ts -// src/routes/profile/+page.ts -import type { PageLoad } from './$types' -import { redirect } from '@sveltejs/kit' - -export const load: PageLoad = async ({ parent }) => { - const { supabase, session } = await parent() - if (!session) { - throw redirect(303, '/') - } - const { data: tableData } = await supabase.from('test').select('*') - - return { - user: session.user, - tableData, - } -} -``` - -
    -
    - -#### Protecting a API route [#migration-protecting-a-api-route] - - - - -```ts src/routes/api/protected-route/+server.ts -// src/routes/api/protected-route/+server.ts -import type { RequestHandler } from './$types' -import { getSupabase } from '@supabase/auth-helpers-sveltekit' -import { json, redirect } from '@sveltejs/kit' - -export const GET: RequestHandler = async (event) => { - const { session, supabaseClient } = await getSupabase(event) - if (!session) { - throw redirect(303, '/') - } - const { data } = await supabaseClient.from('test').select('*') - - return json({ data }) -} -``` - - - - -```ts src/routes/api/protected-route/+server.ts -// src/routes/api/protected-route/+server.ts -import type { RequestHandler } from './$types' -import { json, error } from '@sveltejs/kit' - -export const GET: RequestHandler = async ({ locals: { supabase, getSession } }) => { - const session = await getSession() - if (!session) { - // the user is not signed in - throw error(401, { message: 'Unauthorized' }) - } - const { data } = await supabase.from('test').select('*') - - return json({ data }) -} -``` - - - - -### Migrate from 0.7.x to 0.8 [#migration-0-8] - -#### Set up the Supabase client [#migration-set-up-supabase-client-0-8] - - - - -```js src/lib/db.ts -import { createClient } from '@supabase/supabase-js' -import { setupSupabaseHelpers } from '@supabase/auth-helpers-sveltekit' -import { dev } from '$app/environment' -import { env } from '$env/dynamic/public' -// or use the static env - -// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'; - -export const supabaseClient = createClient(env.PUBLIC_SUPABASE_URL, env.PUBLIC_SUPABASE_ANON_KEY, { - persistSession: false, - autoRefreshToken: false, -}) - -setupSupabaseHelpers({ - supabaseClient, - cookieOptions: { - secure: !dev, - }, -}) -``` - - - - -```js src/lib/db.ts -import { createClient } from '@supabase/auth-helpers-sveltekit' -import { env } from '$env/dynamic/public' -// or use the static env - -// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'; - -export const supabaseClient = createClient(env.PUBLIC_SUPABASE_URL, env.PUBLIC_SUPABASE_ANON_KEY) -``` - - - - -#### Initialize the client [#migration-initialize-client-0-8] - - - - -```svelte src/routes/+layout.svelte - - - -``` - - - - -```svelte src/routes/+layout.svelte - - - -``` - - - - -#### Set up hooks [#migration-set-up-hooks-0-8] - - - - -```ts src/hooks.server.ts -// make sure the supabase instance is initialized on the server -import '$lib/db' -import { dev } from '$app/environment' -import { auth } from '@supabase/auth-helpers-sveltekit/server' - -export const handle = auth() -``` - -**Optional** _if using additional handle methods_ - -```ts src/hooks.server.ts -// make sure the supabase instance is initialized on the server -import '$lib/db' -import { dev } from '$app/environment' -import { auth } from '@supabase/auth-helpers-sveltekit/server' -import { sequence } from '@sveltejs/kit/hooks' - -export const handle = sequence(auth(), yourHandler) -``` - - - - -```ts src/hooks.server.ts -// make sure the supabase instance is initialized on the server -import '$lib/db' -``` - -```ts src/hooks.client.ts -// make sure the supabase instance is initialized on the client -import '$lib/db' -``` - - - - -#### Typings [#migration-typings-0-8] - - - - -```ts src/app.d.ts -/// - -// See https://kit.svelte.dev/docs/types#app -// for information about these interfaces -// and what to do when importing types -declare namespace App { - interface Locals { - session: import('@supabase/auth-helpers-sveltekit').SupabaseSession - } - - interface PageData { - session: import('@supabase/auth-helpers-sveltekit').SupabaseSession - } - - // interface Error {} - // interface Platform {} -} -``` - - - - -```ts src/app.d.ts -/// - -// See https://kit.svelte.dev/docs/types#app -// for information about these interfaces -// and what to do when importing types -declare namespace App { - interface Supabase { - Database: import('./DatabaseDefinitions').Database - SchemaName: 'public' - } - - // interface Locals {} - interface PageData { - session: import('@supabase/auth-helpers-sveltekit').SupabaseSession - } - // interface Error {} - // interface Platform {} -} -``` - - - - -#### withPageAuth [#migration-with-page-auth-0-8] - - - - -```svelte src/routes/protected-route/+page.svelte - - -
    Protected content for {user.email}
    -

    server-side fetched data with RLS:

    -
    {JSON.stringify(tableData, null, 2)}
    -

    user:

    -
    {JSON.stringify(user, null, 2)}
    -``` - -```ts src/routes/protected-route/+page.ts -import { withAuth } from '@supabase/auth-helpers-sveltekit' -import { redirect } from '@sveltejs/kit' -import type { PageLoad } from './$types' - -export const load: PageLoad = withAuth(async ({ session, getSupabaseClient }) => { - if (!session.user) { - throw redirect(303, '/') - } - - const { data: tableData } = await getSupabaseClient().from('test').select('*') - return { tableData, user: session.user } -}) -``` - -
    - - -```svelte src/routes/protected-route/+page.svelte - - -
    Protected content for {user.email}
    -
    {JSON.stringify(tableData, null, 2)}
    -
    {JSON.stringify(user, null, 2)}
    -``` - -```ts src/routes/protected-route/+page.ts -// src/routes/profile/+page.ts -import type { PageLoad } from './$types' -import { getSupabase } from '@supabase/auth-helpers-sveltekit' -import { redirect } from '@sveltejs/kit' - -export const load: PageLoad = async (event) => { - const { session, supabaseClient } = await getSupabase(event) - if (!session) { - throw redirect(303, '/') - } - const { data: tableData } = await supabaseClient.from('test').select('*') - - return { - user: session.user, - tableData, - } -} -``` - -
    -
    - -#### withApiAuth [#migration-with-api-auth-0-8] - - - - -```ts src/routes/api/protected-route/+server.ts -import type { RequestHandler } from './$types' -import { withAuth } from '@supabase/auth-helpers-sveltekit' -import { json, redirect } from '@sveltejs/kit' - -interface TestTable { - id: string - created_at: string -} - -export const GET: RequestHandler = withAuth(async ({ session, getSupabaseClient }) => { - if (!session.user) { - throw redirect(303, '/') - } - - const { data } = await getSupabaseClient().from('test').select('*') - - return json({ data }) -}) -``` - - - - -```ts src/routes/api/protected-route/+server.ts -import type { RequestHandler } from './$types' -import { getSupabase } from '@supabase/auth-helpers-sveltekit' -import { json, redirect } from '@sveltejs/kit' - -export const GET: RequestHandler = async (event) => { - const { session, supabaseClient } = await getSupabase(event) - if (!session) { - throw redirect(303, '/') - } - const { data } = await supabaseClient.from('test').select('*') - - return json({ data }) -} -``` - - - - -### Migrate from 0.6.11 and below to 0.7.0 [#migration-0-7] - -There are numerous breaking changes in the latest 0.7.0 version of this library. - -#### Environment variable prefix - -The environment variable prefix is now `PUBLIC_` instead of `VITE_` (e.g., `VITE_SUPABASE_URL` is now `PUBLIC_SUPABASE_URL`). - -#### Set up the Supabase client [#migration-set-up-supabase-client-0-7] - - - - -```js src/lib/db.ts -import { createSupabaseClient } from '@supabase/auth-helpers-sveltekit'; - -const { supabaseClient } = createSupabaseClient( - import.meta.env.VITE_SUPABASE_URL as string, - import.meta.env.VITE_SUPABASE_ANON_KEY as string -); - -export { supabaseClient }; -``` - - - - -```js src/lib/db.ts -import { createClient } from '@supabase/supabase-js' -import { setupSupabaseHelpers } from '@supabase/auth-helpers-sveltekit' -import { dev } from '$app/environment' -import { env } from '$env/dynamic/public' -// or use the static env - -// import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'; - -export const supabaseClient = createClient(env.PUBLIC_SUPABASE_URL, env.PUBLIC_SUPABASE_ANON_KEY, { - persistSession: false, - autoRefreshToken: false, -}) - -setupSupabaseHelpers({ - supabaseClient, - cookieOptions: { - secure: !dev, - }, -}) -``` - - - - -#### Initialize the client [#migration-initialize-client-0-7] - - - - -```svelte src/routes/__layout.svelte - - - - - -``` - - - - -The `@supabase/auth-helpers-svelte` library is no longer required as the `@supabase/auth-helpers-sveltekit` library handles all the client-side code. - -```svelte src/routes/+layout.svelte - - - -``` - - - - -#### Set up hooks [#migration-set-up-hooks-0-7] - - - - -```ts src/hooks.ts -import { handleAuth } from '@supabase/auth-helpers-sveltekit' -import type { GetSession, Handle } from '@sveltejs/kit' -import { sequence } from '@sveltejs/kit/hooks' - -export const handle: Handle = sequence(...handleAuth()) - -export const getSession: GetSession = async (event) => { - const { user, accessToken, error } = event.locals - return { - user, - accessToken, - error, - } -} -``` - - - - -```ts src/hooks.server.ts -// make sure the supabase instance is initialized on the server -import '$lib/db' -import { dev } from '$app/environment' -import { auth } from '@supabase/auth-helpers-sveltekit/server' - -export const handle = auth() -``` - -**Optional** _if using additional handle methods_ - -```ts src/hooks.server.ts -// make sure the supabase instance is initialized on the server -import '$lib/db' -import { dev } from '$app/environment' -import { auth } from '@supabase/auth-helpers-sveltekit/server' -import { sequence } from '@sveltejs/kit/hooks' - -export const handle = sequence(auth(), yourHandler) -``` - - - - -#### Typings [#migration-typings-0-7] - - - - -```ts src/app.d.ts -/// -// See https://kit.svelte.dev/docs/types#app -// for information about these interfaces -declare namespace App { - interface UserSession { - user: import('@supabase/supabase-js').User - accessToken?: string - } - - interface Locals extends UserSession { - error: import('@supabase/supabase-js').ApiError - } - - interface Session extends UserSession {} - - // interface Platform {} - // interface Stuff {} -} -``` - - - - -```ts src/app.d.ts -/// - -// See https://kit.svelte.dev/docs/types#app -// for information about these interfaces -// and what to do when importing types -declare namespace App { - interface Locals { - session: import('@supabase/auth-helpers-sveltekit').SupabaseSession - } - - interface PageData { - session: import('@supabase/auth-helpers-sveltekit').SupabaseSession - } - - // interface Error {} - // interface Platform {} -} -``` - - - - -#### Check the user on the client - - - - -```svelte src/routes/index.svelte - - -{#if !$session.user} -

    I am not logged in

    -{:else} -

    Welcome {$session.user.email}

    -

    I am logged in!

    -{/if} -``` - -
    - - -```svelte src/routes/+page.svelte - - -{#if !$page.data.session.user} -

    I am not logged in

    -{:else} -

    Welcome {$page.data.session.user.email}

    -

    I am logged in!

    -{/if} -``` - -
    -
    - -#### withPageAuth - - - - -```svelte src/routes/protected-route.svelte - - - - -
    Protected content for {user.email}
    -

    server-side fetched data with RLS:

    -
    {JSON.stringify(data, null, 2)}
    -

    user:

    -
    {JSON.stringify(user, null, 2)}
    -``` - -
    - - -```svelte src/routes/protected-route/+page.svelte - - -
    Protected content for {user.email}
    -

    server-side fetched data with RLS:

    -
    {JSON.stringify(tableData, null, 2)}
    -

    user:

    -
    {JSON.stringify(user, null, 2)}
    -``` - -```ts src/routes/protected-route/+page.ts -import { withAuth } from '@supabase/auth-helpers-sveltekit' -import { redirect } from '@sveltejs/kit' -import type { PageLoad } from './$types' - -export const load: PageLoad = withAuth(async ({ session, getSupabaseClient }) => { - if (!session.user) { - throw redirect(303, '/') - } - - const { data: tableData } = await getSupabaseClient().from('test').select('*') - return { tableData, user: session.user } -}) -``` - -
    -
    - -#### withApiAuth - - - - -```ts src/routes/api/protected-route.ts -import { supabaseServerClient, withApiAuth } from '@supabase/auth-helpers-sveltekit' -import type { RequestHandler } from './__types/protected-route' - -interface TestTable { - id: string - created_at: string -} - -interface GetOutput { - data: TestTable[] -} - -export const GET: RequestHandler = async ({ locals, request }) => - withApiAuth({ user: locals.user }, async () => { - // Run queries with RLS on the server - const { data } = await supabaseServerClient(request).from('test').select('*') - - return { - status: 200, - body: { data }, - } - }) -``` - - - - -```ts src/routes/api/protected-route/+server.ts -import type { RequestHandler } from './$types'; -import { withAuth } from '@supabase/auth-helpers-sveltekit'; -import { json, redirect } from '@sveltejs/kit'; - -interface TestTable { - id: string; - created_at: string; -} - -export const GET: RequestHandler = withAuth(async ({ session, getSupabaseClient }) => { - if (!session.user) { - throw redirect(303, '/'); - } - - const { data } = await getSupabaseClient() - .from('test') - .select('*'); - - return json({ data }); -); -``` - - - - -## Additional Links - -- [Auth Helpers Source code](https://github.com/supabase/auth-helpers) -- [SvelteKit example](https://github.com/supabase/auth-helpers/tree/main/examples/sveltekit) -- [SvelteKit Email/Password example](https://github.com/supabase/auth-helpers/tree/main/examples/sveltekit-email-password) -- [SvelteKit Magiclink example](https://github.com/supabase/auth-helpers/tree/main/examples/sveltekit-magic-link) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-magic-link.mdx b/apps/docs/pages/guides/auth/auth-magic-link.mdx deleted file mode 100644 index 8f4b407485d86..0000000000000 --- a/apps/docs/pages/guides/auth/auth-magic-link.mdx +++ /dev/null @@ -1,102 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-magic-link', - title: 'Login With Magic Link', - description: 'Use Supabase to authenticate and authorize your users using magic links.', -} - -Magic links are a form of passwordless logins where users click on a link sent to their email address to log in to their accounts. -Magic links only work with email addresses. By default, a user can only request a magic link once every 60 seconds. - -## Overview - -Setting up Magic Link logins for your Supabase application. - -- Add the login code to your application - [JavaScript](/docs/reference/javascript/introduction) | [Flutter](/docs/reference/dart/installing) - -## Add Magic Link into your Supabase Project - -1. For [Site URL](https://supabase.com/dashboard/project/_/auth/url-configuration), enter the final (hosted) URL of your app. -1. For [Auth Providers](https://supabase.com/dashboard/project/_/auth/providers), **enable email provider**. - -## Add login code to your client app - - - -When making use of Magic Links with [the PKCE Flow](https://supabase.com/blog/supabase-auth-sso-pkce#introducing-pkce) do bear in mind that links can only be used in the same browser that they are sent from. Consequently, a magic link sent from Chrome on Desktop will be invalid if used on a Mobile Device. - - - - - -When your user signs in, call [signInWithOtp()](/docs/reference/javascript/auth-signinwithotp) with their email address: - -```js -async function signInWithEmail() { - const { data, error } = await supabase.auth.signInWithOtp({ - email: 'example@email.com', - options: { - emailRedirectTo: 'https://example.com/welcome', - }, - }) -} -``` - - - - -When your user signs in, call [signIn()](/docs/reference/dart/auth-signinwithotp) with their email address: - -```dart -Future signInWithEmail() async { - final AuthResponse res = await supabase.auth.signinwithotp(email: 'example@email.com'); -} -``` - - - - - - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signOut() { - const { error } = await supabase.auth.signOut() -} -``` - - - - -When your user signs out, call [signOut()](/docs/reference/dart/auth-signout) to remove them from the browser session and any objects from localStorage: - -```dart -Future signOut() async { - await supabase.auth.signOut(); -} -``` - - - - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Supabase Flutter Client](https://github.com/supabase/supabase-flutter) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-mfa.mdx b/apps/docs/pages/guides/auth/auth-mfa.mdx deleted file mode 100644 index ba2dd94b56dd9..0000000000000 --- a/apps/docs/pages/guides/auth/auth-mfa.mdx +++ /dev/null @@ -1,639 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-mfa', - title: 'Multi-Factor Authentication', - description: - 'Add an additional layer of security to your apps with Supabase Auth multi-factor authentication.', -} - - -Multi-factor authentication (MFA), sometimes called two-factor authentication (2FA), adds an additional layer of security to your application by verifying their identity through additional verification steps. - -It is considered a best practice to use MFA for your applications. - -Users with weak passwords or compromised social login accounts are prone to malicious account takeovers. These can be prevented with MFA because they require the user to provide proof of both of these: - -- Something they know. - Password, or access to a social-login account. -- Something they have. - Access to an authenticator app (a.k.a. TOTP), mobile phone or recovery code. - -## Overview - -Supabase Auth implements only Time-based One Time Password(TOTP) multi-factor authentication. This type of multi-factor authentication uses a timed one-time password generated from an authenticator app in the control of users. - -Applications using MFA require two important flows: - -1. **Enrollment flow.** - This lets users set up and control MFA in your app. -2. **Authentication flow.** - This lets users sign in using any factors after the conventional login step. - -Supabase Auth provides: - -- **Enrollment API** - build rich user interfaces for adding and removing factors. -- **Challenge and Verify APIs** - securely verify that the user has access to a factor. -- **List Factors API** - build rich user interfaces for signing in with additional factors. - -Below is a flow chart illustrating how these APIs work together to enable MFA features in your app. - - SAAL1[/Session is AAL1/] --> Enroll[Enroll API] --> ShowQR[Show QR code] --> Scan([User: Scan QR code in authenticator]) --> Enter([User: Enter code]) --> Verify[Challenge + Verify API] --> Check{{Is code correct?}} - Check -->|Yes| AAL2[/Upgrade to AAL2/] --> Done((Done)) - Check -->|No| Enter - InitA((Login flow)) --> SignIn([User: Sign-in]) --> AAL1[/Upgrade to AAL1/] --> ListFactors[List Factors API] - ListFactors -->|1 or more factors| OpenAuth([User: Open authenticator]) --> Enter - ListFactors -->|0 factors| Setup[[Setup flow]] -`} -/> - -These sets of APIs let you control the MFA experience that works for you. You can create flows where MFA is optional, mandatory for all, or only specific groups of users. - -Once users have enrolled or signed-in with a factor, Supabase Auth adds additional metadata to the user's access token (JWT) that your application can use to allow or deny access. - -This information is represented by an [Authenticator Assurance Level](https://pages.nist.gov/800-63-3-Implementation-Resources/63B/AAL/), a standard measure about the assurance of the user's identity Supabase Auth has for that particular session. There are two levels recognized today: - -1. **Assurance Level 1: `aal1`** - Means that the user's identity was verified using a conventional login method - such as email+password, magic link, one-time password, phone auth or social - login. -2. **Assurance Level 2: `aal2`** - Means that the user's identity was additionally verified using at least one - second factor, such as a TOTP code. - -This assurance level is encoded in the `aal` claim in the JWT associated with the user. By decoding this value you can create custom authorization rules in your frontend, backend, and database that will enforce the MFA policy that works for your application. JWTs without an `aal` claim are at the `aal1` level. - -## Adding to your app - -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 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. -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. - -### Add enrollment flow - -An enrollment flow provides a UI for users to set up additional authentication factors. Most applications add the enrollment flow in two places within their app: - -1. Right after login or sign up. - This lets users quickly set up MFA immediately after they log in or create an - account. We recommend encouraging all users to set up MFA if that makes sense - for your application. Many applications offer this as an opt-in step in an - effort to reduce onboarding friction. -2. From within a settings page. - Allows users to set up, disable or modify their MFA settings. - -We recommend building one generic flow that you can reuse in both cases with minor modifications. - -Enrolling a factor for use with MFA takes three steps: - -1. Call `supabase.auth.mfa.enroll()`. - This method returns a QR code and a secret. Display the QR - code to the user and ask them to scan it with their authenticator application. - If they are unable to scan the QR code, show the secret in plain text which - they can type or paste into their authenticator app. -2. Calling the `supabase.auth.mfa.challenge()` API. - This prepares Supabase Auth to accept a verification code from the user - and returns a challenge ID. -3. Calling the `supabase.auth.mfa.verify()` API. - This verifies that the user has indeed added the secret from step (1) into - their app and is working correctly. If the verification succeeds, the factor - 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 the important pieces of the MFA enrollment flow. - -- When the component appears on screen, the `supabase.auth.mfa.enroll()` API is - called once to start the process of enrolling a new factor for the current - user. -- This API returns a QR code in the SVG format, which is shown on screen using - a normal `` tag by encoding the SVG as a data URL. -- Once the user has scanned the QR code with their authenticator app, they - should enter the verification code within the `verifyCode` input field and - click on `Enable`. -- A challenge is created using the `supabase.auth.mfa.challenge()` API and the - code from the user is submitted for verification using the - `supabase.auth.mfa.verify()` challenge. -- `onEnabled` is a callback that notifies the other components that enrollment - has completed. -- `onCancelled` is a callback that notifies the other components that the user - has clicked the `Cancel` button. - -```tsx -/** - * EnrollMFA shows a simple enrollment dialog. When shown on screen it calls - * the `enroll` API. Each time a user clicks the Enable button it calls the - * `challenge` and `verify` APIs to check if the code provided by the user is - * valid. - * When enrollment is successful, it calls `onEnrolled`. When the user clicks - * Cancel the `onCancelled` callback is called. - */ -export function EnrollMFA({ - onEnrolled, - onCancelled, -}: { - onEnrolled: () => void - onCancelled: () => void -}) { - const [factorId, setFactorId] = useState('') - const [qr, setQR] = useState('') // holds the QR code image SVG - const [verifyCode, setVerifyCode] = useState('') // contains the code entered by the user - const [error, setError] = useState('') // holds an error message - - const onEnableClicked = () => { - setError('') - ;(async () => { - const challenge = await supabase.auth.mfa.challenge({ factorId }) - if (challenge.error) { - setError(challenge.error.message) - throw challenge.error - } - - const challengeId = challenge.data.id - - const verify = await supabase.auth.mfa.verify({ - factorId, - challengeId, - code: verifyCode, - }) - if (verify.error) { - setError(verify.error.message) - throw verify.error - } - - onEnrolled() - })() - } - - useEffect(() => { - ;(async () => { - const { data, error } = await supabase.auth.mfa.enroll({ - factorType: 'totp', - }) - if (error) { - throw error - } - - setFactorId(data.id) - - // Supabase Auth returns an SVG QR code which you can convert into a data - // URL that you can place in an tag. - setQR(data.totp.qr_code) - })() - }, []) - - return ( - <> - {error &&
    {error}
    } - - setVerifyCode(e.target.value.trim())} - /> - - - - ) -} -``` - -### 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, one time password, social login etc.) you need to perform a check if any additional factors need to be verified. - -This can be done by using the `supabase.auth.mfa.getAuthenticatorAssuranceLevel()` API. When the user signs in and is redirected back to your app, you should call this method to extract the user's current and next authenticator assurance level (AAL). - -Therefore if you receive a `currentLevel` which is `aal1` but a `nextLevel` of `aal2`, the user should be given the option to go through MFA. - -Below is a table that explains the combined meaning. - -| Current Level | Next Level | Meaning | -| ------------: | :--------- | :------------------------------------------------------- | -| `aal1` | `aal1` | User does not have MFA enrolled. | -| `aal1` | `aal2` | User has an MFA factor enrolled but has not verified it. | -| `aal2` | `aal2` | User has verified their MFA factor. | -| `aal2` | `aal1` | User has disabled their MFA factor. (Stale JWT.) | - -#### Example: React - -Adding the challenge step to login depends heavily on the architecture of your app. However, a fairly common way to structure React apps is to have a large component (often named `App`) which contains most of the authenticated application logic. - -This example will wrap this component with logic that will show an MFA challenge screen if necessary, before showing the full application. This is illustrated in the `AppWithMFA` example below. - -```tsx -function AppWithMFA() { - const [readyToShow, setReadyToShow] = useState(false) - const [showMFAScreen, setShowMFAScreen] = useState(false) - - useEffect(() => { - ;(async () => { - try { - const { data, error } = await supabase.auth.mfa.getAuthenticatorAssuranceLevel() - if (error) { - throw error - } - - console.log(data) - - if (data.nextLevel === 'aal2' && data.nextLevel !== data.currentLevel) { - setShowMFAScreen(true) - } - } finally { - setReadyToShow(true) - } - })() - }, []) - - if (readyToShow) { - if (showMFAScreen) { - return - } - - return - } - - return <> -} -``` - -- `supabase.auth.mfa.getAuthenticatorAssuranceLevel()` does return a promise. - Don't worry, this is a very fast method (microseconds) as it rarely uses the - network. -- `readyToShow` only makes sure the AAL check completes before showing any - application UI to the user. -- If the current level can be upgraded to the next one, the MFA screen is - shown. -- Once the challenge is successful, the `App` component is finally rendered on - screen. - -Below is the component that implements the challenge and verify logic. - -```tsx -function AuthMFA() { - const [verifyCode, setVerifyCode] = useState('') - const [error, setError] = useState('') - - const onSubmitClicked = () => { - setError('') - ;(async () => { - const factors = await supabase.auth.mfa.listFactors() - if (factors.error) { - throw factors.error - } - - const totpFactor = factors.data.totp[0] - - if (!totpFactor) { - throw new Error('No TOTP factors found!') - } - - const factorId = totpFactor.id - - const challenge = await supabase.auth.mfa.challenge({ factorId }) - if (challenge.error) { - setError(challenge.error.message) - throw challenge.error - } - - const challengeId = challenge.data.id - - const verify = await supabase.auth.mfa.verify({ - factorId, - challengeId, - code: verifyCode, - }) - if (verify.error) { - setError(verify.error.message) - throw verify.error - } - })() - } - - return ( - <> -
    Please enter the code from your authenticator app.
    - {error &&
    {error}
    } - setVerifyCode(e.target.value.trim())} - /> - - - ) -} -``` - -- You can extract the available MFA factors for the user by calling - `supabase.auth.mfa.listFactors()`. Don't worry this method is also very quick - and rarely uses the network. -- If `listFactors()` returns more than one factor (or of a different type) you - should present the user with a choice. For simplicity this is not shown in - the example. -- Each time the user presses the "Submit" button a new challenge is created for - the chosen factor (in this case the first one) and it is immediately - verified. Any errors are displayed to the user. -- On successful verification, the client library will refresh the session in - the background automatically and finally call the `onSuccess` callback, which - will show the authenticated `App` component on screen. - -### Enforce rules for MFA logins - -Adding MFA to your app's UI does not in-and-of-itself offer a higher level of security to your users. You also need to enforce the MFA rules in your application's database, APIs, and server-side rendering. - -Depending on your application's needs, there are three ways you can choose to enforce MFA. - -1. **Enforce for all users (new and existing).** - Any user account will have to enroll MFA to continue using your app. - The application will not allow access without going through MFA first. -2. **Enforce for new users only.** - Only new users will be forced to enroll MFA, while old users will be encouraged - to do so. - The application will not allow access for new users without going through MFA - first. -3. **Enforce only for users that have opted-in.** - Users that want MFA can enroll in it and the application will not allow access - without going through MFA first. - -#### Database - -Your app should sufficiently deny or allow access to tables or rows based on the user's current and possible authenticator levels. - - - -PostgreSQL has two types of policies: permissive and restrictive. This guide uses restrictive policies. Make sure you don't omit the `as restrictive` clause. - - - -##### Enforce for all users (new and existing) - -If your app falls under this case, this is a template Row Level Security policy you can apply to all your tables: - -```sql -create policy "Policy name." - on table_name - as restrictive - to authenticated - using (auth.jwt()->>'aal' = 'aal2'); -``` - -- Here the policy will not accept any JWTs with an `aal` claim other than - `aal2`, which is the highest authenticator assurance level. -- **Using `as restrictive` ensures this policy will restrict all commands on the - table regardless of other policies!** - -##### Enforce for new users only - -If your app falls under this case, the rules get more complex. User accounts created past a certain timestamp must have a `aal2` level to access the database. - -```sql -create policy "Policy name." - on table_name - as restrictive -- very important! - to authenticated - using - (array[auth.jwt()->>'aal'] <@ ( - select - case - when created_at >= '2022-12-12T00:00:00Z' then array['aal2'] - else array['aal1', 'aal2'] - end as aal - from auth.users - where auth.uid() = id)); -``` - -- The policy will accept both `aal1` and `aal2` for users with a `created_at` - timestamp prior to 12th December 2022 at 00:00 UTC, but will only accept - `aal2` for all other timestamps. -- The `<@` operator is PostgreSQL's ["contained in" - operator.](https://www.postgresql.org/docs/current/functions-array.html) -- **Using `as restrictive` ensures this policy will restrict all commands on the - table regardless of other policies!** - -##### Enforce only for users that have opted-in - -Users that have enrolled MFA on their account are expecting that your -application only works for them if they've gone through MFA. - -```sql -create policy "Policy name." - on table_name - as restrictive -- very important! - to authenticated - using ( - array[auth.jwt()->>'aal'] <@ ( - select - case - when count(id) > 0 then array['aal2'] - else array['aal1', 'aal2'] - end as aal - from auth.mfa_factors - where auth.uid() = user_id and status = 'verified' - )); -``` - -- The policy will only accept only `aal2` when the user has at least one MFA - factor verified. -- 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) -- **Using `as restrictive` ensures this policy will restrict all commands on the - table regardless of other policies!** - -### Server-Side Rendering - - - -When using the Supabase JavaScript library in a server-side rendering context, make sure you always create a new object for each request! This will prevent you from accidentally rendering and serving content belonging to different users. - - - -It is possible to enforce MFA on the Server-Side Rendering level. However, this can be tricky do to well. - -You can use the `supabase.auth.mfa.getAuthenticatorAssuranceLevel()` and `supabase.auth.mfa.listFactors()` APIs to identify the AAL level of the session and any factors that are enabled for a user, similar to how you would use these on the browser. - -However, encountering a different AAL level on the server may not actually be a security problem. Consider these likely scenarios: - -1. User signed-in with a conventional method but closed their tab on the MFA - flow. -2. User forgot a tab open for a very long time. (This happens more often than - you might imagine.) -3. User has lost their authenticator device and is confused about the next - steps. - -We thus recommend you redirect users to a page where they can authenticate using their additional factor, instead of rendering a HTTP 401 Unauthorized or HTTP 403 Forbidden content. - -### APIs - -If your application uses the Supabase Database, Storage or Edge Functions, just using Row Level Security policies will give you sufficient protection. In the event that you have other APIs that you wish to protect, follow these general guidelines: - -1. **Use a good JWT verification and parsing library for your language.** - This will let you securely parse JWTs and extract their claims. -2. **Retrieve the `aal` claim from the JWT and compare its value according to - your needs.** - If you've encountered an AAL level that can be increased, ask the user to - continue the login process instead of logging them out. -3. **Use the `https://.supabase.co/rest/v1/auth/factors` REST - endpoint to identify if the user has enrolled any MFA factors.** - Only `verified` factors should be acted upon. - -## Frequently asked questions - -### Why is there a challenge and verify API when challenge does not do much? - -TOTP is not going to be the only MFA factor Supabase Auth is going to support in the future. By separating out the challenge and verify steps, we're making the library forward compatible with new factors we may add in the future -- such as SMS or WebAuthn. For example, for SMS the `challenge` endpoint would actually send out the SMS with the authentication code. - -### What's inside the QR code? - -The TOTP QR code encodes a URI with the `otpauth` scheme. It was [initially introduced by Google Authenticator](https://github.com/google/google-authenticator/wiki/Key-Uri-Format) but is now universally accepted by all authenticator apps. - -### How do I check _when_ a user went through MFA? - -Access tokens issued by Supabase Auth contain an `amr` (Authentication Methods Reference) claim. It is an array of objects that indicate what authentication methods the user has used so far. - -For example, the following structure describes a user that first signed in with a password-based method, and then went through TOTP MFA 2 minutes and 12 seconds later. The entries are ordered most recent method first! - -```json -{ - "amr": [ - { - "method": "totp", - "timestamp": 1666086056 - }, - { - "method": "password", - "timestamp": 1666085924 - } - ] -} -``` - -Use the `supabase.auth.getAuthenticatorAssuranceLevel()` method to get easy access to this information in your browser app. - -You can use this PostgreSQL snippet in RLS policies, too: - -```sql -json_query_path(auth.jwt(), '$.amr[0]') -``` - -- [`json_query_path(json, path)`](https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-JSON-PROCESSING-TABLE) - is a function that allows access to elements in a JSON object according to a - [SQL/JSON - path](https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-SQLJSON-PATH). -- `$.amr[0]` is a SQL/JSON path expression that fetches the most recent - authentication method in the JWT. - -Once you have extracted the most recent entry in the array, you can compare the `method` and `timestamp` to enforce stricter rules. For instance, you can mandate that access will be only be granted on a table to users who have recently signed in with a password. - -Currently recognized authentication methods are: - -- `oauth` - any OAuth based sign in (social login). -- `password` - any password based sign in. -- `otp` - any one-time password based sign in (email code, SMS code, magic - link). -- `totp` - a TOTP additional factor. -- `sso/saml` - any Single Sign On (SAML) method. - -The following additional claims are available when using PKCE flow: -- `invite` - any sign in via an invitation. -- `magiclink` - any sign in via magic link. Excludes logins resulting from invocation of `signUp`. -- `email/signup` - any login resulting from an email signup. -- `email_change` - any login resulting from a change in email. - -More authentication methods will be added over time as we increase the number of authentication methods supported by Supabase. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/auth-password-reset.mdx b/apps/docs/pages/guides/auth/auth-password-reset.mdx deleted file mode 100644 index 2f76e690ead8d..0000000000000 --- a/apps/docs/pages/guides/auth/auth-password-reset.mdx +++ /dev/null @@ -1,98 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { Accordion } from 'ui' - -export const meta = { - id: 'auth-password-reset', - title: 'Password Reset', - description: 'How to reset password with Supabase Auth', -} - -- Send email for password reset using [`.resetPasswordForEmail`](/docs/reference/javascript/auth-resetpasswordforemail) while providing a `redirectTo` parameter -- Email link will work as a magic link and log the user in then take them to the url specified in the `redirectTo` parameter -- Create form to update the password and call the [`.updateUser`](/docs/reference/javascript/auth-updateuser) method with the new password - -## Single Page Application (SPA) - -### Sending password reset email -Supabase provides a convenient method [`.resetPasswordForEmail`](/docs/reference/javascript/auth-resetpasswordforemail) to reset a user password. This method takes a parameter of `redirectTo` which we will use to pass an absolute URL to the update password page. This URL must be saved in your allowed [Redirect URLs](https://supabase.com/dashboard/project/_/auth/url-configuration) list found at [Authentication > Redirect Configuration](https://supabase.com/dashboard/project/_/auth/url-configuration) or it won't redirect the user. - -```ts -await supabase.auth.resetPasswordForEmail('hello@example.com', { - redirectTo: 'http://example.com/account/update-password', -}) -``` - -### Email link -The email link you receive will work like a magic link. This way when you click the link you will be logged into the website. Since we passed a redirect URL to the [`.resetPasswordForEmail`](https://supabase.com/docs/reference/javascript/auth-resetpasswordforemail) method the user should be sent to the update password page. - -### Update Password -To update the password we call the [`.updateUser`](/docs/reference/javascript/auth-updateuser) method and pass along the new password to this method. - -```ts -await supabase.auth.updateUser({ password: new_password }) -``` - -## Server-Side Rendering (SSR) - -### Sending password reset email -Supabase provides a convenient method [`.resetPasswordForEmail`](/docs/reference/javascript/auth-resetpasswordforemail) to reset a user password. This method takes a parameter of `redirectTo` which we will use to pass an absolute URL to the callback page along with a query parameter to the update password page. This URL must be saved in your allowed [Redirect URLs](https://supabase.com/dashboard/project/_/auth/url-configuration) list found at [Authentication > Redirect Configuration](https://supabase.com/dashboard/project/_/auth/url-configuration) or it won't redirect the user. - -```ts -await supabase.auth.resetPasswordForEmail('hello@example.com', { - redirectTo: 'http://example.com/api/auth/callback?next=/account/update-password', -}) -``` - - - -We are using `next` as our query parameter, but this can name whatever you like. - - - -### Email link -The email link you receive will behave like a magic link. When the link is clicked you will be sent to the `redirectTo` URL you specified that points to the path with the exchange code. - -### Exchange authorization code -After redirecting to the server page, we need to retrieve the code from the query parameter called `code` and pass it to the `.exchangeCodeForSession` function. - -```ts -// api/auth/callback.ts - -// The code is retrieved from the query parameter - use whichever mechanism is recommended -// for your app/framework. This is just an example. -const code = url.searchParams.get('code') - -// call the Supabase API to exchange the code for a session -await supabase.auth.exchangeCodeForSession(code) -``` - - - -The query parameter is always `code` for the authorization code returned from the Supabase API - - - -We will also need to check for the `next` query parameter to redirect the user to the update password page. - -```ts -// api/auth/callback.ts - -// The password page path is retrieved from the query parameter - use whichever mechanism is recommended -// for your app/framework. This is just an example. -const next = url.searchParams.get('next') - -// using NextJS API response object in this example -res.redirect(next) -``` - -### Update Password -To update the password we call the [`.updateUser`](/docs/reference/javascript/auth-updateuser) method and pass along the new password to this method. - -```ts -await supabase.auth.updateUser({ password: new_password }) -``` - -export const Page = ({ children }) => - -export default Page - diff --git a/apps/docs/pages/guides/auth/auth-smtp.mdx b/apps/docs/pages/guides/auth/auth-smtp.mdx deleted file mode 100644 index 8f30266f81f28..0000000000000 --- a/apps/docs/pages/guides/auth/auth-smtp.mdx +++ /dev/null @@ -1,39 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-smtp', - title: 'Configure a Custom SMTP', - description: 'Moving towards production: Configuring a custom SMTP provider', -} - -# Auth SMTP - -At present, you can trial the Supabase platform by sending up to **4** emails per hour via the built-in service. The default email service as a whole is offered on a best effort basis: we will do our best to maintain it and will review usage of the service on a regular basis to see if the email service should be continued. - -As you progress toward production, you may find yourself wanting for a custom SMTP service in order to increase your limits. A custom SMTP server will allow you to set your own cap on the number of emails sent per hour. - -Beyond rate limits, an SMTP server might also help with: - -- Deliverability and Reputation Management -- Scalability -- Analytics and Tracking -- Compliance and Anti Spam measures - -## How to Set up SMTP - -Head over to the [Auth Settings Page](https://supabase.com/dashboard/project/_/settings/auth) and hit "Enable Custom SMTP" under the SMTP Provider section. - -Fill in fields below with the relevant details obtained from your custom SMTP provider: - -![SMTP settings](/docs/img/guides/auth-smtp/smtp.png) - -### SMTP Providers - -You can use Supabase Auth with any major SMTP provider of your choosing. Some SMTP providers you could consider using are: - -- [Twilio SendGrid](https://docs.sendgrid.com/for-developers/sending-email/integrating-with-the-smtp-api) -- [AWS SES](https://docs.aws.amazon.com/ses/latest/dg/send-email-smtp.html) -- [Resend](https://resend.com/docs/dashboard/emails/introduction) - -export const Page = ({ children }) => -export default Page diff --git a/apps/docs/pages/guides/auth/enterprise-sso.mdx b/apps/docs/pages/guides/auth/enterprise-sso.mdx deleted file mode 100644 index 5ca0dffcd0c43..0000000000000 --- a/apps/docs/pages/guides/auth/enterprise-sso.mdx +++ /dev/null @@ -1,12 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Enterprise Single Sign-On', - description: 'Learn about Single Sign-On support in Supabase Auth for enterprise applications', -} - -Supabase Auth supports building enterprise applications that require Single Sign-On (SSO) authentication [with SAML 2.0](/docs/guides/auth/sso/auth-sso-saml). - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/managing-user-data.mdx b/apps/docs/pages/guides/auth/managing-user-data.mdx deleted file mode 100644 index 1c6bc8e212ac5..0000000000000 --- a/apps/docs/pages/guides/auth/managing-user-data.mdx +++ /dev/null @@ -1,164 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'managing-user-data', - title: 'Managing User Data', - description: 'Securing your user data with Row Level Security.', -} - -For security purposes, the `auth` schema is not exposed on the auto-generated API. - -Even though Supabase provides an `auth.users` table, it can be helpful to create tables in the `public` schema for storing user data that you want to access via the API. - -## Creating user tables - -When you create tables to store user data, it's helpful to reference the `auth.users` table in the primary key to ensure data integrity. Also specify the `on delete cascade` clause when referencing `auth.users`. Omitting it may cause problems when deleting users. For example, a `public.profiles` table might look like this: - -```sql -create table public.profiles ( - id uuid not null references auth.users on delete cascade, - first_name text, - last_name text, - - primary key (id) -); - -alter table public.profiles enable row level security; -``` - - - -Only use primary keys as [foreign key references](https://www.postgresql.org/docs/current/tutorial-fk.html) for schemas and tables like `auth.users` which are managed by Supabase. PostgreSQL lets you specify a foreign key reference for columns backed by a unique index (not necessarily primary keys). - -Primary keys are **guaranteed not to change**. Columns, indices, constraints or other database objects managed by Supabase **may change at any time** and you should be careful when referencing them directly. - - - -## Deleting Users - -You may delete users directly or via the management console at Authentication > Users. Note that deleting a user from the `auth.users` table does not automatically sign out a user. As Supabase makes use of JSON Web Tokens (JWT), a user's JWT will remain "valid" until it has expired. Should you wish to immediately revoke access for a user, do consider making use of a Row Level Security policy as described below. - - -You cannot delete a user if they are the owner of any objects in Supabase Storage. - -You will encounter an error when you try to delete an Auth user that owns any Storage objects. If this happens, try deleting all the objects for that user, or reassign ownership to another user. - - -## Exporting Users - -As Supabase is built on top of PostgreSQL, you can query the `auth.users` and `auth.identities` table via the `SQL Editor` tab to extract all users: -```sql -select * from auth.users; -``` - -You can also opt to export the results via CSV through the dashboard if you wish: -![export_users.png](/docs/img/guides/auth-managing-user-data/export_users.png) - - -## Public access - -Since Row Level Security is enabled, this table is accessible via the API but no data will be returned unless we set up some Policies. -If we wanted the data to be _readable_ by everyone but only allow logged-in users to update their own data, the Policies would look like this: - -```sql -create policy "Public profiles are viewable by everyone." - on profiles for select - using ( true ); - -create policy "Users can insert their own profile." - on profiles for insert - with check ( auth.uid() = id ); - -create policy "Users can update own profile." - on profiles for update - using ( auth.uid() = id ); -``` - -## Private access - -If the data should only be _readable_ by the user who owns the data, we just need to change the `for select` query above. - -```sql -create policy "Profiles are viewable by users who created them." - on profiles for select - using ( auth.uid() = id ); -``` - -The nice thing about this pattern? We can now query this table via the API and we don't need to include data filters in our API queries - the Policies will handle that for us: - -```js -// This will return nothing while the user is logged out -const { data } = await supabase.from('profiles').select('id, username, avatar_url, website') - -// After the user is logged in, this will only return -// the logged-in user's data - in this case a single row -const { error } = await supabase.auth.signIn({ email }) -const { data: profile } = await supabase - .from('profiles') - .select('id, username, avatar_url, website') -``` - -## Bypassing Row Level Security - -If you need to fetch a full list of user profiles, we supply a `service_key` which you can use with your API and Client Libraries to bypass Row Level Security. - -Make sure you _NEVER_ expose this publicly. But it can be used on the server-side to fetch all of the profiles. - -## Accessing User Metadata - -You can assign metadata to users on sign up: - -```js -const { data, error } = await supabase.auth.signUp({ - email: 'example@email.com', - password: 'example-password', - options: { - data: { - first_name: 'John', - age: 27, - }, - }, -}) -``` - -User metadata is stored on the `raw_user_meta_data` column of the `auth.users` table. To view the metadata: - -```js -const { - data: { user }, -} = await supabase.auth.getUser() -let metadata = user.user_metadata -``` - -## Advanced techniques - -### Using triggers - -If you want to add a row to your `public.profiles` table every time a user signs up, you can use triggers. -If the trigger fails however, it could block the user sign ups - so make sure that the code is well-tested. - -For example: - -```sql --- inserts a row into public.profiles -create function public.handle_new_user() -returns trigger -language plpgsql -security definer set search_path = public -as $$ -begin - insert into public.profiles (id) - values (new.id); - return new; -end; -$$; - --- trigger the function every time a user is created -create trigger on_auth_user_created - after insert on auth.users - for each row execute procedure public.handle_new_user(); -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/phone-login.mdx b/apps/docs/pages/guides/auth/phone-login.mdx deleted file mode 100644 index d57ed18d5f29e..0000000000000 --- a/apps/docs/pages/guides/auth/phone-login.mdx +++ /dev/null @@ -1,47 +0,0 @@ -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: 'Phone Login', - description: 'Learn about logging in to your platform using SMS one-time passwords.', -} - -Phone 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 provides another form of authentication through a one-time code sent via SMS. - -## Benefits - -There are several reasons why you might want to add phone login to your applications: - -- **Improved user experience**: By eliminating the need for users to remember and enter complex passwords, phone 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. - -- **Increased security**: Phone 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. - -- **Reduced support burden**: Phone login can also help reduce the support burden for your team by eliminating the need to handle password recovery flows 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 a provider with Supabase Auth - -Supabase supports Phone Login with several communications platforms. Follow the guides below to set up a provider with Supabase Auth. - -
    - {PhoneLoginsItems.map((item) => ( - - - - {item.linkDescription} - - - -))} - -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/phone-login/messagebird.mdx b/apps/docs/pages/guides/auth/phone-login/messagebird.mdx deleted file mode 100644 index 273b48709442e..0000000000000 --- a/apps/docs/pages/guides/auth/phone-login/messagebird.mdx +++ /dev/null @@ -1,284 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-messagebird', - title: 'Phone Auth with MessageBird', - description: 'How to set up and use Mobile OTP with MessageBird and Supabase.', -} - -## Overview - -In this guide we'll show you how to authenticate your users with SMS based OTP (One-Time Password) tokens. - -There are two reasons to use Supabase SMS OTP tokens: - -- You want users to log in with mobile + password, and the mobile should be verified via SMS -- You want users to log in with mobile ONLY (i.e. passwordless login) - -We'll cover: - -- [Finding your MessageBird credentials](#finding-your-messagebird-credentials) -- [Using OTP with password based logins](#using-otp-with-password-based-logins) -- [Using OTP as a passwordless sign-in mechanism](#using-otp-as-a-passwordless-sign-in-mechanism) - -What you'll need: - -- A MessageBird account (sign up here: https://dashboard.messagebird.com/en/sign-up) -- A Supabase project (create one here: https://supabase.com/dashboard) -- A mobile phone capable of receiving SMS - -## Steps - -### Finding your MessageBird credentials - -Start by logging into your MessageBird account and verify the mobile number you'll be using to test with: https://dashboard.messagebird.com/en/getting-started/sms - -This is the number that will be receiving the SMS OTPs. - -![Verify your own phone number](/docs/img/guides/auth-messagebird/1.png) - -![Get your API Keys](/docs/img/guides/auth-messagebird/2.png) - -Navigate to the [dashboard settings](https://dashboard.messagebird.com/en/settings/sms) to set the default originator. The messagebird originator is the name or number from which the message is sent. -For more information, you can refer to the messagebird article on choosing an originator [here](https://support.messagebird.com/hc/en-us/articles/115002628665-Choosing-an-originator) - -![Set the default originator](/docs/img/guides/auth-messagebird/3.png) - -You will need the following values to get started: - -- Live API Key / Test API Key -- MessageBird originator - -Now go to the Auth > Settings page in the Supabase dashboard (https://supabase.com/dashboard/project/YOUR-PROJECT-REF/auth/settings). - -You should see an option to enable Phone Signup. - -![Enable Phone Sign-Up](/docs/img/guides/auth-twilio/7.png) - -Toggle it on, and copy the 2 values over from the messagebird dashboard. Click save. - -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! - -#### SMS custom template - -The SMS message sent to a phone containing an OTP code can be customized. This is useful if you need to mention a brand name or display a website address. - -Go to Auth > Templates page in the Supabase dashboard (https://supabase.com/dashboard/project/YOUR-PROJECT-REF/auth/templates). - -Use the variable `.Code` in the template to display the code. - -### Using OTP with password based logins - -In this use scenario we'll be using the user's mobile phone number as an alternative to an email address when signing up along with a password. You may want to think hard about the permanency of this however. It is not uncommon for mobile phone numbers to be recycled by phone networks when users cancel their phone contracts or move countries, therefore granting access to the user's account to whoever takes over the phone number in the future. Soon we'll add multi-factor auth, which will mitigate this risk, but for now you may want to give some thought to allowing your users to recover their account by some other means in an emergency. - -Using supabase-js on the client you'll want to use the same `signUp` method that you'd use for email based sign ups, but with the `phone` param instead of the `email param`: - - - - -```js -let { user, error } = await supabase.auth.signUp({ - phone: '+13334445555', - password: 'some-password', -}) -``` - - - - -```bash -curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/signup' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "phone": "+13334445555", - "password": "some-password" -}' -``` - - - - -The user will now receive an SMS with a 6-digit pin that you will need to receive from them within 60-seconds before they can login to their account. - -You should present a form to the user so they can input the 6 digit pin, then send it along with the phone number to `verifyOTP`: - - - - -```js -let { session, error } = await supabase.auth.verifyOTP({ - phone: '+13334445555', - token: '123456', -}) -``` - - - - -```bash -curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/verify' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "type": "sms", - "phone": "+13334445555", - "token": "123456" -}' -``` - - - - -If successful the user will now be logged in and you should receive a valid session like: - -```json -{ - "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjI3MjkxNTc3LCJzdWIiOiJmYTA2NTQ1Zi1kYmI1LTQxY2EtYjk1NC1kOGUyOTg4YzcxOTEiLCJlbWFpbCI6IiIsInBob25lIjoiNjU4NzUyMjAyOSIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6InBob25lIn0sInVzZXJfbWV0YWRhdGEiOnt9LCJyb2xlIjoiYXV0aGVudGljYXRlZCJ9.1BqRi0NbS_yr1f6hnr4q3s1ylMR3c1vkiJ4e_N55dhM", - "token_type": "bearer", - "expires_in": 3600, - "refresh_token": "LSp8LglPPvf0DxGMSj-vaQ" -} -``` - -The access token can be sent in the Authorization header as a Bearer token for any CRUD operations on supabase-js. See our guide on [Row Level Security](/docs/guides/auth#row-level-security) for more info on restricting access on a user basis. - -Also now that the mobile has been verified, the user can use the number and password to sign in without needing to verify their number each time: - - - - -```js -let { user, error } = await supabase.auth.signInWithPassword({ - phone: '+13334445555', - password: 'some-password', -}) -``` - - - - -```bash -curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/token?grant_type=password' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "phone": "+13334445555", - "password": "some-password" -}' -``` - - - - -### Using OTP as a passwordless sign-in mechanism - -In this scenario you are granting your user's the ability to login to their account without needing to set a password on their account, all they have to do to log in is verify their mobile each time using the OTP. - -In javascript we can use the `signIn` method with a single parameter: `phone` - - - - -```js -let { user, error } = await supabase.auth.signInWithOtp({ - phone: '+13334445555', -}) -``` - - - - -```bash -curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/otp' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "phone": "+13334445555" -}' -``` - - - - -The second step is the same as the previous section, you need to collect the 6-digit pin from the user and pass it along with their phone number to the verify method: - - - - -```js -let { session, error } = await supabase.auth.verifyOTP({ - phone: '+13334445555', - token: '123456', -}) -``` - - - - -```bash -curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/verify' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "type": "sms", - "phone": "+13334445555", - "token": "123456" -}' -``` - - - - -and the response should also be the same as above: - -```json -{ - "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjI3MjkxNTc3LCJzdWIiOiJmYTA2NTQ1Zi1kYmI1LTQxY2EtYjk1NC1kOGUyOTg4YzcxOTEiLCJlbWFpbCI6IiIsInBob25lIjoiNjU4NzUyMjAyOSIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6InBob25lIn0sInVzZXJfbWV0YWRhdGEiOnt9LCJyb2xlIjoiYXV0aGVudGljYXRlZCJ9.1BqRi0NbS_yr1f6hnr4q3s1ylMR3c1vkiJ4e_N55dhM", - "token_type": "bearer", - "expires_in": 3600, - "refresh_token": "LSp8LglPPvf0DxGMSj-vaQ" -} -``` - -The user does not have a password therefore will need to sign in via this method each time they want to access your service. - -## Resources - -- [MessageBird Signup](https://dashboard.messagebird.com/en/sign-up) -- [Supabase Dashboard](https://supabase.com/dashboard) -- [Supabase Row Level Security](/docs/guides/auth#row-level-security) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/phone-login/twilio.mdx b/apps/docs/pages/guides/auth/phone-login/twilio.mdx deleted file mode 100644 index 70dd119c1648a..0000000000000 --- a/apps/docs/pages/guides/auth/phone-login/twilio.mdx +++ /dev/null @@ -1,386 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-twilio', - title: 'Phone Auth with Twilio', - description: 'How to set up and use Mobile OTP with Twilio and Supabase.', - video: 'https://www.youtube.com/v/akScoPO01bc', -} - -In this guide we'll show you how to authenticate your users with SMS based One-Time Password (OTP) tokens. - -There are two reasons to use Supabase SMS OTP tokens: - -- You want users to log in with a phone number and password, and verify the phone number on signup with SMS -- You want users to log in with a phone number ONLY (i.e. passwordless login) - -What you'll need: - -- Twilio account ([sign up](https://www.twilio.com/try-twilio)) -- Supabase project (create one [here](https://supabase.com/dashboard)) -- Mobile phone capable of receiving SMS - -SMS Authentication can be done with either Twilio Verify or Twilio Programmable Messaging. [Twilio Verify](https://www.twilio.com/en-us/trusted-activation/verify) is a specialized OTP solution and is recommended for most developers that need over-the-phone authentication. Alternatively you can use [Twilio Programmable Messaging](https://www.twilio.com/docs/messaging) which offers generic SMS sending support. - -## Twilio Verify - -To set up Twilio Verify, you will need to: - -1. Create a new [verification service](https://support.twilio.com/hc/en-us/articles/360033309133-Getting-Started-with-Twilio-Verify-V2) in the Twilio dashboard. -2. [Switch Phone Provider to Twilio Verify](https://supabase.com/dashboard/project/_/auth/providers) -3. Configure the Twilio Verify Service ID field using the Verification Service ID obtained in 1. - -When using Twilio Verify, OTPs are generated by Twilio. This means that: - -- Unlike other providers, the OTP expiry duration and message content fields are not configurable via the Supabase dashboard. Please head to Twilio Verify to configure these settings. -- The token remains the same during its validity period until the verification is successful. This means if your user make another request within that period, they will receive the same token. -- Twilio Verify has a separate set of rate limits that apply. Visit Twilio's [Rate Limit and Timeouts page](https://www.twilio.com/docs/verify/api/rate-limits-and-timeouts) to find out more. - - - At this time, Twilio Verify is only supported on the `whatsapp` and `sms` channels. - - -## Twilio (Programmable Messaging) - -In this section we'll cover: - -- [Finding your Twilio credentials](#finding-your-twilio-credentials) -- [Using OTP with password based logins](#using-otp-with-password-based-logins) -- [Using OTP as a passwordless sign-in mechanism](#using-otp-as-a-passwordless-sign-in-mechanism) - -What you'll need: - -- A Twilio account (sign up here: https://www.twilio.com/try-twilio) -- A Supabase project (create one here: https://supabase.com/dashboard) -- A mobile phone capable of receiving SMS - -## Video - -
    - -
    - -## Steps - -### Finding your Twilio credentials - -Start by logging into your Twilio account and starting a new project: https://www.twilio.com/console/projects/create - -Give your project a name and verify the mobile number you'll be using to test with. This is the number that will be receiving the SMS OTPs. - -![Name your twilio project](/docs/img/guides/auth-twilio/1.png) -![verify your own phone number](/docs/img/guides/auth-twilio/2.png) - -Select 'SMS', 'Identity & Verification', and 'With code' as options on the welcome form. - -![Form Fields](/docs/img/guides/auth-twilio/3.png) - -When you're back on the [Twilio console screen](https://www.twilio.com/console), you need to scroll down and click 'Get a trial phone number' - this is the number that you'll be sending SMSs from. - -![Get a trial phone number](/docs/img/guides/auth-twilio/4.png) - -![Successful phone number](/docs/img/guides/auth-twilio/5.png) - -You should now be able to see all three values you'll need to get started: - -- Account SID -- Auth Token -- Sender Phone Number - -![All the credentials you'll need](/docs/img/guides/auth-twilio/6.png) - -Now go to the Auth > Providers page in the Supabase dashboard and select "Phone" from the Auth Providers list (https://supabase.com/dashboard/project/_/auth/providers). - -You should see an option to enable Phone Signup: - -![Enable Phone Sign-Up](/docs/img/guides/auth-twilio/7.png) - -Toggle it on, and copy the 3 values over from the twilio dashboard. Click save. - -Note: for "Twilio Message Service SID" you can use the Sender Phone Number generated above. - -![Plug in Twilio credentials](/docs/img/guides/auth-twilio/8.png) - -Now the backend should be setup, we can proceed to add our client-side code! - -#### SMS custom template - -The SMS message sent to a phone containing an OTP code can be customized. This is useful if you need to mention a brand name or display a website address. - -Go to Auth > Providers page (under "Configuration") in the Supabase dashboard and select "Phone" from the Auth Providers list (https://supabase.com/dashboard/project/_/auth/providers). Scroll to the very bottom of the "Phone" section to the "SMS Message" input - you can customize the SMS message here. - -Use the variable `.Code` in the template to display the OTP code. Here's an example in the SMS template. - -![example in the SMS template](/docs/img/guides/auth-twilio/9.png) - -### Using OTP with password based logins - -In this scenario we'll be using the user's mobile phone number and a corresponding password as an alternative to signing up with an email address. Note: please thoroughly consider potential security implications when signing up with a combination of phone number and password. Phone numbers are sometimes recycled by phone networks when users cancel their phone contracts or move countries, thereby granting access to the user's account to the subsequent owner of the phone number. In the near future Supabase will support multifactor authentication, which will mitigate this risk, but for now you may want to consider allowing your users to recover their account by some other means in an emergency. - -Using supabase-js on the client you'll want to use the same `signUp` method that you'd use for email based sign ups, but with the `phone` param instead of the `email param`: - - - - -```js -let { user, error } = await supabase.auth.signUp({ - phone: '+13334445555', - password: 'some-password', -}) -``` - - - - -```bash -curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/signup' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "phone": "+13334445555", - "password": "some-password" -}' -``` - - - - -The user will now receive an SMS with a 6-digit pin that you will need to receive from them within 60-seconds before they can login to their account. - -You should present a form to the user so they can input the 6 digit pin, then send it along with the phone number to `verifyOTP`: - - - - -```js -let { session, error } = await supabase.auth.verifyOtp({ - phone: '+13334445555', - token: '123456', - type: 'sms', -}) -``` - - - - -```bash -curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/verify' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "type": "sms", - "phone": "+13334445555", - "token": "123456" -}' -``` - - - - -If successful the user will now be logged in and you should receive a valid session like: - -```json -{ - "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjI3MjkxNTc3LCJzdWIiOiJmYTA2NTQ1Zi1kYmI1LTQxY2EtYjk1NC1kOGUyOTg4YzcxOTEiLCJlbWFpbCI6IiIsInBob25lIjoiNjU4NzUyMjAyOSIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6InBob25lIn0sInVzZXJfbWV0YWRhdGEiOnt9LCJyb2xlIjoiYXV0aGVudGljYXRlZCJ9.1BqRi0NbS_yr1f6hnr4q3s1ylMR3c1vkiJ4e_N55dhM", - "token_type": "bearer", - "expires_in": 3600, - "refresh_token": "LSp8LglPPvf0DxGMSj-vaQ" -} -``` - -The access token can be sent in the Authorization header as a Bearer token for any CRUD operations on supabase-js. See our guide on [Row Level Security](/docs/guides/auth#row-level-security) for more info on restricting access on a user basis. - -Also now that the mobile has been verified, the user can use the number and password to sign in without needing to verify their number each time: - - - - -```js -let { user, error } = await supabase.auth.signInWithPassword({ - phone: '+13334445555', - password: 'some-password', -}) -``` - - - - -```bash -curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/token?grant_type=password' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "phone": "+13334445555", - "password": "some-password" -}' -``` - - - - -### Using OTP as a passwordless sign-in mechanism - -In this scenario you are granting your user's the ability to login to their account without needing to set a password on their account, all they have to do to log in is verify their mobile each time using the OTP. - -In javascript we can use the `signIn` method with a single parameter: `phone` - - - - -```js -let { user, error } = await supabase.auth.signInWithOtp({ - phone: '+13334445555', -}) -``` - - - - -```bash -curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/otp' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "phone": "+13334445555" -}' -``` - - - - -The second step is the same as the previous section, you need to collect the 6-digit pin from the user and pass it along with their phone number to the verify method: - - - - -```js -let { session, error } = await supabase.auth.verifyOtp({ - phone: '+13334445555', - token: '123456', - type: 'sms', -}) -``` - - - - -```bash -curl -X POST 'https://cvwawazfelidkloqmbma.supabase.co/auth/v1/verify' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "type": "sms", - "phone": "+13334445555", - "token": "123456" -}' -``` - - - - -and the response should also be the same as above: - -```json -{ - "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjI3MjkxNTc3LCJzdWIiOiJmYTA2NTQ1Zi1kYmI1LTQxY2EtYjk1NC1kOGUyOTg4YzcxOTEiLCJlbWFpbCI6IiIsInBob25lIjoiNjU4NzUyMjAyOSIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6InBob25lIn0sInVzZXJfbWV0YWRhdGEiOnt9LCJyb2xlIjoiYXV0aGVudGljYXRlZCJ9.1BqRi0NbS_yr1f6hnr4q3s1ylMR3c1vkiJ4e_N55dhM", - "token_type": "bearer", - "expires_in": 3600, - "refresh_token": "LSp8LglPPvf0DxGMSj-vaQ" -} -``` - -The user does not have a password therefore will need to sign in via this method each time they want to access your service. - -## WhatsApp OTP Logins - -In some cases, you may wish to use WhatsApp as a delivery channel instead. Here are some examples our users have cited: - -- You want higher deliverability -- You wish for a secure channel -- Your users mostly use WhatsApp as a messaging platform - -WhatsApp OTPs can be used with Twilio Verify without additional configuration. To make use of WhatsApp OTP with Twilio Programmable Messaging, please complete the following steps: - -- Go through the [Twilio self sign up guide for WhatsApp](https://www.twilio.com/docs/whatsapp/self-sign-up) -- Submit a template via the [Twilio Guide For Submitting WhatsApp templates](https://www.twilio.com/docs/whatsapp/tutorial/send-whatsapp-notification-messages-templates#creating-message-templates-and-submitting-them-for-approval) - - - The message template submitted to Twilio must exactly match the SMS Body entered on the Supabase - dashboard. - - -The sign in process with WhatsApp is similar to the sign in process for SMS. Do note the additional `whatsapp` parameter added: - -```js -const { data, error } = await supabase.auth.signInWithOtp({ - phone: '+57336567365', - options: { - channel: 'whatsapp', - }, -}) -``` - -You can also sign up with `whatsapp` as a channel: - -```js -const { data, error } = await supabase.auth.signUp({ - phone: '+57336567365', - password: 'testsupabasenow', - options: { - channel: 'whatsapp', - }, -}) -``` - -There is no change in the verification process, you should continue to use the `sms` type for verification - -```js -// After receiving a WhatsApp OTP -let { data, error } = await supabase.auth.verifyOtp({ - phone: '+57336567365', - token: '123456', - type: 'sms', -}) -``` - -## Resources - -- [Reasons to use Twilio Verify](https://www.twilio.com/blog/9-reasons-to-use-the-verify-api) -- [Twilio Verify Documentation](https://www.twilio.com/docs/verify) -- [Twilio Signup](https://www.twilio.com/try-twilio) -- [Supabase Dashboard](https://supabase.com/dashboard) -- [Supabase Row Level Security](/docs/guides/auth#row-level-security) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/phone-login/vonage.mdx b/apps/docs/pages/guides/auth/phone-login/vonage.mdx deleted file mode 100644 index 77949c2d0fc00..0000000000000 --- a/apps/docs/pages/guides/auth/phone-login/vonage.mdx +++ /dev/null @@ -1,277 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-vonage', - title: 'Phone Auth with Vonage', - description: 'How to set up and use Mobile OTP with Vonage and Supabase.', -} - -## Overview - -In this guide we'll show you how to authenticate your users with SMS based OTP (One-Time Password) tokens. - -There are two reasons to use Supabase SMS OTP tokens: - -- You want users to log in with mobile + password, and the mobile should be verified via SMS -- You want users to log in with mobile ONLY (i.e. passwordless login) - -We'll cover: - -- [Getting your Vonage API Key](#finding-your-vonage-api-key) -- [Using OTP with password based logins](#using-otp-with-password-based-logins) -- [Using OTP as a passwordless sign-in mechanism](#using-otp-as-a-passwordless-sign-in-mechanism) - -What you'll need: - -- A Vonage account (sign up here: https://dashboard.nexmo.com/sign-up) -- A Supabase project (create one here: https://supabase.com/dashboard) -- A mobile phone capable of receiving SMS - -## Steps - -### Getting your Vonage credentials - -Start by logging into your Vonage Dashboard at https://dashboard.nexmo.com/ - -You will see you API Key and API Secret here, which is actually all you need to get started. - -In most countries, a phone number is actually optional and you can also use any Alphanumeric Sender ID of up to 11 characters length (8 for India) as a Sender ID (from). This means you do not need a number to test with in most cases. - -To find out more about supported countries for Alphanumeric Sender ID, check this overview: https://help.nexmo.com/hc/en-us/articles/115011781468-SMS-Features-Overview-Outbound-only- - -Hint: Some countries might need a Sender ID Registration to allow sending with an Alphanumeric Sender ID. You can find this information in the help article as well. If Alpha Sender IDs are not supported, you will need to buy a phone number. - -### Getting a phone number (optional) - -If you want a phone number to send SMS from, you can buy one from the Vonage Dashboard under Numbers > Buy Numbers (https://dashboard.nexmo.com/buy-numbers). - -Select the country you want a number for. You will need a mobile phone number with SMS or SMS+Voice capability. After you have bought the number, you will be able to send SMS from it. - -### Configure Supabase - -Now go to the Auth > Settings page in the Supabase dashboard (https://supabase.com/dashboard/project/YOUR-PROJECT-REF/auth/settings). - -You should see an option to enable Phone Signup. - -Toggle it on, and copy the api key, api secret and phone number values over from the Vonage dashboard. Click save. - -Now the backend should be setup, we can proceed to add our client-side code! - -#### SMS custom template - -The SMS message sent to a phone containing an OTP code can be customized. This is useful if you need to mention a brand name or display a website address. - -Go to Auth > Templates page in the Supabase dashboard (https://supabase.com/dashboard/project/YOUR-PROJECT-REF/auth/templates). - -Use the variable `.Code` in the template to display the code. - -### Using OTP with password based logins - -In this use scenario we'll be using the user's mobile phone number as an alternative to an email address when signing up along with a password. You may want to think hard about the permanency of this however. It is not uncommon for mobile phone numbers to be recycled by phone networks when users cancel their phone contracts or move countries, therefore granting access to the user's account to whoever takes over the phone number in the future. - -Using supabase-js on the client you'll want to use the same `signUp` method that you'd use for email based sign ups, but with the `phone` param instead of the `email param`: - - - - -```js -let { user, error } = await supabase.auth.signUp({ - phone: '491512223334444', - password: 'some-password', -}) -``` - - - - -```bash -curl -X POST 'https://xxx.supabase.co/auth/v1/signup' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "phone": "491512223334444", - "password": "some-password" -}' -``` - - - - -The user will now receive an SMS with a 6-digit pin that you will need to receive from them within 60-seconds before they can login to their account. - -You should present a form to the user so they can input the 6 digit pin, then send it along with the phone number to `verifyOTP`: - - - - -```js -let { session, error } = await supabase.auth.verifyOTP({ - phone: '491512223334444', - token: '123456', -}) -``` - - - - -```bash -curl -X POST 'https://xxx.supabase.co/auth/v1/verify' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "type": "sms", - "phone": "491512223334444", - "token": "123456" -}' -``` - - - - -If successful the user will now be logged in and you should receive a valid session like: - -```json -{ - "access_token": "eyJxxx...", - "token_type": "bearer", - "expires_in": 3600, - "refresh_token": "yyy..." -} -``` - -The access token can be sent in the Authorization header as a Bearer token for any CRUD operations on supabase-js. See our guide on [Row Level Security](/docs/guides/auth#row-level-security) for more info on restricting access on a user basis. - -Also now that the mobile has been verified, the user can use the number and password to sign in without needing to verify their number each time: - - - - -```js -let { user, error } = await supabase.auth.signInWithPassword({ - phone: '491512223334444', - password: 'some-password', -}) -``` - - - - -```bash -curl -X POST 'https://xxx.supabase.co/auth/v1/token?grant_type=password' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "phone": "491512223334444", - "password": "some-password" -}' -``` - - - - -### Using OTP as a passwordless sign-in mechanism - -In this scenario you are granting your user's the ability to login to their account without needing to set a password on their account, all they have to do to log in is verify their mobile each time using the OTP. - -In javascript we can use the `signIn` method with a single parameter: `phone` - - - - -```js -let { user, error } = await supabase.auth.signInWithOtp({ - phone: '491512223334444', -}) -``` - - - - -```bash -curl -X POST 'https://xxx.supabase.co/auth/v1/otp' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "phone": "491512223334444" -}' -``` - - - - -The second step is the same as the previous section, you need to collect the 6-digit pin from the user and pass it along with their phone number to the verify method: - - - - -```js -let { session, error } = await supabase.auth.verifyOTP({ - phone: '491512223334444', - token: '123456', -}) -``` - - - - -```bash -curl -X POST 'https://xxx.supabase.co/auth/v1/verify' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "type": "sms", - "phone": "491512223334444", - "token": "123456" -}' -``` - - - - -and the response should also be the same as above: - -```json -{ - "access_token": "eyJxxx...", - "token_type": "bearer", - "expires_in": 3600, - "refresh_token": "yyy..." -} -``` - -The user does not have a password therefore will need to sign in via this method each time they want to access your service. - -## Resources - -- [Vonage Signup](https://dashboard.nexmo.com/sign-up) -- [Supabase Dashboard](https://supabase.com/dashboard) -- [Supabase Row Level Security](/docs/guides/auth#row-level-security) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/quickstarts/nextjs.mdx b/apps/docs/pages/guides/auth/quickstarts/nextjs.mdx deleted file mode 100644 index f57d831b083c4..0000000000000 --- a/apps/docs/pages/guides/auth/quickstarts/nextjs.mdx +++ /dev/null @@ -1,94 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import StepHikeCompact from '~/components/StepHikeCompact' - -export const meta = { - title: 'Use Supabase Auth with Next.js', - subtitle: 'Learn how to configure Supabase Auth for the Next.js App Router.', - breadcrumb: 'Auth Quickstarts', -} - - - - - - - [Launch a new project](https://supabase.com/dashboard) in the Supabase Dashboard. - - Your new database has a table for storing your users. You can see that this table is currently empty by running some SQL in the [SQL Editor](https://supabase.com/dashboard/project/_/sql). - - - - - - ```sql SQL_EDITOR - select * from auth.users; - ```` - - - - - - - - - - Use the `create-next-app` command and the `with-supabase` template, to create a Next.js app pre-configured with: - - [Supabase Auth](https://supabase.com/docs/guides/auth/auth-helpers/nextjs) - - [TypeScript](https://www.typescriptlang.org/) - - [Tailwind CSS](https://tailwindcss.com/) - - - - - - ```bash Terminal - npx create-next-app -e with-supabase my-app && cd my-app - ``` - - - - - - - - - Rename `.env.local.example` to `.env.local` and populate with [your project's URL and Anon Key](https://supabase.com/dashboard/project/_/settings/api). - - - - - - ```text .env.local - NEXT_PUBLIC_SUPABASE_URL=your-project-url - NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key - ``` - - - - - - - - - Start the development server, go to http://localhost:3000 in a browser, and you should see the contents of `app/page.tsx`. - - To Sign Up a new user, navigate to http://localhost:3000/login, and click `Sign Up Now`. - - Check out the [Supabase Auth docs](https://supabase.com/docs/guides/auth#authentication) for more authentication methods. - - - - - - ```bash Terminal - npm run dev - ``` - - - - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/quickstarts/react.mdx b/apps/docs/pages/guides/auth/quickstarts/react.mdx deleted file mode 100644 index 8a852e454fd65..0000000000000 --- a/apps/docs/pages/guides/auth/quickstarts/react.mdx +++ /dev/null @@ -1,138 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import StepHikeCompact from '~/components/StepHikeCompact' - -export const meta = { - title: 'Use Supabase Auth with React', - subtitle: 'Learn how to use Supabase Auth with React.js.', - breadcrumb: 'Auth Quickstarts', -} - - - - - - - [Launch a new project](https://supabase.com/dashboard) in the Supabase Dashboard. - - Your new database has a table for storing your users. You can see that this table is currently empty by running some SQL in the [SQL Editor](https://supabase.com/dashboard/project/_/sql). - - - - - - ```sql SQL_EDITOR - select * from auth.users; - ```` - - - - - - - - - - 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 Supabase's `auth-ui-react` library which provides a convenient interface for working with Supabase Auth from a React app. - - Navigate to the React app and install the Supabase libraries. - - - - - - ```bash Terminal - cd my-app && npm install @supabase/supabase-js @supabase/auth-ui-react @supabase/auth-ui-shared - ``` - - - - - - - - - In `index.js`, create a Supabase client using your [Project URL and public API (anon) key](https://supabase.com/dashboard/project/_/settings/api). - - You can configure the Auth component to display whenever there is no session inside `supabase.auth.getSession()` - - - - - - ```js src/index.js - import './index.css' - import { useState, useEffect } from 'react' - import { createClient } from '@supabase/supabase-js' - import { Auth } from '@supabase/auth-ui-react' - import { ThemeSupa } from '@supabase/auth-ui-shared' - - const supabase = createClient('https://.supabase.co', '') - - export default function App() { - const [session, setSession] = useState(null) - - useEffect(() => { - supabase.auth.getSession().then(({ data: { session } }) => { - setSession(session) - }) - - const { - data: { subscription }, - } = supabase.auth.onAuthStateChange((_event, session) => { - setSession(session) - }) - - return () => subscription.unsubscribe() - }, []) - - if (!session) { - return () - } - else { - return (
    Logged in!
    ) - } - } - ``` - -
    - -
    - - - - - Start the app, go to http://localhost:3000 in a browser, and open the browser console and you should be able to log in. - - - - - - ```bash Terminal - npm start - ``` - - - - -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/row-level-security.mdx b/apps/docs/pages/guides/auth/row-level-security.mdx deleted file mode 100644 index 624cb0186ceee..0000000000000 --- a/apps/docs/pages/guides/auth/row-level-security.mdx +++ /dev/null @@ -1,289 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'row-level-security', - title: 'Row Level Security', - description: 'Using Row Level Security with Supabase Auth.', - subtitle: 'Using Row Level Security with Supabase Auth.', - tocVideo: 'Ow_Uzedfohk', -} - -Supabase Auth is designed to work perfectly with [Postgres Row Level Security](/docs/guides/database/postgres/row-level-security) (RLS). - -You can use RLS to create [Policies](https://www.postgresql.org/docs/current/sql-createpolicy.html) that are incredibly powerful and flexible, allowing you to write complex SQL rules which fit your unique business needs. - -
    - -
    - -## Policies - -Policies are easy to understand once you get the hang of them. Each policy is attached to a table, and the policy is executed every time a table is accessed. You can just think of them as adding a `WHERE` clause to every query. For example a policy like this ... - -```sql -create policy "Individuals can view their own todos." -on todos for select -using ( auth.uid() = user_id ); -``` - -.. would translate to this whenever a user tries to select from the todos table: - -```sql -select * -from todos -where auth.uid() = todos.user_id; -- Policy is implicitly added. -``` - -## Authenticated and anonymous roles - -Supabase Auth maps every request to one of the roles: - -- `anon`: an anonymous request (the user is not logged in) -- `authenticated`: an authenticated request (the user is logged in) - -These are actually [Postgres Roles](/docs/guides/database/postgres/roles), and so they have significant value for the [performance](/docs/guides/database/postgres/row-level-security#specify-roles-in-your-policies) of your RLS Policies. You can use these roles within your Policies using the `TO` clause: - -```sql -create policy "Profiles are viewable by everyone" -on profiles for select -to authenticated, anon -using ( true ); - --- OR - -create policy "Public profiles are viewable only by authenticated users" -on profiles for select -to authenticated -using ( true ); -``` - - -## Helper Functions - -Supabase provides some helper functions that make it easier to write Policies. - -### `auth.uid()` - -Returns the ID of the user making the request. - -### `auth.jwt()` - -Returns the JWT of the user making the request. Anything that you store in the user's `app_metadata` column or the `user_metadata` column will be accessible using this function. It's important to know the distinction between these two: - -- `user_metadata` - can be updated by the authenticated user using the `supabase.auth.update()` function. It is not a good place to store authorization data. -- `app_metadata` - cannot be updated by the user, so it's a good place to store authorization data. - -The `auth.jwt()` function is extremely versatile. For example, if you store some team data inside `app_metadata`, you can use it to determine whether a particular user belongs to a team. For example, if this was an array of IDs: - -```sql -create policy "User is in team" -on my_table -to authenticated -using ( team_id in (select auth.jwt() -> 'app_metadata' -> 'teams')); -``` - -{/* prettier-ignore */} - -Keep in mind that a JWT is not always "fresh". In the example above, even if you remove a user from a team and update the `app_metadata` field, that will not be reflected using `auth.jwt()` until the user's JWT is refreshed. - -Also, if you are using Cookies for Auth, then you must be mindful of the JWT size. Some browsers are limited to 4096 bytes for each cookie, and so the total size of your JWT should be small enough to fit inside this limitation. - - -## Important considerations - -We recommend reading the [Row Level Security](/docs/guides/database/postgres/row-level-security) guide in the database section to learn more about Postgres RLS. When using Postgres on Supabase there are some important things to keep in mind to maintain data security. - -### Never use a service key on the client - -Supabase provides special "Service" keys, which can be used to bypass RLS. These should never be used in the browser or exposed to customers, but they are useful for administrative tasks. - - - -Supabase will adhere to the RLS policy of the signed-in user, even if the client library is initialized with a Service Key. - - - -### Always enable RLS on public tables - -You should _always_ enable RLS on tables created in a public schema. This is considered "default safe". Unfortunately this is not enabled by default on Postgres, so you will need to keep this in mind - especially if you are using the SQL Editor or database migrations. RLS is already enabled by default if you create a table using the Table Editor. If you want to allow public access to a table, just add a Policy with `true`: - -```sql -create policy "Allow public access" -on my_table for select -using ( true ); -``` - -### Using external authorization systems - -If you want to use another authorization method for your applications that's also fine. Supabase is "just Postgres", so if your application works with Postgres, then it also works with Supabase. If you take this path, don't put your tables in the `public` schema - instead create a new schema for your tables and functions: - -```sql -create schema private; - -create table private.employees ( - id serial primary key, - name text -); -``` - -If you do put anything in the `public` schema, make sure to enable RLS (you don't need to add any policies): - -```sql -create table profiles ( - id serial primary key, - email text -); - -alter table profiles enable row level security; -``` - -This makes the tables inaccessible via the [APIs](/docs/guides/api). - - -## Usage - -Row Level Security is extremely versatile, since it simply uses SQL to express access rules for your data. - -### Using functions - -You can use any Postgres function inside a Policy. The [Helper Functions](#helper-functions) above are simply Postgres functions we've made available in the `auth` schema. This is an example which: - -1. Creates a table called `profiles` in the public schema (default schema). -2. Enables RLS. -3. Creates a policy which allows logged in users to update their own data, using the `auth.uid()` function. - -```sql --- 1. Create table -create table profiles ( - id uuid references auth.users, - avatar_url text -); - --- 2. Enable RLS -alter table profiles enable row level security; - --- 3. Create Policy -create policy "Users can update their own profiles" -on profiles for update -to authenticated -using ( - auth.uid() = id -); -``` - -**Note:** If you want to use [upsert](/docs/reference/javascript/upsert) operations, the user needs to have `INSERT`, `UPDATE`, and `SELECT` permissions. - -### Using joins - -Policies can include table joins. This example shows how you can query "external" tables to build more advanced rules. RLS policies are executed on every access of the table, so be careful to make sure that policies are efficient. - -```sql --- 1. Create a table of teams -create table teams ( - id serial primary key, - name text -); - --- 2. Create many to many join -create table members ( - team_id bigint references teams, - user_id uuid references auth.users -); - --- 3. Enable RLS -alter table teams enable row level security; - --- 4. Create Policy -create policy "Team members can update team details if they belong to the team" - on teams - for update using ( - auth.uid() in ( - select user_id from members - where team_id = id - ) - ); -``` - -An important note here: if RLS is also enabled for `members`, the user must also have read (`select`) access to members. Otherwise the joined query will not yield any results. Another alternative is to use a "security definer" function which is created by a user with [bypassrls](/docs/guides/database/postgres/row-level-security#specify-roles-in-your-policies) privileges. - -### Using security definer functions - -You can use `security definer` functions inside Policies. This is useful in a many-to-many relationships, and [important for performance](/docs/guides/database/postgres/row-level-security#use-security-definer-functions). Following the `teams` and `members` example from above, this example shows how you can use the security definer function in combination with a policy to control access to the `members` table. - -```sql --- 1. Create a table of teams -create table teams ( - id serial primary key, - name text -); - --- 2. Create many to many join -create table members ( - team_id bigint references teams, - user_id uuid references auth.users -); - --- 2. Enable RLS -alter table teams enable row level security; -alter table members enable row level security - --- 3. Create security definer function, which should be run as "postgres" -create function private.get_teams_for_authenticated_user() -returns setof bigint -language sql -security definer -set search_path = public -stable -as $$ - select team_id - from members - where user_id = auth.uid() -$$; - --- 4. Create Policy -create policy "Team members can update team members if they belong to the team." -on members -for all using ( - team_id in ( - select private.get_teams_for_authenticated_user() - ) -); -``` - -### Using built-in functions - -Postgres has a number of built-in functions. Most commonly you'll use `in()` and `any()` which will match a column's value to a list of values. - -You can use any Postgres functions inside Policies. For example, we can use the `right(string, n)` function to match email domains: - -```sql -create policy "Only Supabase staff can update the leaderboard" -on leaderboard -to authenticated -for update using ( - right(auth.jwt() ->> 'email', 13) = '@supabase.com' -); -``` - -### Using Multi-factor Authentication - -RLS can be [combined with Multi-Factor Authentication](/docs/guides/auth/auth-mfa#enforce-rules-for-mfa-logins) in Supabase Auth. For example, you could restrict a user from updating their profile unless they have at least 2 levels of authentication (Assurance Level 2): - -```sql -create policy "Restrict updates." -on profiles -as restrictive -for update -to authenticated using ( - auth.jwt()->>'aal' = 'aal2' -); -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/server-side-rendering.mdx b/apps/docs/pages/guides/auth/server-side-rendering.mdx deleted file mode 100644 index 7ba79d757f051..0000000000000 --- a/apps/docs/pages/guides/auth/server-side-rendering.mdx +++ /dev/null @@ -1,246 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { Accordion } from 'ui' - -export const meta = { - id: 'server-side-rendering', - title: 'Server-Side Rendering', - description: 'Render pages with user information on the server.', -} - -Single-page apps with server-side rendering (SSR) is a popular way to optimize rendering performance and leverage advanced caching strategies. - -Supabase Auth supports server-side rendering when you need access to user information, or your server needs to authorize API requests on behalf of your user to render content. - -When a user authenticates with Supabase Auth, two pieces of information are issued by the server: - -1. **Access token** in the form of a JWT. -2. **Refresh token** which is a randomly generated string. - -Most Supabase projects have their auth server listening on `.supabase.co/auth/v1`, thus the access token and refresh token are set as `sb-access-token` and `sb-refresh-token` cookies on the `.supabase.co` domain. - - - -These cookie names are for internal Supabase use only and may change without warning. They are included in this guide for illustration purposes only. - - - -Web browsers limit access to cookies across domains, consistent with the [Same-Origin Policy (SOP)](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy). - -Your web application cannot access these cookies, nor will these cookies be sent to your application's server. - -## Understanding the authentication flow - -When you call one of the `signIn` methods, the client library running in the browser sends the request to the Supabase Auth server. The Auth server determines whether to verify a phone number, email and password combination, a Magic Link, or use a social login (if you have any setup in your project). - -Upon successful verification of the identity of the user, the Supabase Auth server redirects the user back to your single-page app. - - - -You can configure [redirects URLs](https://supabase.com/dashboard/project/_/auth/url-configuration) in the Supabase Dashboard. You can use [wildcard match patterns](/docs/guides/auth#redirect-urls-and-wildcards) like `*` and `**` to allow redirects to different forms of URLs. - - - -Supabase Auth supports two authentication flows: **Implicit** and **PKCE**. The **PKCE** flow is generally preferred when on the server. It introduces a few additional steps which guard a against replay and URL capture attacks. Unlike the implicit flow, it also allows users to access the `access_token` and `refresh_token` on the server. - - -
    - Implicit} - id={`ssr-implicit-flow`} - > - - When using the implicit flow, a redirect URL will be returned with the following structure: - ``` - https://yourapp.com/...#access_token=<...>&refresh_token=<...>&... - ``` - - The first access and refresh tokens after a successful verification are contained in the URL fragment (anything after the `#` sign) of the redirect location. This is intentional and not configurable. - - The client libraries are designed to listen for this type of URL, extract the access token, refresh token and some extra information from it, and finally persist it in local storage for further use by the library and your app. - - - - Web browsers do not send the URL fragment to the server they're making the request to. Since you may not be hosting the single-page app on a server under your direct control (such as on GitHub Pages or other freemium hosting providers), we want to prevent hosting services from getting access to your user's authorization credentials by default. - - Even if the server is under your direct control, `GET` requests and their full URLs are often logged. This approach also avoids leaking credentials in request or access logs. If you wish to obtain the `access_token` and `refresh_token` on a server, please consider using the PKCE flow. - - - - -
    -
    - PKCE} - id={`ssr-pkce-flow`} - > - - When using the PKCE flow, a redirect URL will be returned with the following structure: - ``` - https://yourapp.com/...?code=<...> - ``` - The `code` parameter is commonly known as the Auth Code and can be exchanged for an access token by calling `exchangeCodeForSession(code)`. - - - - For security purposes, the code has a validity of 5 minutes and can only be exchanged for an access token once. You will need to restart the authentication flow from scratch if you wish to obtain a new access token. - - - - As the flow is run server side, `localStorage` may not be available. You may configure the client library to use a custom storage adapter an alternate backing storage such as cookies by setting the `storage` option to an object with the following methods: - - ```js - const customStorageAdapter: SupportedStorage = { - getItem: (key) => { - if (!supportsLocalStorage()) { - // Configure alternate storage - return null - } - return globalThis.localStorage.getItem(key) - }, - setItem: (key, value) => { - if (!supportsLocalStorage()) { - // Configure alternate storage here - return - } - globalThis.localStorage.setItem(key, value) - }, - removeItem: (key) => { - if (!supportsLocalStorage()) { - // Configure alternate storage here - return - } - globalThis.localStorage.removeItem(key) - }, - } - ``` - You may also configure the client library to automatically exchange it for a session after a successful redirect. This can be done by setting the `detectSessionInUrl` option to `true`. - - Putting it all together, your client library initialization may look like this: - ```js - const supabase = createClient( - 'https://xyzcompany.supabase.co', - 'public-anon-key', - options: { - ... - auth: { - ... - detectSessionInUrl: true, - flowType: 'pkce', - storage: customStorageAdapter, - } - ... - } - ) - ``` - [Learn more](https://oauth.net/2/pkce/) about the PKCE flow. - - -
    -
    - -## Bringing it together - -As seen from the authentication flow, the initial request after successful login made by the browser to your app's server after user login **does not contain any information about the user**. This is because first the client-side JavaScript library must run before it makes the access and refresh token available to your server. - -It is very important to make sure that the redirect route right after login works without any server-side rendering. Other routes requiring authorization do not have the same limitation, provided you send the access and refresh tokens to your server. - -This is traditionally done by setting cookies. Here's an example you can add to the root of your application: - -```typescript -supabase.auth.onAuthStateChange((event, session) => { - if (event === 'SIGNED_OUT' || event === 'USER_DELETED') { - // delete cookies on sign out - const expires = new Date(0).toUTCString() - document.cookie = `my-access-token=; path=/; expires=${expires}; SameSite=Lax; secure` - document.cookie = `my-refresh-token=; path=/; expires=${expires}; SameSite=Lax; secure` - } else if (event === 'SIGNED_IN' || event === 'TOKEN_REFRESHED') { - const maxAge = 100 * 365 * 24 * 60 * 60 // 100 years, never expires - document.cookie = `my-access-token=${session.access_token}; path=/; max-age=${maxAge}; SameSite=Lax; secure` - document.cookie = `my-refresh-token=${session.refresh_token}; path=/; max-age=${maxAge}; SameSite=Lax; secure` - } -}) -``` - -This uses the standard [`document.cookie` API](https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie) to set cookies on all paths of your app's domain. All subsequent requests made by the browser to your app's server include the `my-access-token` and `my-refresh-token` cookies (the names of the cookies and additional parameters can be changed). - -In your server-side rendering code you can now access user and session information: - -```typescript -const refreshToken = req.cookies['my-refresh-token'] -const accessToken = req.cookies['my-access-token'] - -if (refreshToken && accessToken) { - await supabase.auth.setSession({ - refresh_token: refreshToken, - access_token: accessToken, - { - auth: { persistSession: false }, - } - }) -} else { - // make sure you handle this case! - throw new Error('User is not authenticated.') -} - -// returns user information -await supabase.auth.getUser() -``` - -Use `setSession({ access_token, refresh_token })` instead of `setSession(refreshToken)` or `getUser(accessToken)` as refresh tokens or access tokens alone do not properly identify a user session. - -Access tokens are valid only for a short amount of time. - -Even though refresh tokens are long-lived, there is no guarantee that a user has an active session. They may have logged out and your application failed to remove the `my-refresh-token` cookie, or some other failure occurred that left a stale refresh token in the browser. Furthermore, a refresh token can only be used a few seconds after it was first used. Only use a refresh token if the access token is about to expire, which will avoid the introduction of difficult to diagnose logout bugs in your app. - -A good practice is to handle unauthorized errors by deferring rendering the page in the browser instead of in the server. Some user information is contained in the access token though, so in certain cases, you may be able to use this potentially stale information to render a page. - -## Frequently Asked Questions - -### No session on the server side with Next.js route prefetching? - -When you use route prefetching in Next.js using `` components or the `Router.push()` APIs can send server-side requests before the browser processes the access and refresh tokens. This means that those requests may not have any cookies set and your server code will render unauthenticated content. - -To improve experience for your users, we recommend redirecting users to one specific page after sign-in that does not include any route prefetching from Next.js. Once the Supabase client library running in the browser has obtained the access and refresh tokens from the URL fragment, you can send users to any pages that use prefetching. - -### How do I make the cookies `HttpOnly`? - -This is not necessary. Both the access token and refresh token are designed to be passed around to different components in your application. The browser-based side of your application needs access to the refresh token to properly maintain a browser session anyway. - -### My server is getting invalid refresh token errors. What's going on? - -It is likely that the refresh token sent from the browser to your server is stale. Make sure the `onAuthStateChange` listener callback is free of bugs and is registered relatively early in your application's lifetime - -When you receive this error on the server-side, try to defer rendering to the browser where the client library can access an up-to-date refresh token and present the user with a better experience. - -### Should I set a shorter `Max-Age` parameter on the cookies? - -The `Max-Age` or `Expires` cookie parameters only control whether the browser sends the value to the server. Since a refresh token represents the long-lived authentication session of the user on that browser, setting a short `Max-Age` or `Expires` parameter on the cookies only results in a degraded user experience. - -The only way to ensure that a user has logged out or their session has ended is to get the user's details with `getUser()`. - -### What should I use for the `SameSite` property? - -Make sure you [understand the behavior of the property in different situations](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) as some properties can degrade the user experience. - -A good default is to use `Lax` which sends cookies when users are navigating to your site. Cookies typically require the `Secure` attribute, which only sends them over HTTPS. However, this can be a problem when developing on `localhost`. - -### Can I use server-side rendering with a CDN or cache? - -Yes, but you need to be careful to include at least the refresh token cookie value in the cache key. Otherwise you may be accidentally serving pages with data belonging to different users! - -Also be sure you set proper cache control headers. We recommend invalidating cache keys every hour or less. - -### Which authentication flows have PKCE support? - -At present, PKCE is supported on the Magic Link, OAuth, Sign Up, and Password Recovery routes. These correspond to the `signInWithOtp`, `signInWithOAuth`, `signUp`, and `resetPasswordForEmail` methods on the Supabase client library. When using PKCE with Phone and Email OTPs, there is no behavior change with respect to the implicit flow - an access token will be returned in the body when a request is successful. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/social-login.mdx b/apps/docs/pages/guides/auth/social-login.mdx deleted file mode 100644 index 8864a1b6dc900..0000000000000 --- a/apps/docs/pages/guides/auth/social-login.mdx +++ /dev/null @@ -1,55 +0,0 @@ -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: - -- **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. - -- **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. - -- **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} - - - -))} - -
    - -## Provider Tokens - -Once the OAuth flow completes, Supabase Auth will sign your user in. You will receive a copy of the provider token used in the OAuth flow in case you need to use it further. For example, you can use the Google provider token to access Google APIs on behalf of your user. - -Provider tokens are intentionally not stored in your project's database, however. This is because provider tokens give access to potentially sensitive user data in third-party systems. Different applications have different needs, and one application's OAuth scopes may be significantly more permissive than another. If you do want to use the provider token outside of the browser that completed the OAuth flow, you will have to send it manually to a secure server under your control. - -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 deleted file mode 100644 index ca8adae7b3b3f..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-apple.mdx +++ /dev/null @@ -1,171 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import AppleSecretGenerator from '~/components/AppleSecretGenerator' - -export const meta = { - id: 'auth-apple', - title: 'Login with Apple', - description: 'Use Sign in with Apple with Supabase', -} - -Supabase Auth supports using [Sign in with Apple](https://developer.apple.com/sign-in-with-apple/) on the web and in native apps for iOS, macOS, watchOS or tvOS. - -## Overview - -To support Sign in with Apple, you need to configure the [Apple provider in the Supabase dashboard](https://supabase.com/dashboard/project/_/auth/providers) for your project. - -There are three general ways to use Sign in with Apple, depending on the application you're trying to build: - -- Sign in on the web or in web-based apps - - Using an OAuth flow initiated by Supabase Auth using the [Sign in with Apple REST API](https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api). - - Using [Sign in with Apple JS](https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js) directly in the browser, usually suitable for websites. -- Sign in natively inside iOS, macOS, watchOS or tvOS apps using [Apple's Authentication Services](https://developer.apple.com/documentation/authenticationservices) - -In some cases you're able to use the OAuth flow within web-based native apps such as with [React Native](https://reactnative.dev), [Expo](https://expo.dev) or other similar frameworks. It is best practice to use native Sign in with Apple capabilities on those platforms instead. - -Before you can use Sign in with Apple, you need to obtain an [Apple Developer](https://developer.apple.com) account. - -## Using the OAuth flow for web - -Sign in with Apple's OAuth flow is designed for web or browser based sign in methods. It can be used on web-based apps as well as websites, though some users can benefit by using Sign in with Apple JS directly. - -Behind the scenes, Supabase Auth uses the [REST APIs](https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api) provided by Apple. - -To initiate sign in, you can use the `signInWithOAuth()` method from the Supabase JavaScript library: - -```ts -supabase.auth.signInWithOAuth({ - provider: 'apple', -}) -``` - -This call takes the user to Apple's consent screen. Once the flow ends, the user's profile information is exchanged and validated with Supabase Auth before it redirects back to your web application with an access and refresh token representing the user's session. - -### Configuration [#configuration-web] - -You will require the following information: - -1. Your Apple Developer account's **Team ID**, which is an alphanumeric string of 10 characters that uniquely identifies the developer of the app. It's often easily accessible in the upper right-side menu on the Apple Developer Console. -2. Register email sources for _Sign in with Apple for Email Communication_ which can be found in the [Services](https://developer.apple.com/account/resources/services/list) section of the Apple Developer Console. -3. An **App ID** which uniquely identifies the app you are building. You can create a new App ID from the [Identifiers](https://developer.apple.com/account/resources/identifiers/list/bundleId) section in the Apple Developer Console (use the filter menu in the upper right side to see all App IDs). These usually are a reverse domain name string, for example `com.example.app`. Make sure you configure Sign in with Apple once you create an App ID in the Capabilities list. At this time Supabase Auth does not support Server-to-Server notification endpoints, so you should leave that setting blank. (In the past App IDs were referred to as _bundle IDs._) -4. A **Services ID** which uniquely identifies the web services provided by the app you registered in the previous step. You can create a new Services ID from the [Identifiers](https://developer.apple.com/account/resources/identifiers/list/serviceId) section in the Apple Developer Console (use the filter menu in the upper right side to see all Services IDs). These usually are a reverse domain name string, for example `com.example.app.web`. -5. Configure Website URLs for the newly created **Services ID**. The web domain you should use is the domain your Supabase project is hosted on. This is usually `.supabase.co` while the redirect URL is `https://.supabase.co/auth/v1/callback`. -6. Create a signing **Key** in the [Keys](https://developer.apple.com/account/resources/authkeys/list) section of the Apple Developer Console. You can use this key to generate a secret key using the tool below, which is added to your Supabase project's Auth configuration. Make sure you safely store the `AuthKey_XXXXXXXXXX.p8` file. If you ever loose access to it, or make it public accidentally please revoke it from the Apple Developer Console and create a new one immediately. You will have to generate a new secret key using this file every 6 months, so make sure you schedule a recurring meeting in your calendar! -7. Finally, add the information you configured above to the [Apple provider configuration in the Supabase dashboard](https://supabase.com/dashboard/project/_/auth/providers). - - - Use this tool to generate a new Apple client secret. No keys leave your browser! - - - - -## Using native sign in - -Unlike the OAuth flow which requires the use of a web browser, the native Sign in with Apple flow on iOS, macOS, watchOS or tvOS uses the [operating system's built-in functionalities](https://developer.apple.com/documentation/authenticationservices) to prompt the user for consent. - -When the user provides consent, Apple issues an identity token (commonly abbreviated as ID token) that is then sent to your project's Supabase Auth server. When valid, a new user session is started by issuing an access and refresh token from Supabase Auth. - -If you are building an iOS or macOS app using Flutter, you can use [apple_sign_in](https://pub.dev/packages/sign_in_with_apple) package to quickly get the user's consent and sign them in to your Supabase project: - -```dart -import 'package:sign_in_with_apple/sign_in_with_apple.dart'; -import 'package:crypto/crypto.dart'; - -Future signInWithApple() { - - // Generate a random string - final rawNonce = _generateRandomString(); - final hashedNonce = sha256.convert(utf8.encode(rawNonce)).toString(); - - final credential = await SignInWithApple.getAppleIDCredential( - scopes: [ - AppleIDAuthorizationScopes.email, - AppleIDAuthorizationScopes.fullName, - ], - nonce: hashedNonce, - ); - - final idToken = credential.identityToken; - if (idToken == null) { - throw 'Could not find ID Token from generated credential.'; - } - - return signInWithIdToken( - provider: Provider.apple, - idToken: idToken, - nonce: rawNonce, - ); -} -``` - -In the Supabase JavaScript library, which you can use with web-based native frameworks like React Native or Expo, you can invoke this functionality like so: - -```ts -await supabase.auth.signInWithIdToken({ - provider: 'apple', - token: '', -}) -``` - -Please take a look at these open-source projects which may help you obtain an ID token directly from the OS: - -- [invertase/react-native-apple-authentication](https://github.com/invertase/react-native-apple-authentication) -- [Expo AppleAuthentication](https://docs.expo.dev/versions/latest/sdk/apple-authentication/) - -For apps written in Swift, please consult the [community maintained library](/docs/reference/swift/introduction). - -### Configuration [#configuration-native-app] - -Native sign in requires less configuration steps than OAuth flow. You will need to perform these steps: - -1. Have an **App ID** which uniquely identifies the app you are building. You can create a new App ID from the [Identifiers](https://developer.apple.com/account/resources/identifiers/list/bundleId) section in the Apple Developer Console (use the filter menu in the upper right side to see all App IDs). These usually are a reverse domain name string, for example `com.example.app`. Make sure you configure Sign in with Apple for the App ID you created or already have, in the Capabilities list. At this time Supabase Auth does not support Server-to-Server notification endpoints, so you should leave that setting blank. (In the past App IDs were referred to as _bundle IDs._) -2. Register all of the App IDs that will be using your Supabase project in the [Apple provider configuration in the Supabase dashboard](https://supabase.com/dashboard/project/_/auth/providers) under _Authorized Client IDs_. - -Note that if you're building a native app only, you do not need to setup the OAuth flow. - -## Using Sign in with Apple JS - -[Sign in with Apple JS](https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js) is an official Apple framework for authenticating Apple users on websites. Although it can be used in web-based apps, those use cases will benefit more with the OAuth flow described above. We recommend using this method on classic websites only. - -You can use the `signInWithIdToken()` method from the Supabase JavaScript library on the website to obtain an access and refresh token once the user has given consent using Sign in with Apple JS: - -```ts -function signIn() { - const data = await AppleID.auth.signIn() - - await supabase.auth.signInWithIdToken({ - provider: 'apple', - token: data.id_token, - nonce: '', - }) -} -``` - -Alternatively, you can use the `AppleIDSignInOnSuccess` event with the `usePopup` option: - -```ts -// Listen for authorization success. -document.addEventListener('AppleIDSignInOnSuccess', async (event) => { - await supabase.auth.signInWithIdToken({ - provider: 'apple', - token: event.data.id_token, - nonce: '', - }) -}) -``` - -Please make sure you request for the scope `name email` when initializing the library. - -### Configuration [#configuration-apple-js] - -To use Sign in with Apple JS you need to configure these options: - -1. Have an **App ID** which uniquely identifies the app you are building. You can create a new App ID from the [Identifiers](https://developer.apple.com/account/resources/identifiers/list/bundleId) section in the Apple Developer Console (use the filter menu in the upper right side to see all App IDs). These usually are a reverse domain name string, for example `com.example.app`. Make sure you configure Sign in with Apple for the App ID you created or already have, in the Capabilities list. At this time Supabase Auth does not support Server-to-Server notification endpoints, so you should leave that setting blank. (In the past App IDs were referred to as _bundle IDs._) -2. Obtain a **Services ID** attached to the App ID that uniquely identifies the website. Use this value as the client ID when initializing Sign in with Apple JS. You can create a new Services ID from the [Identifiers](https://developer.apple.com/account/resources/identifiers/list/serviceId) section in the Apple Developer Console (use the filter menu in the upper right side to see all Services IDs). These usually are a reverse domain name string, for example `com.example.app.website`. -3. Configure Website URLs for the newly created **Services ID**. The web domain you should use is the domain your website is hosted on. The redirect URL must also point to a page on your website that will receive the callback from Apple. -4. Register the Services ID you created to your project's [Apple provider configuration in the Supabase dashboard](https://supabase.com/dashboard/project/_/auth/providers) under _Authorized Client IDs_. - -Note that if you're using Sign in with Apple JS you do not need to configure the OAuth settings. - -export const Page = ({ children }) => - -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 deleted file mode 100644 index bf2e2ed469fe6..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-azure.mdx +++ /dev/null @@ -1,116 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-azure', - title: 'Login with Azure (Microsoft)', - description: 'Add Azure (Microsoft) OAuth to your Supabase project', -} - -To enable Azure (Microsoft) Auth for your project, you need to set up an Azure OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Azure OAuth consists of four broad steps: - -- Create an application under Azure Active Directory. -- Obtain a `Application (client) ID` with “Sign In with Azure” capabilities. This will be used as the `client id`. -- Create a `Secret ID` with “Sign In with Azure” capabilities. The value of the secret will be used as the `client secret`. -- Add the callback url of your application to the allowlist. - -## Access your Azure Developer account - -- Go to [portal.azure.com](https://portal.azure.com/#home). -- Login and select "Azure Active Directory" under the list of Azure Services. - -## Register an application - -- Under Azure Active Directory, select "App registrations" in the side panel. -- Select "New registration". -- Choose a name and select your preferred option for the supported account types. -- Specify the "Redirect URI". -- The redirect / callback URI should look like this: `https://.supabase.co/auth/v1/callback` -- Click "Register" at the bottom of the form. - -![Register an application.](/docs/img/guides/auth-azure/azure-register-app.png) - -## Obtain a Client ID - -This will serve as the `client_id` when you make API calls to authenticate the user. - -- Once your app has been registered, the client id can be found under the [list of app registrations](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps) under the column titled "Application (client) ID". - -![Obtain the client id](/docs/img/guides/auth-azure/azure-client-id.png) - -## Obtain a Secret ID - -This will serve as the `client_secret` when you make API calls to authenticate the user. - -- Click on the name of the app registered above. -- Under "Essentials", click on "Client credentials". -- Navigate to the "Client secrets" tab and select "New client secret". -- Enter a description and choose your preferred expiry for the secret. -- Once the secret is generated, save the `value` (not the secret ID). - -![Obtain the client secret](/docs/img/guides/auth-azure/azure-client-secret.png) - -## Obtain the Tenant URL - -This will allow your users to use your custom Azure login page when logging in. - -- Select the Directory (Tenant) ID value. -- The Azure Tenant URL should look like this: `https://login.microsoftonline.com/` - -![Obtain the tenant url](/docs/img/guides/auth-azure/azure-tenant-url.png) - -## Add login code to your client app - - - -Supabase Auth requires that Azure returns a valid email address. Therefore you must request the `email` scope in the `signIn` method above. - - - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `azure` as the `provider`: - -```js -async function signInWithAzure() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'azure', - options: { - scopes: 'email', - }, - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Obtain the provider refresh token - -Azure OAuth2.0 doesn't return the `provider_refresh_token` by default. If you need the `provider_refresh_token` returned, you will need to include the following scope: - -```js -async function signInWithAzure() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'azure', - options: { - scopes: 'offline_access', - }, - }) -} -``` - -## Resources - -- [Azure Developer Account](https://portal.azure.com) -- [GitHub Discussion](https://github.com/supabase/gotrue/pull/54#issuecomment-757043573) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index a1e9abf21d225..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-bitbucket.mdx +++ /dev/null @@ -1,77 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-bitbucket', - title: 'Login with Bitbucket', - description: 'Add Bitbucket OAuth to your Supabase project', -} - -To enable Bitbucket Auth for your project, you need to set up a BitBucket OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Setting up Bitbucket logins for your application consists of 3 parts: - -- Create and configure a Bitbucket OAuth Consumer on [Bitbucket](https://bitbucket.org) -- Add your Bitbucket OAuth Consumer keys to your [Supabase Project](https://supabase.com/dashboard) -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js) - -## Access your Bitbucket account - -- Go to [bitbucket.org](https://bitbucket.org/). -- Click on `Login` at the top right to log in. - -![Bitbucket Developer Portal.](/docs/img/guides/auth-bitbucket/bitbucket-portal.png) - -## Find your callback URL - - - -## Create a Bitbucket OAuth app - -- Click on your profile icon at the bottom left -- Click on `All Workspaces` -- Select a workspace and click on it to select it -- Click on `Settings` on the left -- Click on `OAuth consumers` on the left under `Apps and Features` (near the bottom) -- Click `Add Consumer` at the top -- Enter the name of your app under `Name` -- In `Callback URL`, type the callback URL of your app -- Check the permissions you need (Email, Read should be enough) -- Click `Save` at the bottom -- Click on your app name (the name of your new OAuth Consumer) -- Copy your `Key` (`client_key`) and `Secret` (`client_secret`) codes - -## Add your Bitbucket credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `bitbucket` as the `provider`: - -```js -async function signInWithBitbucket() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'bitbucket', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Bitbucket Account](https://bitbucket.org) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 3ee781c798fb8..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-discord.mdx +++ /dev/null @@ -1,79 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-discord', - title: 'Login with Discord', - description: 'Add Discord OAuth to your Supabase project', -} - -To enable Discord Auth for your project, you need to set up a Discord Application and add the Application OAuth credentials to your Supabase Dashboard. - -## Overview - -Setting up Discord logins for your application consists of 3 parts: - -- Create and configure a Discord Application [Discord Developer Portal](https://discord.com/developers) -- Add your Discord OAuth Consumer keys to your [Supabase Project](https://supabase.com/dashboard) -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js) - -## Access your Discord account - -- Go to [discord.com](https://discord.com/). -- Click on `Login` at the top right to log in. - -![Discord Portal.](/docs/img/guides/auth-discord/discord-portal.png) - -- Once logged in, go to [discord.com/developers](https://discord.com/developers). - -![Discord Portal.](/docs/img/guides/auth-discord/discord-developer-portal.png) - -## Find your callback URL - - - -## Create a Discord Application - -- Click on `New Application` at the top right. -- Enter the name of your application and click `Create`. -- Click on `OAuth2` under `Settings` in the left side panel. -- Click `Add Redirect` under `Redirects`. -- Type or paste your `callback URL` into the `Redirects` box. -- Click `Save Changes` at the bottom. -- Copy your `Client ID` and `Client Secret` under `Client information`. - -## Add your Discord credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `discord` as the `provider`: - -```js -async function signInWithDiscord() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'discord', - }) -} -``` - -If your user is already signed in, Discord prompts the user again for authorization. - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Discord Account](https://discord.com) -- [Discord Developer Portal](https://discord.com/developers) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 36db6d0bbee84..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-facebook.mdx +++ /dev/null @@ -1,96 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-facebook', - title: 'Login with Facebook', - description: 'Add Facebook OAuth to your Supabase project', -} - -To enable Facebook Auth for your project, you need to set up a Facebook OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Setting up Facebook logins for your application consists of 3 parts: - -- Create and configure a Facebook Application on the [Facebook Developers Site](https://developers.facebook.com) -- Add your Facebook keys to your [Supabase Project](https://supabase.com/dashboard) -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js) - -## Access your Facebook Developer account - -- Go to [developers.facebook.com](https://developers.facebook.com). -- Click on `Log In` at the top right to log in. - -![Facebook Developer Portal.](/docs/img/guides/auth-facebook/facebook-portal.png) - -## Create a Facebook App - -- Click on `My Apps` at the top right. -- Click `Create App` near the top right. -- Select your app type and click `Continue`. -- Fill in your app information, then click `Create App`. -- This should bring you to the screen: `Add Products to Your App`. (Alternatively you can click on `Add Product` in the left sidebar to get to this screen.) - - - -## Set up Facebook Login for your Facebook App - -From the `Add Products to your App` screen: - -- Click `Setup` under `Facebook Login` -- Skip the Quickstart screen, instead, in the left sidebar, click `Settings` under `Facebook Login` -- Enter your callback URI under `Valid OAuth Redirect URIs` on the `Facebook Login Settings` page -- Enter this in the `Valid OAuth Redirect URIs` box -- Click `Save Changes` at the bottom right - -Be aware that you have to set the right use case permissions to enable Third party applications to read the email address. To do so: - -Under `Build Your App`, click on `Use Cases` screen. From there, do the following steps: - -- Click the Edit button in `Authentication and Account Creation` on the right side. This action will lead to the other page. -- `public_profile` is set by default, so make sure it and `email` have status of **Ready for testing** in the redirected page. -- If not, click the **Add** button in email on right side. - -## Copy your Facebook App ID and Secret - -- Click `Settings / Basic` in the left sidebar -- Copy your App ID from the top of the `Basic Settings` page -- Under `App Secret` click `Show` then copy your secret -- Make sure all required fields are completed on this screen. - -## Enter your Facebook App ID and Secret into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `facebook` as the `provider`: - -```js -async function signInWithFacebook() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'facebook', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -Now, you should be able to login with Facebook and alert you to `Submit for Login Review` when users try to sign into your app. Follow the instructions there to make your app go live for full features and products. -You can read more about App Review [here](https://developers.facebook.com/docs/app-review/). - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Facebook Developers Dashboard](https://developers.facebook.com/) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-figma.mdx b/apps/docs/pages/guides/auth/social-login/auth-figma.mdx deleted file mode 100644 index 1b7ce0b5305fd..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-figma.mdx +++ /dev/null @@ -1,77 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-figma', - title: 'Login with Figma', - description: 'Add Figma OAuth to your Supabase project', -} - -To enable Figma Auth for your project, you need to set up a Figma OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Setting up Figma logins for your application consists of 3 parts: - -- Create and configure a Figma App on the [Figma Developers page](https://www.figma.com/developers). -- Add your Figma `client_id` and `client_secret` to your [Supabase Project](https://app.supabase.com). -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). - -## Access the Figma Developers page - -- Go to the [Figma Developers page](https://www.figma.com/developers) -- Click on `My apps` at the top right -- Log in (if necessary) - -![Figma Developers page](/docs/img/guides/auth-figma/figma_developers_page.png) - -## Find your callback URL - - - -## Create a Figma OAuth app - -- Enter your `App name`, `Website URL` and upload your app logo -- Click on `Add callback` -- Add your `Callback URL` -- Click on `Save` - -![Create Figma app](/docs/img/guides/auth-figma/figma_create_app.png) - -- Copy and save your newly-generated `Client ID` -- Copy and save your newly-generated `Client Secret` - -![Get Figma app credentials](/docs/img/guides/auth-figma/figma_app_credentials.png) - -## Enter your Figma credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `figma` as the `provider`: - -```js -async function signInWithFigma() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'figma', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Figma Developers page](https://www.figma.com/developers) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 8723612596262..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-github.mdx +++ /dev/null @@ -1,88 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-github', - title: 'Login with GitHub', - description: 'Add GitHub OAuth to your Supabase project', -} - -To enable GitHub Auth for your project, you need to set up a GitHub OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Setting up GitHub logins for your application consists of 3 parts: - -- Create and configure a GitHub OAuth App on [GitHub](https://github.com) -- Add your GitHub OAuth keys to your [Supabase Project](https://supabase.com/dashboard) -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js) - -## Access your GitHub account - -- Go to [github.com](https://github.com). -- Click on `Sign In` at the top right to log in. - -![GitHub Developer Portal.](/docs/img/guides/auth-github/github-portal.png) - -## Create a GitHub Oauth App - -Go to the [GitHub Developer Settings](https://github.com/settings/developers) page: - -- Click on your profile photo at the top right -- Click Settings near the bottom of the menu -- In the left sidebar, click `Developer settings` (near the bottom) -- In the left sidebar, click `OAuth Apps` - -## Find your callback URL - - - -## Register a new OAuth application on Github. - -- Navigate to `Settings`/`Developer settings`/`OAuth Apps` -- Click `Register a new application`. If you've created an app before, click `New OAuth App` here. -- In `Application name`, type the name of your app. -- In `Homepage URL`, type the full URL to your app's website. -- In `Authorization callback URL`, type the callback URL of your app. -- Enter the URL in the `Valid OAuth Redirect URIs` box. -- Click `Save Changes` at the bottom right. -- Click `Register Application`. - -Copy your new OAuth credentials - -- Copy and save your `Client ID`. -- Click `Generate a new client secret`. -- Copy and save your `Client secret`. - -## Enter your GitHub credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `github` as the `provider`: - -```js -async function signInWithGitHub() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'github', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [GitHub Developer Settings](https://github.com/settings/developers) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 5d4801f4c41b1..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-gitlab.mdx +++ /dev/null @@ -1,74 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-gitlab', - title: 'Login with GitLab', - description: 'Add GitLab OAuth to your Supabase project', -} - -To enable GitLab Auth for your project, you need to set up a GitLab OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Setting up GitLab logins for your application consists of 3 parts: - -- Create and configure a GitLab Application on [GitLab](https://gitlab.com) -- Add your GitLab Application keys to your [Supabase Project](https://supabase.com/dashboard) -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js) - -## Access your GitLab account - -- Go to [gitlab.com](https://gitlab.com). -- Click on `Login` at the top right to log in. - -![GitLab Developer Portal.](/docs/img/guides/auth-gitlab/gitlab-portal.png) - -## Find your callback URL - - - -## Create your GitLab Application - -- Click on your `profile logo` (avatar) in the top-right corner. -- Select `Edit profile`. -- In the left sidebar, select Applications. -- Enter the name of the application. -- In the `Redirect URI` box, type the callback URL of your app. -- Check the box next to `Confidential` (make sure it is checked). -- Check the scope named `read_user` (this is the only required scope). -- Click `Save Application` at the bottom. -- Copy and save your `Application ID` (`client_id`) and `Secret` (`client_secret`) which you'll need later. - -## Add your GitLab credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `gitlab` as the `provider`: - -```js -async function signInWithGitLab() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'gitlab', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [GitLab Account](https://gitlab.com) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index b066163eefb4f..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-google.mdx +++ /dev/null @@ -1,330 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-google', - title: 'Login with Google', - description: 'Use Sign in with Google on the web, in native apps or with Chrome extensions', -} - -Supabase Auth supports Sign in with Google on the web, native Android applications and Chrome extensions. - -## Overview - -To support Sign in with Google you need to configure the [Google provider in the Supabase dashboard](https://supabase.com/dashboard/project/_/auth/providers) for your project. - -There are three general ways to use Sign in with Google, depending on the application you're building: - -- Sign in on the web or in web-based apps - - Using an OAuth flow initiated by Supabase Auth using [Google Identity Authorization with OAuth 2.0 for Web Server Applications](https://developers.google.com/identity/protocols/oauth2/web-server). - - Using a [personalized sign-in button](https://developers.google.com/identity/gsi/web/guides/personalized-button) or [One Tap](https://developers.google.com/identity/gsi/web/guides/display-google-one-tap) and [automatic sign-in](https://developers.google.com/identity/gsi/web/guides/automatic-sign-in-sign-out) for users already logged in to their Google account. -- Sign in in native Android apps and Chrome extensions - -In some cases you're able to use the OAuth flow within web-based native apps such as with React Native, Expo or other similar frameworks. It is best practice to use native Sign in with Google capabilities whenever possible. - -Before you can use Sign in with Google, you need to obtain a [Google Cloud Platform](https://console.cloud.google.com/home/dashboard) account and have a project ready or create a new one. - -## Using the OAuth flow for the web - -Sign in with Google's OAuth flow is designed for web or browser based sign in methods. It can be used in web-based apps as well as in websites, though sometimes it is worthwhile considering using One Tap login directly. - -Behind the scenes, Supabase Auth uses the [Google OAuth 2.0 APIs](https://developers.google.com/identity/openid-connect/openid-connect), which are OpenID Connect certified, to perform the authentication. - -To initiate sign in, you can use the `signInWithOAuth()` method from the Supabase JavaScript library: - -```ts -supabase.auth.signInWithOAuth({ - provider: 'google', -}) -``` - -This call takes the user to Google's consent screen. When the flow ends, the user's profile information is exchanged and validated with Supabase Auth before it redirects back to your web application with an access and refresh token representing the user's session. - -You can additionally extract the `provider_token` from the session (on initial login only) which is the OAuth 2.0 access token issued by Google that grants your application access to the Google services for the authenticated users. Please store this token in local storage, cookies or in your database or server. - -Google does not send out a refresh token by default, so you will need to pass parameters like these to `signInWithOAuth()` in order to extract the `provider_refresh_token`: - -```ts -const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'google', - options: { - queryParams: { - access_type: 'offline', - prompt: 'consent', - }, - }, -}) -``` - -### Configuration [#configuration-web] - -To use the OAuth 2.0 flow, you will require the following information: - -1. Obtain OAuth credentials for your Google Cloud project in the [Credentials](https://console.developers.google.com/apis/credentials) page of the console. When creating a new credential, choose _Web application_. In _Authorized redirect URIs_ enter `https://.supabase.co/auth/v1/callback`. This URL will be seen by your users, and you can customize it by configuring [custom domains](/docs/guides/platform/custom-domains). -2. Configure the [OAuth Consent Screen](https://console.cloud.google.com/apis/credentials/consent). This information is shown to the user when giving consent to your app. Within _Authorized domains_ make sure you add your Supabase project's domain `.supabase.co`. Configure the non-sensitive scopes by making sure the following ones are selected: `.../auth/userinfo.email`, `.../auth/userinfo.profile`, `openid`. If you're selecting other sensitive scopes, your app may require additional verification. In those cases, it's best to use [custom domains](/docs/guides/platform/custom-domains). -3. Finally, add the client ID and secret from step 1 in the [Google provider on the Supabase Dashboard](https://supabase.com/dashboard/project/_/auth/providers). - -## Using native sign in - -Unlike the OAuth flow which requires the use of a web browser, the native Sign in with Google flow on Android uses the [operating system's built-in functionalities](https://developers.google.com/android/reference/com/google/android/gms/auth/api/identity/package-summary) to prompt the user for consent. Note that native sign-in has been rebranded as _One Tap sign-in on Android_ by Google, which you should not confuse with _One Tap sign in for web_, as mentioned below. - -When the user provides consent, Google issues an identity token (commonly abbreviated as ID token) that is then sent to your project's Supabase Auth server. When valid, a new user session is started by issuing an access and refresh token from Supabase Auth. - -If you are building a Flutter app, you can use [flutter_appauth](https://pub.dev/packages/flutter_appauth) package to sign a user into your Supabase project: - -````dart -import 'dart:convert'; -import 'dart:math'; -import 'package:crypto/crypto.dart'; -import 'package:flutter_appauth/flutter_appauth.dart'; -import 'package:supabase_flutter/supabase_flutter.dart'; - -/// Function to generate a random 16 character string. -String _generateRandomString() { - final random = Random.secure(); - return base64Url.encode(List.generate(16, (_) => random.nextInt(256))); -} - -Future signInWithGoogle() { - // Just a random string - final rawNonce = _generateRandomString(); - final hashedNonce = - sha256.convert(utf8.encode(rawNonce)).toString(); - - /// TODO: update the client ID with your own - /// - /// Client ID that you registered with Google Cloud. - /// You will have two different values for iOS and Android. - const clientId = 'YOUR_CLIENT_ID_HERE'; - - /// reverse DNS form of the client ID + `:/` is set as the redirect URL - final redirectUrl = '${clientId.split('.').reversed.join('.')}:/'; - - /// Fixed value for google login - const discoveryUrl = - 'https://accounts.google.com/.well-known/openid-configuration'; - - final appAuth = FlutterAppAuth(); - - // authorize the user by opening the consent page - final result = await appAuth.authorize( - AuthorizationRequest( - clientId, - redirectUrl, - discoveryUrl: discoveryUrl, - nonce: hashedNonce, - scopes: [ - 'openid', - 'email', - ], - ), - ); - - if (result == null) { - throw 'Could not find AuthorizationResponse after authorizing'; - } - - // Request the access and id token to google - final tokenResult = await appAuth.token( - TokenRequest( - clientId, - redirectUrl, - authorizationCode: result.authorizationCode, - discoveryUrl: discoveryUrl, - codeVerifier: result.codeVerifier, - nonce: result.nonce, - scopes: [ - 'openid', - 'email', - ], - ), - ); - - final idToken = tokenResult?.idToken; - - if (idToken == null) { - throw 'Could not find idToken from the token response'; - } - - return supabase.auth.signInWithIdToken( - provider: Provider.google, - idToken: idToken, - accessToken: tokenResponse?.accessToken, - nonce: rawNonce, - ); -} -``` - -In the Supabase JavaScript library, which you can use with web-based native frameworks like React Native or Expo, you can invoke this functionality like so: - -```ts -await supabase.auth.signInWithIdToken({ - provider: 'google', - token: '', - access_token: '' -}) -```` - -Please take a look at these open-source projects which may help you obtain an ID token directly from the OS: - -- [react-native-google-signin/google-signin](https://github.com/react-native-google-signin/google-signin). - -For apps written in Kotlin, please consult the [community maintained library](/docs/reference/kotlin/introduction). - -### Configuration [#configuration-native-app] - -1. Configure OAuth credentials for your Google Cloud project in the [Credentials](https://console.cloud.google.com/apis/credentials) page of the console. When creating a new OAuth client ID, choose _Android_ or _iOS_ depending on the mobile operating system your app is built for. - -- For Android, use the instructions on screen to provide the SHA-1 certificate fingerprint used to sign your Android app. -- For iOS, use the instructions on screen to provide the app Bundle ID, and App Store ID and Team ID if the app is already published on the Apple AppStore. - -2. Configure the [OAuth Consent Screen](https://console.cloud.google.com/apis/credentials/consent). This information is shown to the user when giving consent to your app. In particular, make sure you have set up links to your app's privacy policy and terms of service. -3. Finally, add the client ID from step 1 in the [Google provider on the Supabase Dashboard](https://supabase.com/dashboard/project/_/auth/providers), under _Authorized Client IDs_. - -Note that you do not have to configure the OAuth flow in the Supabase Dashboard in order to use native sign in. - -## Using native sign in for Chrome extensions - -Similar to the native sign in for Android, you can use the Chrome browser's [identity APIs](https://developer.chrome.com/docs/extensions/reference/identity/) to launch an authentication flow. - -First, you need to configure your `manifest.json` file like so: - -```json -{ - "permissions": ["identity"], - "oauth2": { - "client_id": "", - "scopes": ["openid", "email", "profile"] - } -} -``` - -Then you should call the [`chrome.identity.launchWebAuthFlow()`](https://developer.chrome.com/docs/extensions/reference/identity/#method-launchWebAuthFlow) function to trigger the sign in flow. On success, call the `supabase.auth.signInWithIdToken()` function to complete sign in with your Supabase project. - -```ts -const manifest = chrome.runtime.getManifest() - -const url = new URL('https://accounts.google.com/o/oauth2/auth') - -url.searchParams.set('client_id', manifest.oauth2.client_id) -url.searchParams.set('response_type', 'id_token') -url.searchParams.set('access_type', 'offline') -url.searchParams.set('redirect_uri', `https://${chrome.runtime.id}.chromiumapp.org`) -url.searchParams.set('scope', manifest.oauth2.scopes.join(' ')) - -chrome.identity.launchWebAuthFlow( - { - url: url.href, - interactive: true, - }, - async (redirectedTo) => { - if (chrome.runtime.lastError) { - // auth was not successful - } else { - // auth was successful, extract the ID token from the redirectedTo URL - const url = new URL(redirectedTo) - const params = new URLSearchParams(url.hash) - - const { data, error } = await supabase.auth.signInWithIdToken({ - provider: 'google', - token: params.get('id_token'), - }) - } - } -) -``` - -### Configuration [#configuration-chrome-extension] - -You will need to configure a client ID for your Chrome extension: - -1. Configure OAuth credentials for your Google Cloud project in the [Credentials](https://console.cloud.google.com/apis/credentials) page of the console. When creating a new OAuth client ID, choose _Chrome extension_ for the application type. For _Item ID_ provide the unique ID of your Chrome extension. You can get this by calling `chrome.runtime.id` within the extension, or from the Web Store URL of the extension. For example, the [Google Translate extension](https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb) has the Web Store URL `https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb` and the last part `aapbdbdomjkkjkaonfhkkikfgjllcleb` is its unique ID. -2. Configure the [OAuth Consent Screen](https://console.cloud.google.com/apis/credentials/consent). This information is shown to the user when giving consent to your app. -3. Finally, add the client ID from step 1 in the [Google provider on the Supabase Dashboard](https://supabase.com/dashboard/project/_/auth/providers), under _Authorized Client IDs_. - -Note that you do not have to configure the OAuth flow in the Supabase Dashboard to sign in with Google inside Chrome extensions. - -## Using personalized sign-in buttons, One Tap or automatic sign-in - -Most web apps and websites can utilize Google's [personalized sign-in buttons](https://developers.google.com/identity/gsi/web/guides/personalized-button), [One Tap](https://developers.google.com/identity/gsi/web/guides/features) or [automatic sign-in](https://developers.google.com/identity/gsi/web/guides/automatic-sign-in-sign-out) for the best user experience. - -Under the hood, these sign in methods end with an identity token being issued by [Sign in with Google for Web](https://developers.google.com/identity/gsi/web/guides/overview). You can then use the `supabase.auth.signInWithIdToken()` method to immediately issue an access and refresh tokens for the user, without needing to build any additional UIs or flows. - -To get started, you can use the [HTML Code Generator](https://developers.google.com/identity/gsi/web/tools/configurator) to customize the look, feel, features and behavior of the Sign in with Google button. Make sure you pick the _Swap to JavaScript callback_ option and name the function that will receive a [`CredentialResponse`](https://developers.google.com/identity/gsi/web/reference/js-reference#CredentialResponse) when sign in completes. - -For example, this HTML code shows a typical Sign in with Google button: - -```html -
    - - -``` - -When the user signs in, the `handleSignInWithGoogle` function will be called: - -```ts -async function handleSignInWithGoogle(response) { - const { data, error } = await supabase.auth.signInWithIdToken({ - token: response.credential, - nonce: 'NONCE', // must be the same one as provided in data-nonce (if any) - }) -} -``` - -Use of nonce is recommended, though optional. Make sure each nonce is generated randomly and available both in the `data-nonce` attribute as well as in the `handleSignInWithGoogle` callback function; otherwise the ID token will not be accepted. - -### Important Note on Nonce Validation - -Supabase Auth expects the nonce in Google's ID token to be hashed (specifically with SHA-256 and represented as a hexadecimal string). - -To succeed with nonce validation, you will need to provide a hashed version of the nonce to Google and the non-hashed version to the `signInWithIdToken` method. - -The following code snippet provides an example of how to create both versions in a web application: - -```js -// Adapted from https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string - -import crypto from 'crypto' - -// ... - -const nonce = crypto.randomBytes(16).toString('base64') // Generate a random nonce -const encoder = new TextEncoder() -const encodedNonce = encoder.encode(nonce) // Encode the nonce -const hash = await crypto.subtle.digest('SHA-256', encodedNonce) // Hash it with SHA-256 -const bytes = new Uint8Array(hash) -const hashedNonce = Array.from(bytes) - .map((b) => b.toString(16).padStart(2, '0')) // Convert the hash to a hexadecimal string - .join('') - -// Use 'hashedNonce' when making the authentication request to Google -// Use 'nonce' when invoking the supabase.auth.signInWithIdToken() method -``` - -### Configuration [#configuration-personalized-sign-in-button] - -1. Obtain OAuth credentials for your Google Cloud project in the [Credentials](https://console.developers.google.com/apis/credentials) page of the console. When creating a new credential, choose _Web application_. As you're using the Google sign in button, you should configure the _Authorized JavaScript origins_ and _Authorized redirect URIs_ to the website where the buttons appear. You should not use your Supabase project domain name. For this use case, the client secret provided is not needed and can be ignored. -2. Configure the [OAuth Consent Screen](https://console.cloud.google.com/apis/credentials/consent). This information is shown to the user when giving consent to your app. In particular, make sure you have set up links to your app's privacy policy and terms of service. -3. Finally, add the client ID from step 1 in the [Google provider on the Supabase Dashboard](https://supabase.com/dashboard/project/_/auth/providers) under _Authorized Client IDs_. - -Note that you do not have to configure the OAuth flow client ID and secret in the Supabase Dashboard when using this approach! - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx deleted file mode 100644 index bc939d61230f9..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx +++ /dev/null @@ -1,97 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-kakao', - title: 'Login with Kakao', - description: 'Add Kakao OAuth to your Supabase project', -} - -To enable Kakao Auth for your project, you need to set up an Kakao OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Kakao OAuth consists of six broad steps: - -- Create and configure your app in the [Kakao Developer Portal](https://developers.kakao.com). -- Obtaining a `REST API key` - this will serve as the `client_id`. -- Generating the `Client secret code` - this will serve as the `client_secret`. -- Additional configurations on Kakao Developers Portal. -- Add your `client id` and `client secret` keys to your [Supabase Project](https://supabase.com/dashboard). -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). - -## Access your Kakao Developer account - -- Go to [Kakao Developers Portal](https://developers.kakao.com). -- Click on `Login` at the top right to log in. - -![Kakao Developers Portal.](/docs/img/guides/auth-kakao/kakao-developers-page.png) - -## Create and configure your app - -- Go to `My Application`. -- Click on `Add an application` at the top. -- Fill out your app information: - - App icon. - - App name. - - Company name. -- Click `Save` at the bottom right. - -## Obtain a REST API key - -This will serve as the `client_id` when you make API calls to authenticate the user. - -- Go to `My Application`. -- Click on your app. -- You will be redirected to `Summary` tab of your app. -- In the `App Keys` section you will see `REST API key` -- this ID will become your `client_id` later. - -## Find your callback URL - -- To add callback URL on Kakao, go to `Product settings` > -`Kakao Login` > `Redirect URI`. - -## Generate and activate a `client_secret` - -- Go to `Product settings` > `Kakao Login` > `Security`. -- Click on the `Kakao Login` switch to enable Kakao Login. -- Click on `generate code` at the bottom to generate the `Client secret code` -- this will serve as a `client_secret` for your supabase project. -- Make sure you enabled `Client sercet code` by selecting `enable` from the `Activation state` section. - -## Additional configurations on Kakao Developers Portal - -- Make sure the Kakao Login is enabled in the `Kakao Login` tab. -- Set following scopes under the "Consent Items": account_email, profile_image, profile_nickname - -![Consent items needs to be set.](/docs/img/guides/auth-kakao/kakao-developers-consent-items-set.png) - -## Add your OAuth credentials to Supabase - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `kakao` as the `provider`: - -```js -async function signInWithKakao() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'kakao', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Kakao Developers Portal](https://developers.kakao.com). - -export const Page = ({ children }) => - -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 deleted file mode 100644 index b0078e6cfae12..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-keycloak.mdx +++ /dev/null @@ -1,92 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-keycloak', - title: 'Login with Keycloak', - description: 'Add Keycloak OAuth to your Supabase project', -} - -To enable Keycloak Auth for your project, you need to set up an Keycloak OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -To get started with Keycloak, you can run it in a docker container with: `docker run -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -p 8080:8080 jboss/keycloak:latest` - -This guide will be assuming that you are running keycloak in a docker container as described in the command above. - -Keycloak OAuth consists of five broad steps: - -- Create a new client in your specified keycloak realm. -- Obtain the `issuer` from the "OpenID Endpoint Configuration". This will be used as the `Keycloak URL`. -- Ensure that the new client has the "Client Protocol" set to "openid-connect" and the "Access Type" is set to "confidential". -- The `Client ID` of the client created will be used as the `client id`. -- Obtain the `Secret` from the credentials tab which will be used as the `client secret`. -- Add the callback url of your application to your allowlist. - -## Access your Keycloak Admin console - -- Login by visiting [`http://localhost:8080`](http://localhost:8080) and clicking on "Administration Console". - -## Create a Keycloak Realm - -- Once you've logged in to the Keycloak console, you can add a realm from the side panel. The default realm should be named "Master". -- After you've added a new realm, you can retrieve the `issuer` from the "OpenID Endpoint Configuration" endpoint. The `issuer` will be used as the `Keycloak URL`. -- You can find this endpoint from the realm settings under the "General Tab" or visit [`http://localhost:8080/realms/my_realm_name/.well-known/openid-configuration`](http://localhost:8080/realms/my_realm_name/.well-known/openid-configuration) - -![Add a Keycloak Realm.](/docs/img/guides/auth-keycloak/keycloak-create-realm.png) - -## Create a Keycloak Client - -The "Client ID" of the created client will serve as the `client_id` when you make API calls to authenticate the user. - -![Add a Keycloak client](/docs/img/guides/auth-keycloak/keycloak-add-client.png) - -## Client Settings - -After you've created the client successfully, ensure that you set the following settings: - -1. The "Client Protocol" should be set to "openid-connect". -2. The "Access Type" should be set to "confidential". -3. The "Valid Redirect URIs" should be set to: `https://.supabase.co/auth/v1/callback`. - -![Obtain the client id, set the client protocol and access type](/docs/img/guides/auth-keycloak/keycloak-client-id.png) -![Set redirect uri](/docs/img/guides/auth-keycloak/keycloak-redirect-uri.png) - -## Obtain the Client Secret - -This will serve as the `client_secret` when you make API calls to authenticate the user. -Under the "Credentials" tab, the `Secret` value will be used as the `client secret`. - -![Obtain the client secret](/docs/img/guides/auth-keycloak/keycloak-client-secret.png) - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `keycloak` as the `provider`: - -```js -async function signInWithKeycloak() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'keycloak', - options: { - scopes: 'openid', - }, - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- You can find the keycloak openid endpoint configuration under the realm settings. - ![Keycloak OpenID Endpoint Configuration](/docs/img/guides/auth-keycloak/keycloak-openid-endpoint-config.png) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index d81b1f7ad7929..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-linkedin.mdx +++ /dev/null @@ -1,73 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-linkedin', - title: 'Login with LinkedIn', - description: 'Add LinkedIn OAuth to your Supabase project', -} - -To enable LinkedIn Auth for your project, you need to set up a LinkedIn OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Setting up LinkedIn logins for your application consists of 3 parts: - -- Create and configure a LinkedIn Project and App on the [LinkedIn Developer Dashboard](https://www.linkedin.com/developers/apps). -- Add your LinkedIn `client_id` and `client_secret` to your [Supabase Project](https://supabase.com/dashboard). -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). - -## Access your LinkedIn Developer account - -- Go to [LinkedIn Developer Dashboard](https://www.linkedin.com/developers/apps). -- Log in (if necessary.) - -![LinkedIn Developer Portal](/docs/img/guides/auth-linkedin/linkedin_developers_page.png) - -## Find your callback URL - - - -## Create a LinkedIn OAuth app - -- Go to [LinkedIn Developer Dashboard](https://www.linkedin.com/developers/apps). -- Click on `Create App` at the top right -- Enter your `LinkedIn Page` and `App Logo` -- Save your app -- Click `Auth` from the top menu -- Add your `Redirect URL` to the `Authorized Redirect URLs for your app` section -- Copy and save your newly-generated `Client ID` -- Copy and save your newly-generated `Client Secret` - -## Enter your LinkedIn credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `linkedin` as the `provider`: - -```js -async function signInWithLinkedIn() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'linkedin', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [LinkedIn Developer Dashboard](https://api.LinkedIn.com/apps) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index df59c508485ab..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-notion.mdx +++ /dev/null @@ -1,78 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-notion', - title: 'Login with Notion', - description: 'Add Notion OAuth to your Supabase project', -} - -To enable Notion Auth for your project, you need to set up a Notion Application and add the Application OAuth credentials to your Supabase Dashboard. - -## Overview - -Setting up Notion logins for your application consists of 3 parts: - -- Create and configure a Notion Application [Notion Developer Portal](https://www.notion.so/my-integrations) -- Retrieve your OAuth client ID and OAuth client secret and add them to your [Supabase Project](https://supabase.com/dashboard) -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js) - -## Create your notion integration - -- Go to [developers.notion.com](https://developers.notion.com/). -- Click "View my integrations" and login. - -![notion.so](/docs/img/guides/auth-notion/notion.png) - -- Once logged in, go to [notion.so/my-integrations](https://notion.so/my-integrations) and create a new integration. -- When creating your integration, ensure that you select "Public integration" under "Integration type" and "Read user information including email addresses" under "Capabilities". -- You will need to add a redirect uri, see [Add the redirect uri](#add-the-redirect-uri) -- Once you've filled in the necessary fields, click "Submit" to finish creating the integration. - -![notion.so](/docs/img/guides/auth-notion/notion-developer.png) - -## Add the redirect URI - -- After selecting "Public integration", you should see an option to add "Redirect URIs". - -![notion.so](/docs/img/guides/auth-notion/notion-redirect-uri.png) - - - -## Add your Notion credentials into your Supabase Project - -- Once you've created your notion integration, you should be able to retrieve the "OAuth client ID" and "OAuth client secret" from the "OAuth Domain and URIs" tab. - -![notion.so](/docs/img/guides/auth-notion/notion-creds.png) - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `notion` as the `provider`: - -```js -async function signInWithNotion() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'notion', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Notion Account](https://notion.so) -- [Notion Developer Portal](https://www.notion.so/my-integrations) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 48859c3a5ca57..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-slack.mdx +++ /dev/null @@ -1,89 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-slack', - title: 'Login with Slack', - description: 'Add Slack OAuth to your Supabase project', -} - -To enable Slack Auth for your project, you need to set up a Slack OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Setting up Slack logins for your application consists of 3 parts: - -- Create and configure a Slack Project and App on the [Slack Developer Dashboard](https://api.slack.com/apps). -- Add your Slack `API Key` and `API Secret Key` to your [Supabase Project](https://supabase.com/dashboard). -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). - -## Access your Slack Developer account - -- Go to [api.slack.com](https://api.slack.com/apps). -- Click on `Your Apps` at the top right to log in. - -![Slack Developer Portal.](/docs/img/guides/auth-slack/slack-portal.png) - -## Find your callback URL - - - -## Create a Slack OAuth app - -- Go to [api.slack.com](https://api.slack.com/apps). -- Click on `Create New App` - -Under `Create an app...`: - -- Click `From scratch` -- Type the name of your app -- Select your `Slack Workspace` -- Click `Create App` - -Under `App Credentials`: - -- Copy and save your newly-generated `Client ID` -- Copy and save your newly-generated `Client Secret` - -Under the sidebar, select `OAuth & Permissions` and look for `Redirect URLs`: - -- Click `Add New Redirect URL` -- Paste your `Callback URL` then click `Add` -- Click `Save URLs` - -Under `Scopes`: - -- Add the following scopes under the `User Token Scopes`: `profile`, `email`, `openid`. These scopes are the default scopes that Supabase Auth uses to request for user information. You can add any additional scopes that you may need as well. - -## Enter your Slack credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `slack` as the `provider`: - -```js -async function signInWithSlack() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'slack', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Slack Developer Dashboard](https://api.slack.com/apps) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index f65374571f1f9..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-spotify.mdx +++ /dev/null @@ -1,81 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-spotify', - title: 'Login with Spotify', - description: 'Add Spotify OAuth to your Supabase project', -} - -To enable Spotify Auth for your project, you need to set up a Spotify OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Setting up Spotify logins for your application consists of 3 parts: - -- Create and configure a Spotify Project and App on the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard/). -- Add your Spotify `API Key` and `API Secret Key` to your [Supabase Project](https://supabase.com/dashboard). -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). - -## Access your Spotify Developer account - -- Log into [Spotify](https://spotify.com) -- Access the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard) - -![Spotify Developer Portal.](/docs/img/guides/auth-spotify/spotify-portal.png) - -## Find your callback URL - - - -## Create a Spotify OAuth app - -- Log into [Spotify](https://spotify.com). -- Go to the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard) -- Click `Create an App` -- Type your `App name` -- Type your `App description` -- Check the box to agree with the `Developer TOS and Branding Guidelines` -- Click `Create` -- Save your `Client ID` -- Save your `Client Secret` -- Click `Edit Settings` - -Under `Redirect URIs`: - -- Paste your Supabase Callback URL in the box -- Click `Add` -- Click `Save` at the bottom - -## Enter your Spotify credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `spotify` as the `provider`: - -```js -async function signInWithSpotify() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'spotify', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Spotify Developer Dashboard](https://developer.spotify.com/dashboard/) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 6b4951f880d97..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-twitch.mdx +++ /dev/null @@ -1,93 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-twitch', - title: 'Login with Twitch', - description: 'Add Twitch OAuth to your Supabase project', -} - -To enable Twitch Auth for your project, you need to set up a Twitch Application and add the Application OAuth credentials to your Supabase Dashboard. - -## Overview - -Setting up Twitch logins for your application consists of 3 parts: - -- Create and configure a Twitch Application [Twitch Developer Console](https://dev.twitch.tv/console) -- Add your Twitch OAuth Consumer keys to your [Supabase Project](https://supabase.com/dashboard) -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js) - -## Access your Twitch Developer account - -- Go to [dev.twitch.tv](https://dev.twitch.tv). -- Click on `Log in with Twitch` at the top right to log in. -- If you have not already enabled 2-Factor Authentication for your Twitch Account, you will need to do that at [Twitch Security Settings](https://www.twitch.tv/settings/security) before you can continue. - -![Twitch Developer Page](/docs/img/guides/auth-twitch/twitch-developer-page.png) - -- Once logged in, go to the [Twitch Developer Console](https://dev.twitch.tv/console). - -![Twitch Developer Console](/docs/img/guides/auth-twitch/twitch-console.png) - -## Find your callback URL - - - -## Create a Twitch Application - -![Twitch Developer Console](/docs/img/guides/auth-twitch/twitch-console.png) - -- Click on `+ Register Your Application` at the top right. - -![Register Application](/docs/img/guides/auth-twitch/twitch-register-your-application.png) - -- Enter the name of your application. -- Type or paste your `OAuth Redirect URL` (the callback URL from the previous step.) -- Select a category for your app. -- Check the Captcha box and click `Create`. - -## Retrieve your Twitch OAuth Client ID and Client Secret - -- Click `Manage` at the right of your application entry in the list. - -![Twitch Applications List](/docs/img/guides/auth-twitch/twitch-applications-list.png) - -- Copy your Client ID. -- Click `New Secret` to create a new Client Secret. -- Copy your Client Secret. - -![Get Client ID and Secret](/docs/img/guides/auth-twitch/twitch-get-keys.png) - -## Add your Twitch credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `twitch` as the `provider`: - -```js -async function signInWithTwitch() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'twitch', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Twitch Account](https://twitch.tv) -- [Twitch Developer Console](https://dev.twitch.tv/console) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 381e453bb3bb6..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-twitter.mdx +++ /dev/null @@ -1,82 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-twitter', - title: 'Login with Twitter', - description: 'Add Twitter OAuth to your Supabase project', -} - -To enable Twitter Auth for your project, you need to set up a Twitter OAuth application with [elevated access](https://developer.twitter.com/en/portal/products/elevated) and add the application credentials in the Supabase Dashboard. - -## Overview - -Setting up Twitter logins for your application consists of 3 parts: - -- Create and configure a Twitter Project and App on the [Twitter Developer Dashboard](https://developer.twitter.com/en/portal/dashboard). -- Add your Twitter `API Key` and `API Secret Key` to your [Supabase Project](https://supabase.com/dashboard). -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). - -## Access your Twitter Developer account - -- Go to [developer.twitter.com](https://developer.twitter.com). -- Click on `Sign in` at the top right to log in. - -![Twitter Developer Portal.](/docs/img/guides/auth-twitter/twitter-portal.png) - -## Find your callback URL - - - -## Create a Twitter OAuth app - -- Click `+ Create Project`. - - Enter your project name, click `Next`. - - Select your use case, click `Next`. - - Enter a description for your project, click `Next`. - - Enter a name for your app, click `Complete`. - - Copy and save your `API Key` (this is your `client_id`). - - Copy and save your `API Secret Key` (this is your `client_secret`). -- At the bottom, under `Next, setup your App` click the link `enable 3rd party authentication`. -- Under `App Settings`, click on the gear icon next to your app name to go to `App Settings`. -- At the bottom, next to `Authentication settings`, click `Edit`. -- Turn `Enable 3-legged OAuth` ON. -- Turn `Request email address from users` ON. -- Enter your `Callback URL`. -- Enter your `Website URL` (tip: try `http://127.0.0.1:port` or `http://www.localhost:port` during development) -- Enter your `Terms of service URL`. -- Enter your `Privacy policy URL`. -- Click `Save`. - -## Enter your Twitter credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `twitter` as the `provider`: - -```js -async function signInWithTwitter() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'twitter', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Twitter Developer Dashboard](https://developer.twitter.com/en/portal/dashboard) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 4df551be6e433..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-workos.mdx +++ /dev/null @@ -1,88 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-workos', - title: 'Login with WorkOS', - description: 'Add WorkOS OAuth to your Supabase project', -} - -To enable WorkOS Auth for your project, you need to set up WorkOS OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -In this guide, we will cover how to use Supabase OAuth with WorkOS to implement Single-Sign-On(SSO). - -The procedure consists of five broad steps: - -- Create a new organization from your WorkOS Dashboard. -- Obtain the `Client ID` from the Configuration tab and configure redirect URI. -- Obtain the `WorkOS Secret` from the credentials tab. -- Connect a WorkOS Supported Identity Provider -- Add your WorkOS credentials into your Supabase project - -## Create a WorkOS Organization - -Log in to the dashboard and hop over to the Organizations tab to create and organization -![Create an Organization](/docs/img/guides/auth-workos/workos-create-organization.png) - -## Obtain the Client ID and configure Redirect URI - -Head over to the Configuration tab and configure the redirect URI.The redirect URI should look like `https://.supabase.co/auth/v1/callback` -Note that this is distinct from the redirect URI referred to in the Supabase dashboard - -![Fetch Client ID and configure Redirect URI](/docs/img/guides/auth-workos/workos-clientid-redirect-uri.png) - -## Obtain the WorkOS Secret - -Head over to the API Keys page and obtain the secret key. - -![WorkOS Secret Key](/docs/img/guides/auth-workos/workos-secret-key.png) - -## Connect a WorkOS Supported Identity Provider - -Set up the identity provider by visiting the setup link. - -![Visiting the setup link](/docs/img/guides/auth-workos/workos-setup-identity-provider.png) - -You can pick between any one of the many identity providers that WorkOS supports. - -## Add your WorkOS credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `workos` as the `provider`: - -```js -async function signInWithWorkOS() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'workos', - options: { - queryParams: { - connection: '', - organization: '', - }, - }, - }) -} -``` - -Refer to the [WorkOS Documentation](https://workos.com/docs/reference/sso/authorize/) to learn more about the different methods. - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [WorkOS Documentation](https://workos.com/docs/sso/guide) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 9e2f9792dcc96..0000000000000 --- a/apps/docs/pages/guides/auth/social-login/auth-zoom.mdx +++ /dev/null @@ -1,90 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-zoom', - title: 'Login with Zoom', - description: 'Add Zoom OAuth to your Supabase project', -} - -To enable Zoom Auth for your project, you need to set up a Zoom OAuth application and add the application credentials to your Supabase Dashboard. - -## Overview - -Setting up Zoom logins for your application consists of 3 parts: - -- Create and configure a Zoom OAuth App on [Zoom App Marketplace](https://marketplace.zoom.us/) -- Add your Zoom OAuth keys to your [Supabase Project](https://supabase.com/dashboard) -- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js) - -## Access your Zoom Developer account - -- Go to [marketplace.zoom.us](https://marketplace.zoom.us/). -- Click on `Sign In` at the top right to log in. - -![Zoom Developer Portal.](/docs/img/guides/auth-zoom/zoom-portal.png) - -## Find your callback URL - - - -## Create a Zoom Oauth App - -- Go to [marketplace.zoom.us](https://marketplace.zoom.us/). -- Click on `Sign In` at the top right to log in. -- Click `Build App` (from the dropdown Develop) -- In the OAuth card, click `Create` -- Type the name of your app -- Choose app type -- Click `Create` - -Under `App credentials` - -- Copy and save your `Client ID`. -- Copy and save your `Client secret`. -- Add your `Callback URL` in the OAuth allow list. - -Under `Redirect URL for OAuth` - -- Paste your `Callback URL` - -Under `Scopes` - -- Click on `Add scopes` -- Click on `User` -- Choose `user:read` -- Click `Done` -- Click `Continue` - -## Enter your Zoom credentials into your Supabase Project - - - -## Add login code to your client app - -When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `zoom` as the `provider`: - -```js -async function signInWithZoom() { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: 'zoom', - }) -} -``` - -When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: - -```js -async function signout() { - const { error } = await supabase.auth.signOut() -} -``` - -## Resources - -- [Supabase Account - Free Plan OK](https://supabase.com) -- [Supabase JS Client](https://github.com/supabase/supabase-js) -- [Zoom App Marketplace](https://marketplace.zoom.us/) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/auth/sso/auth-sso-saml.mdx b/apps/docs/pages/guides/auth/sso/auth-sso-saml.mdx deleted file mode 100644 index 0c30361e5667e..0000000000000 --- a/apps/docs/pages/guides/auth/sso/auth-sso-saml.mdx +++ /dev/null @@ -1,376 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-sso-saml', - title: 'Single Sign-On with SAML 2.0 for Projects', - description: 'Use Single Sign-On (SSO) authentication on your project with SAML 2.0', - video: 'https://www.youtube.com/v/em1cpOAXknM', -} - - - Looking for guides on how to use Single Sign-On with the Supabase dashboard? Head on over to - [Enable SSO for Your Organization](/docs/guides/platform/sso). - - -Supabase Auth supports enterprise-level Single Sign-On (SSO) for any identity providers compatible with the using the SAML 2.0 protocol. This is a non-exclusive list of supported identity providers: - -- Google Workspaces (formerly known as GSuite) -- Okta, Auth0 -- Microsoft Active Directory, Azure Active Directory, Microsoft Entra -- PingIdentity -- OneLogin - -If you're having issues with identity provider software not on this list, please [open a support ticket](https://supabase.com/dashboard/support/new). - -## Prerequisites - -This guide requires the use of the [Supabase CLI](/docs/guides/cli). Please make sure you're using version v1.46.4 or higher. You can use `supabase -v` to see the currently installed version. - -You can use the `supabase sso` [subcommands](/docs/reference/cli/supabase-sso) to manage your project's configuration. - -SAML 2.0 support is disabled by default on Supabase projects. You can configure this on the [Auth Providers](https://supabase.com/dashboard/project/_/auth/providers) page on your project. - -Please note that SAML 2.0 support is offered on plans Pro and above. Check the [Pricing](https://supabase.com/pricing) page for more information. - -## Terminology - -The number of SAML and SSO acronyms can often be overwhelming. Here's a glossary which you can refer back to at any time: - -- **Identity Provider**, **IdP**, or **IDP** - An identity provider is a service that manages user accounts at a company or organization. It can verify the identity of a user and exchange that information with your Supabase project and other applications. It acts as a single source of truth for user identities and access rights. Commonly used identity providers are: Microsoft Active Directory (Azure AD, Microsoft Entra), Okta, Google Workspaces (GSuite), PingIdentity, OneLogin, and many others. There are also self-hosted and on-prem versions of identity providers, and sometimes they are accessible only by having access to a company VPN or being in a specific building. -- **Service Provider**, **SP** - This is the software that is asking for user information from an identity provider. In Supabase, this is your project's Auth server. -- **Assertion** - An assertion is a statement issued by an identity provider that contains information about a user. -- **EntityID** - A globally unique ID (usually a URL) that identifies an Identity Provider or Service Provider across the world. -- **NameID** - A unique ID (usually an email address) that identifies a user at an Identity Provider. -- **Metadata** - An XML document that describes the features and configuration of an Identity Provider or Service Provider. It can be as a standalone document or as a URL. Usually (but not always) the `EntityID` is the URL at which you can access the Metadata. -- **Certificate** - Supabase Auth (the Service Provider) trusts assertions from an Identity Provider based on the signature attached to the assertion. The signature is verified according to the certificate present in the Metadata. -- **Assertion Consumer Service (ACS) URL** - This is one of the most important SAML URLs. It is the URL where Supabase Auth will accept assertions from an identity provider. Basically, once the identity provider verifies the user's identity it will redirect to this URL and the redirect request will contain the assertion. -- **Binding (Redirect, POST, or Artifact)** - This is a description of the way an identity provider communicates with Supabase Auth. When using the Redirect binding, the communication occurs using HTTP 301 redirects. When it's `POST`, it's using `POST` requests sent with `
    ` elements on a page. When using Artifact, it's using a more secure exchange over a Redirect or `POST`. -- **RelayState** - State used by Supabase Auth to hold information about a request to verify the identity of a user. - -## Important SAML 2.0 information - -Below is information about your project's SAML 2.0 configuration which you can share with the company or organization that you're trying to on-board. - -| Name | Value | -| --------------------------- | ----------------------------------------------------------------------- | -| EntityID | `https://.supabase.co/auth/v1/sso/saml/metadata` | -| Metadata URL | `https://.supabase.co/auth/v1/sso/saml/metadata` | -| Metadata URL
    (download) | `https://.supabase.co/auth/v1/sso/saml/metadata?download=true` | -| ACS URL | `https://.supabase.co/auth/v1/sso/saml/acs` | -| SLO URL | `https://.supabase.co/auth/v1/sso/slo` | -| NameID | Required `emailAddress` or `persistent` | - -Note that SLO (Single Logout) is not supported at this time with Supabase Auth as it is a rarely supported feature by identity providers. However, the URL is registered and advertised for when this does become available. - -Append `?download=true` to the Metadata URL to download the Metadata XML file. This is useful in cases where the identity provider requires a file. - -Alternatively, you can use the `supabase sso info --project-ref ` [command](/docs/reference/cli/supabase-sso-info) to get setup information for your project. - -### User accounts and identities - -User accounts and identities created via SSO differ from regular (email, phone, password, social login...) accounts in these ways: - -- **No automatic linking.** - Each user account verified using a SSO identity provider will not be automatically linked to existing user accounts in the system. That is, if a user `jane.doe@company.com` had signed up with a password, and then uses their company SSO login with your project, there will be two `jane.doe@company.com` user accounts in the system. -- **Emails are not necessarily unique.** - Given the behavior with no automatic linking, email addresses are no longer a unique identifier for a user account. Please always use the user's UUID to correctly reference user accounts. -- **Sessions may have a maximum duration.** - Depending on the configuration of the identity provider, a login session established with SSO may forcibly log out a user after a certain period of time. - -### Row Level Security - -You can use information about the SSO identity provider in Row Level Security policies. - -Here are some commonly used statements to extract SSO related information from the user's JWT: - -- `auth.jwt()#>>'{amr,0,method}'` - Returns the name of the last method used to verify the identity of this user. With SAML SSO this is `sso/saml`. -- `auth.jwt()#>>'{amr,0,provider}'` - Returns the UUID of the SSO identity provider used by the user to sign-in. -- `auth.jwt()#>>'{user_metadata,iss}'` - Returns the identity provider's SAML 2.0 `EntityID` - - - If you use [Multi-Factor Authentication](/guides/auth/auth-mfa) with SSO, the `amr` array may have - a different method at index `0`! - - -A common use case with SSO is to use the UUID of the identity provider as the identifier for the organization the user belongs to -- frequently known as a tenant. By associating the identity provider's UUID with your tenants, you can use restrictive RLS policies to scope down actions and data that a user is able to access. - -For example, let's say you have a table like: - -```sql -create table organization_settings ( - -- the organization's unique ID - id uuid not null primary key, - -- the organization's SSO identity provider - sso_provider_id uuid unique, - -- name of the organization - name text, - -- billing plan (paid, free, enterprise) - billing_plan text -); -``` - -You can use the information present in the user's JWT to scope down which rows from this table the user can see, without doing any additional user management: - -```sql -CREATE POLICY "View organization settings." - ON organization_settings - AS RESTRICTIVE - USING ( - sso_provider_id = auth.jwt()#>>'{amr,0,provider}' - ); -``` - -## Managing SAML 2.0 connections - -Once you've enabled SAML 2.0 support on your project via the [Auth Providers](https://supabase.com/dashboard/project/_/auth/providers) page in the dashboard, you can use the [Supabase CLI](/docs/reference/cli/supabase-sso) to add, update, remove and view information about identity providers. - -### Add a connection - -To establish a connection to a SAML 2.0 Identity Provider (IdP) you will need: - -- A SAML 2.0 Metadata XML file, or a SAML 2.0 Metadata URL pointing to an XML file -- (Optional) Email domains that the organization's IdP uses -- (Optional) Attribute mappings between the user properties of the IdP and the claims stored by Supabase Auth - -You should obtain the SAML 2.0 Metadata XML file or URL from the organization whose IdP you wish to connect. Most SAML 2.0 Identity Providers support the Metadata URL standard, and we recommend using a URL if this is available. - -Commonly used SAML 2.0 Identity Providers that support Metadata URLs: - -- Okta -- Azure AD (Microsoft Entra) -- PingIdentity - -Commonly used SAML 2.0 Identity Providers that only support Metadata XML files: - -- Google Workspaces (GSuite) -- Any self-hosted or on-prem identity provider behind a VPN - -Once you've obtained the SAML 2.0 Metadata XML file or URL you can [establish a connection](/docs/reference/cli/supabase-sso-add) with your project's Supabase Auth server by running: - -```bash -supabase sso add --type saml --project-ref \ - --metadata-url 'https://company.com/idp/saml/metadata' \ - --domains company.com -``` - -If you wish to use a Metadata XML file instead, you can use: - -```bash -supabase sso add --type saml --project-ref \ - --metadata-file /path/to/saml/metadata.xml \ - --domains company.com -``` - -This command will register a new identity provider with your project's Auth server. When successful, you will see the details of the provider such as it's SAML information and registered domains. - -Please note that only persons with write access to the project can register, update or remove identity providers. - -Once you've added an identity provider, users who have access to it can sign in to your application. With SAML 2.0 there are two ways that users can sign in to your project: - -- By signing-in from your application's user interface, commonly known as **SP (Service Provider) Initiated Flow** -- By clicking on an icon in the application menu on the company intranet or identity provider page, commonly known as **Identity Provider Initiated (IdP) Flow** - -To initiate a sign-in request from your application's user interface (i.e. the SP Initiated Flow), you can use: - -```typescript -supabase.auth.signInWithSSO({ - domain: 'company.com', -}) -``` - -Calling [`signInWithSSO`](/docs/reference/javascript/auth-signinwithsso) starts the sign-in process using the identity provider registered for the `company.com` domain name. It is not required that identity providers be assigned one or multiple domain names, in which case you can use the provider's unique ID instead. - -### Understanding attribute mappings - -When a user signs in using the SAML 2.0 Single Sign-On protocol, an XML document called the SAML Assertion is exchanged between the identity provider and Supabase Auth. - -This assertion contains information about the user's identity and other authentication information, such as: - -- Unique ID of the user (called `NameID` in SAML) -- Email address -- Name of the user -- Department or organization -- Other attributes present in the users directory managed by the identity provider - -With exception of the unique user ID, SAML does not require any other attributes in the assertion. Identity providers can be configured so that only select user information is shared with your project. - -Your project can be configured to recognize these attributes and map them into your project's database using a JSON structure. This process is called attribute mapping, and varies according to the configuration of the identity provider. - -For example, the following JSON structure configures attribute mapping for the `email` and `first_name` user identity properties. - -```json -{ - "keys": { - "email": { - "name": "mail" - }, - "first_name": { - "name": "givenName" - } - } -} -``` - -When creating or updating an identity provider with the [Supabase CLI](/docs/guides/cli) you can include this JSON as a file with the `--attribute-mapping-file /path/to/attribute/mapping.json` flag. - -For example, to change the attribute mappings to an existing provider you can use: - -```bash -supabase sso update --project-ref \ - --attribute-mapping-file /path/to/attribute/mapping.json -``` - -Given a SAML 2.0 assertion that includes these attributes: - -```xml - - - - - jane.doe@company.com - - - - - - - Jane Doe - - - -``` - -Will result in the following claims in the user's identity in the database and JWT: - -```json -{ - "email": "jane.doe@company.com", - "custom_claims": { - "first_name": "Jane Doe" - } -} -``` - -Supabase Auth does not require specifying attribute mappings if you only need access to the user's email. It will attempt to find an email attribute specified in the assertion. All other properties will not be automatically included, and it is those you need to map. - -At this time it is not possible to have users without an email address, so SAML assertions without one will be rejected. - -Most SAML 2.0 identity providers use Lightweight Directory Access Protocol (LDAP) attribute names. However, due to their variability and complexity operators of identity providers are able to customize both the `Name` and attribute value that is sent to Supabase Auth in an assertion. Please refer to the identity provider's documentation and contact the operator for details on what attributes are mapped for your project. - -**Accessing the stored attributes** - -The stored attributes, once mapped, show up in the access token (a JWT) of the user. If you need to look these values up in the database, you can find them in the `auth.identities` table under the `identity_data` JSON column. Identities created for SSO providers have `sso:` in the `provider` column, while `id` contains the unique NameID of the user account. - -Furthermore, you can find the same identity data under `raw_app_meta_data` inside `auth.users`. - -### Remove a connection - -Once a connection to an identity provider is established, you can [remove it](/docs/reference/cli/supabase-sso-remove) by running: - -```bash -supabase sso remove --project-ref -``` - -If successful, the details of the removed identity provider will be shown. All user accounts from that identity provider will be immediately logged out. User information will remain in the system, but it will no longer be possible for any of those accounts to be accessed in the future, even if you add the connection again. - -If you need to reassign those user accounts to another identity provider, please [open a support ticket](https://supabase.com/dashboard/support/new). - -A [list of all](/docs/reference/cli/supabase-sso-list) registered identity providers can be displayed by running: - -```bash -supabase sso list --project-ref -``` - -### Update a connection - -You may wish to update settings about a connection to a SAML 2.0 identity provider. - -Commonly this is necessary when: - -- Cryptographic keys are rotated or have expired -- Metadata URL has changed, but is the same identity provider -- Other SAML 2.0 Metadata attributes have changed, but it is still the same identity provider -- You are updating the domains or attribute mapping - -You can use this command to [update](/docs/reference/cli/supabase-sso-update) the configuration of an identity provider: - -```bash -supabase sso update --project-ref -``` - -Please use `--help` to see all available flags. - -It is not possible to change the unique SAML identifier of the identity provider, known as `EntityID`. Everything else can be updated. If the SAML `EntityID` of your identity provider has changed, it is regarded as a new identity provider and you will have to register it like a new connection. - -### Retrieving information about a connection - -You can always obtain a [list](/docs/reference/cli/supabase-sso-list) of all registered providers using: - -```bash -supabase sso list --project-ref -``` - -This list will only include basic information about each provider. To see [all of the information](/docs/reference/cli/supabase-sso-show) about a provider you can use: - -```bash -supabase sso show --project-ref -``` - -You can use the `-o json` flag to output the information as JSON, should you need to. Other formats may be supported, please use `--help` to see all available options. - -## Frequently Asked Questions - -### How do I publish my application to an identity provider's marketplace? - -Many cloud-based identity providers offer a marketplace where you can register your application for easy on-boarding with customers. When you use Supabase Auth's SAML 2.0 support you can register your project in any one of these marketplaces. - -Please refer to the relevant documentation for each cloud-based identity provider on how you can do this. Some common marketplaces are: - -- [Okta Integration Network](https://developer.okta.com/docs/guides/build-sso-integration/saml2/main/) -- [Azure Active Directory App Gallery](https://learn.microsoft.com/en-us/azure/active-directory-b2c/publish-app-to-azure-ad-app-gallery) -- [Google Workspaces Pre-integrated SAML apps catalog](https://support.google.com/a/table/9217027) - -### Why do some users get: SAML Assertion does not contain email address? - -Identity providers do not have to send back and email address for the user, though they often do. Supabase Auth requires that an email address is present. - -The following list of commonly used SAML attribute names is inspected, in order of appearance, to discover the email address in the assertion: - -- `urn:oid:0.9.2342.19200300.100.1.3` -- `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress` -- `http://schemas.xmlsoap.org/claims/EmailAddress` -- `mail` -- `email` - -Finally if there is no such attribute, it will use the SAML `NameID` value but only if the format is advertised as `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`. - -Should you run into this problem, it is most likely a misconfiguration issue **on the identity provider side.** Please instruct your contact at the company to map the user's email address to one of the above listed attribute names, typically `email`. - -### How do I access the private key used for SAML in my project? - -At this time it is not possible to extract the RSA private key used by your project's Supabase Auth server. This is done to keep the private key as secure as possible, given that SAML does not offer an easy way to rotate keys without disrupting service. (Please use a SAML 2.0 Metadata URL whenever possible for this reason!) - -If you really need access to the key, please [open a support ticket](https://supabase.com/dashboard/support/new) and we'll try to support you as best as possible. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/cli.mdx b/apps/docs/pages/guides/cli.mdx deleted file mode 100644 index 3f1e9e524cd73..0000000000000 --- a/apps/docs/pages/guides/cli.mdx +++ /dev/null @@ -1,47 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'cli', - title: 'Local Dev with CLI', - description: 'Developing locally using the Supabase CLI.', - subtitle: 'Developing locally using the Supabase CLI.', - sidebar_label: 'Overview', -} - -You can use the Supabase CLI to run the entire Supabase stack locally on your machine, simply by running `supabase init` and then `supabase start`. - -The Supabase CLI provides tools to develop your project locally, deploy to the Supabase Platform, handle database migrations, and generate types directly from your database schema. - -## Resources - -
    - {integrations.map((x) => ( - - ))} -
    - -export const integrations = [ - { - name: 'Supabase CLI', - description: - 'The Supabase CLI provides tools to develop manage your Supabase projects from your local machine.', - href: 'https://github.com/supabase/cli', - }, - { - name: 'GitHub Action', - description: ' A GitHub action for interacting with your Supabase projects using the CLI.', - href: 'https://github.com/supabase/setup-cli', - }, -] - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/cli/config.tsx b/apps/docs/pages/guides/cli/config.tsx deleted file mode 100644 index 6789c50ce743f..0000000000000 --- a/apps/docs/pages/guides/cli/config.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import specFile from '~/../../spec/cli_v1_config.yaml' assert { type: 'yml' } -import { Parameter } from '~/lib/refGenerator/refTypes' -import ReactMarkdown from 'react-markdown' -import GuidesTableOfContents from '~/components/GuidesTableOfContents' -import { Heading } from '~/components/CustomHTMLElements' -import Head from 'next/head' -import { CodeBlock } from 'ui' - -// Parameters are grouped on the page by tag -const TAGS = ['General', 'Auth', 'API', 'Database', 'Dashboard', 'Local', 'Edge-Functions'] - -const tocList = [] -const content = TAGS.map((tag) => { - tocList.push({ text: tag, link: `${tag.toLowerCase()}-config`, level: 2 }) - return ( -
    - {tag} Config - {specFile.parameters - .filter((param: Parameter) => param.tags[0] === tag.toLowerCase()) - .map((parameter: Parameter, index) => { - tocList.push({ text: parameter.id, link: `#${parameter.id}`, level: 3 }) - return - })} -
    - ) -}) - -export default function Config() { - return ( - <> - - Supabase CLI config - -
    -
    -
    -

    CLI configuration

    -
    - {specFile.info.description} -
    {content}
    -
    -
    -
    -
    - - On this page - - -
    -
    -
    - - ) -} - -function Info({ parameter }: { parameter: Parameter }) { - return ( -
    -
    - - {parameter.title} - - -
    -
    -
    - - - - - - - - - - - - - - - -
    NameDefaultRequired
    {parameter.id}{parameter.default ? parameter.default.toString() : 'None'}{parameter.required.toString()}
    -
    -
    -

    Description

    - {parameter.description} -
    - {parameter.usage && ( -
    -

    Usage

    - - {parameter.usage} - -
    - )} - {parameter.links && ( -
    -

    See also

    -
      - {parameter.links.map((link) => ( -
    • - {link.name} -
    • - ))} -
    -
    - )} -
    -
    -
    -
    - ) -} diff --git a/apps/docs/pages/guides/cli/customizing-email-templates.mdx b/apps/docs/pages/guides/cli/customizing-email-templates.mdx deleted file mode 100644 index 4702b09ad72a3..0000000000000 --- a/apps/docs/pages/guides/cli/customizing-email-templates.mdx +++ /dev/null @@ -1,124 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'customizing-email-templates', - title: 'Customizing email templates', - description: 'Customizing local email templates using config.toml.', - subtitle: 'Customizing local email templates using config.toml.', -} - -You can customize the email templates for local development [using the `config.toml` settings](/docs/guides/cli/config#auth-config). - -## Configuring Templates - -You should provide a relative URL to the `content_path` parameter, pointing to an HTML file which contains the template. For example - - - -```toml supabase/config.toml -[auth.email.template.invite] -subject = "You are invited to Acme Inc" -content_path = "./supabase/templates/invite.html" -``` - -```html supabase/templates/invite.html - - -

    Confirm your signup

    -

    Confirm your email

    - - -``` - -
    - -## Available email templates - -There are several Auth email templates which can be configured: - -- `auth.email.template.invite` -- `auth.email.template.confirmation` -- `auth.email.template.recovery` -- `auth.email.template.magic_link` -- `auth.email.template.email_change` - -## Template variables - -The templating system provides the following variables for use: - -### ConfirmationURL - -Contains the confirmation URL. For example, a signup confirmation URL would look like: - -``` -https://project-ref.supabase.co/auth/v1/verify?token={{ .TokenHash }}&type=signup&redirect_to=https://example.com/path -``` - -**Usage** - -```html -

    Click here to confirm: {{ .ConfirmationURL }}

    -``` - -### Token - -Contains a 6-digit One-Time-Password (OTP) that can be used instead of the `ConfirmationURL`. - -**Usage** - -```html -

    Here is your one time password: {{ .Token }}

    -``` - -### TokenHash - -Contains a hashed version of the `Token`. This is useful for constructing your own email link in the email template. - -**Usage** - -```html -

    Follow this link to confirm your user:

    -

    - Confirm your email -

    -``` - -### SiteURL - -Contains your application's Site URL. This can be configured in your project's [authentication settings](/dashboard/project/_/auth/url-configuration). - -**Usage** - -```html -

    Visit here to log in.

    -``` - -### Email - -Contains the user's email address. - -**Usage** - -```html -

    A recovery request was sent to {{ .Email }}.

    -``` - -### NewEmail - -Contains the new user's email address. This is only available in the `email_change` email template. - -**Usage** - -```html -

    You are requesting to update your email address to {{ .NewEmail }}.

    -``` - -## Deploying email templates - -These settings are only for local development. To update your hosted project, please copy the templates into the [Email Templates](/dashboard/project/_/auth/templates) section of the Dashboard. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/cli/getting-started.mdx b/apps/docs/pages/guides/cli/getting-started.mdx deleted file mode 100644 index 91d69bfe7f9c8..0000000000000 --- a/apps/docs/pages/guides/cli/getting-started.mdx +++ /dev/null @@ -1,172 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Supabase CLI', - description: - 'The Supabase CLI provides tools to develop your project locally and deploy to the Supabase Platform.', - subtitle: - 'The Supabase CLI provides tools to develop your project locally and deploy to the Supabase Platform.', -} - -You can use the Supabase CLI to run the entire Supabase stack locally on your machine, simply by running `supabase init` (to create a new local project) and then `supabase start`. - -The Supabase CLI provides tools to develop your project locally, deploy to the Supabase Platform, handle database migrations, and generate types directly from your database schema. - -## Installing the Supabase CLI - - - - -Install the CLI as dev dependency via [npm](https://www.npmjs.com/package/supabase): - -```sh -npm install supabase --save-dev -``` - -Run the CLI by prefixing each command with `npx` (only applicable when installing through `npm`): - -```sh -npx supabase -``` - - - - -Install the CLI with [Homebrew](https://brew.sh): - -```sh -brew install supabase/tap/supabase -``` - - - - -Install the CLI with [Scoop](https://scoop.sh): - -```powershell -scoop bucket add supabase https://github.com/supabase/scoop-bucket.git -scoop install supabase -``` - - - - -The CLI is available through [Homebrew](https://brew.sh) and Linux packages. - -#### Homebrew - -```sh -brew install supabase/tap/supabase -``` - -#### Linux packages - -Linux packages are provided in [Releases](https://github.com/supabase/cli/releases). -To install, download the `.apk`/`.deb`/`.rpm` file depending on your package manager -and run one of the following: - -- `sudo apk add --allow-untrusted <...>.apk` -- `sudo dpkg -i <...>.deb` -- `sudo rpm -i <...>.rpm` - - - - -## Updating the Supabase CLI - -When a new [version](https://github.com/supabase/cli/releases) is released, you can update the CLI using the same methods. - - - - -```sh -npm update supabase --save-dev -``` - - - - -```sh -brew upgrade supabase -``` - - - - -```powershell -scoop update supabase -``` - - - - -```sh -brew upgrade supabase -``` - - - - -If you have any Supabase containers running locally, remember to restart them after upgrading to use the new features. - -```bash -npx supabase stop --no-backup -npx supabase start -``` - -## Running Supabase locally - -Inside the folder where you want to create your project, run: - -```bash -supabase init -``` - -This will create a new `supabase` folder. It's safe to commit this folder to your version control system. - -Now, to start the Supabase stack, run: - -```bash -supabase start -``` - -This takes time on your first run because the CLI needs to download the local Docker images. The CLI includes the entire Supabase toolset, and a few additional images that are useful for local development (like a local SMTP server and a database diff tool). - -The local development environment includes Supabase Studio, a graphical interface for working with your database, running by default on [localhost:54323](http://localhost:54323). - -![Local Studio](/docs/img/guides/cli/local-studio.png) - -## Stopping local services - -When you are finished working on your Supabase project, you can stop the stack with: - -```bash -supabase stop -``` - -## Full command reference - -The CLI provides a number of commands to help you develop your project locally and deploy to the Supabase Platform. You can find all commands inside the [CLI Reference](/docs/reference/cli/introduction) docs, including: - -- [Project](/docs/reference/cli/supabase-projects) and [Organization](/docs/reference/cli/supabase-orgs) management -- [Database management](/docs/reference/cli/supabase-db) -- [Database migrations](/docs/reference/cli/supabase-migration) and [Database Branching](/docs/reference/cli/supabase-branches) -- [Database debugging tools](/docs/reference/cli/supabase-inspect-db-calls) -- [Edge Function management](/docs/reference/cli/supabase-functions) -- [Auth management](/docs/reference/cli/supabase-functions) -- [Types Generators](/docs/reference/cli/supabase-gen) -- [Testing](/docs/reference/cli/supabase-test) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/cli/github-action/[slug].tsx b/apps/docs/pages/guides/cli/github-action/[slug].tsx deleted file mode 100644 index 049e3f1072d93..0000000000000 --- a/apps/docs/pages/guides/cli/github-action/[slug].tsx +++ /dev/null @@ -1,158 +0,0 @@ -import { CodeHikeConfig, remarkCodeHike } from '@code-hike/mdx' -import { GetStaticPaths, GetStaticProps } from 'next' -import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote' -import { serialize } from 'next-mdx-remote/serialize' -import { relative } from 'path' -import rehypeSlug from 'rehype-slug' -import remarkGfm from 'remark-gfm' -import codeHikeTheme from 'config/code-hike.theme.json' assert { type: 'json' } -import components from '~/components' -import Layout from '~/layouts/DefaultGuideLayout' -import { UrlTransformFunction, linkTransform } from '~/lib/mdx/plugins/rehypeLinkTransform' -import remarkMkDocsAdmonition from '~/lib/mdx/plugins/remarkAdmonition' -import { removeTitle } from '~/lib/mdx/plugins/remarkRemoveTitle' -import remarkPyMdownTabs from '~/lib/mdx/plugins/remarkTabs' - -// We fetch these docs at build time from an external repo -const org = 'supabase' -const repo = 'setup-cli' -const branch = 'gh-pages' -const docsDir = 'docs' -const externalSite = 'https://supabase.github.io/setup-cli' - -// Each external docs page is mapped to a local page -const pageMap = [ - { - slug: 'generating-types', - meta: { - title: 'Generate types using GitHub Actions', - description: 'End-to-end type safety across client, server, and database.', - subtitle: 'End-to-end type safety across client, server, and database.', - tocVideo: 'VSNgAIObBdw', - }, - remoteFile: 'generating-types.md', - }, - { - slug: 'testing', - meta: { - title: 'Automated testing using GitHub Actions', - description: 'Run your tests when you or your team make changes.', - subtitle: 'Run your tests when you or your team make changes.', - }, - remoteFile: 'testing.md', - }, - { - slug: 'backups', - meta: { - title: 'Automated backups using GitHub Actions', - description: 'Backup your database on a regular basis.', - subtitle: 'Backup your database on a regular basis.', - }, - remoteFile: 'backups.md', - }, -] - -interface ActionDocsProps { - source: MDXRemoteSerializeResult - meta: { - title: string - description?: string - } -} - -export default function ActionDocs({ source, meta }: ActionDocsProps) { - return ( - - - - ) -} - -/** - * Fetch markdown from external repo and transform links - */ -export const getStaticProps: GetStaticProps = async ({ params }) => { - const page = pageMap.find(({ slug }) => slug === params.slug) - - if (!page) { - throw new Error(`No page mapping found for slug '${params.slug}'`) - } - - const { remoteFile, meta } = page - - const response = await fetch( - `https://raw.githubusercontent.com/${org}/${repo}/${branch}/${docsDir}/${remoteFile}` - ) - - const source = await response.text() - - const urlTransform: UrlTransformFunction = (url) => { - try { - const externalSiteUrl = new URL(externalSite) - - const placeholderHostname = 'placeholder' - const { hostname, pathname, hash } = new URL(url, `http://${placeholderHostname}`) - - // Don't modify a url with a FQDN or a url that's only a hash - if (hostname !== placeholderHostname || pathname === '/') { - return url - } - - const relativePage = ( - pathname.endsWith('.md') - ? pathname.replace(/\.md$/, '') - : relative(externalSiteUrl.pathname, pathname) - ).replace(/^\//, '') - - const page = pageMap.find(({ remoteFile }) => `${relativePage}.md` === remoteFile) - - // If we have a mapping for this page, use the mapped path - if (page) { - return page.slug + hash - } - - // If we don't have this page in our docs, link to original docs - return `${externalSite}/${relativePage}${hash}` - } catch (err) { - console.error('Error transforming markdown URL', err) - return url - } - } - - const codeHikeOptions: CodeHikeConfig = { - theme: codeHikeTheme, - lineNumbers: true, - showCopyButton: true, - skipLanguages: [], - autoImport: false, - } - - const mdxSource = await serialize(source, { - scope: { - chCodeConfig: codeHikeOptions, - }, - mdxOptions: { - remarkPlugins: [ - remarkGfm, - remarkMkDocsAdmonition, - remarkPyMdownTabs, - [removeTitle, meta.title], - [remarkCodeHike, codeHikeOptions], - ], - rehypePlugins: [[linkTransform, urlTransform], rehypeSlug], - }, - }) - - return { props: { source: mdxSource, meta } } -} - -export const getStaticPaths: GetStaticPaths = async () => { - return { - paths: pageMap.map(({ slug }) => ({ - params: { - slug, - }, - })), - fallback: false, - } -} diff --git a/apps/docs/pages/guides/cli/local-development.mdx b/apps/docs/pages/guides/cli/local-development.mdx deleted file mode 100644 index 8c719d931bed1..0000000000000 --- a/apps/docs/pages/guides/cli/local-development.mdx +++ /dev/null @@ -1,447 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'local-development', - title: 'Local Development', - description: 'How to use Supabase on your local development machine.', - subtitle: 'How to use Supabase on your local development machine.', - video: 'https://www.youtube-nocookie.com/v/vyHyYpvjaks', - tocVideo: 'vyHyYpvjaks', -} - -Supabase is a flexible platform that lets you decide how you want to build your projects. You can use the Dashboard directly to get up and running quickly, or use a proper local setup. We suggest you work locally and deploy your changes to a linked project on the [Supabase Platform](https://app.supabase.io/). - -Doing things directly on the platform via the [Dashboard](https://app.supabase.io/) is fine when you're getting started, but it's a good idea to move to a proper local workflow before you get too far. Working locally, generating migrations as you change your tables, and applying those migrations to a linked project on the [Platform](https://app.supabase.io/) keeps everything nicely organized as you grow. - -## Why develop locally? - -The Dashboard provides a wide range of features for setting up your project: creating tables, adding columns, changing existing columns, creating views, setting up RLS policies, and more. Given all of the Dashboard's capabilities, you might question the need to work locally. Here's a few advantages to working this way: - -1. **Faster Development**: Developing locally allows you to work without any network latency or internet disruptions. - -2. **Easier Collaboration**: Developing locally can make it easier to collaborate with others on the same project. - -3. **Cost-Effective**: Supabase provides a generous free plan and gives you two free projects to get started. But what if you need more than two? When you develop locally, you can spin up unlimited local projects and link them with live projects when you're ready to launch. - -4. **Configuration in code**: If you directly change your tables via the Dashboard, none of that gets captured in code. If you follow these local development practices, you'll store all of your table schemas in code. - -5. **Work offline**: Need to work from a train? A plane? An automobile? No problem. Developing your project locally allows you to work offline. - -## Log in to the Supabase CLI - -```bash -supabase login -``` - - - -If you installed the Supabase CLI via NPM, you will need to run `npx supabase login` instead. - - - -## Initialize your project - -Create a new folder for your project and start a new git repository: - -```bash -# create your project folder -mkdir your-project - -# move into the new folder -cd your-project - -# start a new git repository — important, don't skip this step -git init -``` - -## Start Supabase services - -[Initialize](/docs/reference/cli/usage#supabase-init) Supabase to set up the configuration for developing your project locally: - -```bash -supabase init -``` - -Make sure Docker is running. The [start](/docs/reference/cli/usage#supabase-start) command uses Docker to start the Supabase [services](/docs/guides/getting-started/architecture). -This command may take a while to run if this is the first time using the CLI. - -```bash -supabase start -``` - -Once all of the Supabase services are running, you'll see output containing your local Supabase credentials. It should look like this, with urls and keys that you'll use in your local project: - -``` - -Started supabase local development setup. - - API URL: http://localhost:54321 - DB URL: postgresql://postgres:postgres@localhost:54322/postgres - Studio URL: http://localhost:54323 - Inbucket URL: http://localhost:54324 - anon key: eyJh...... -service_role key: eyJh...... - -``` - -You can use the [`supabase stop`](/docs/reference/cli/usage#supabase-stop) command at any time to stop all services (without resetting your local database). Use `supabase stop --no-backup` to stop all services and reset your local database. - -## Access your project's services - -You can now visit your local Dashboard at [http://localhost:54323](http://localhost:54323), and access the database directly with any Postgres client via `postgresql://postgres:postgres@localhost:54322/postgres`. - - - - -```sh -# Default URL: -postgresql://postgres:postgres@localhost:54322/postgres -``` - -The local Postgres instance can be accessed through [`psql`](https://www.postgresql.org/docs/current/app-psql.html) -or any other Postgres client, such as [pgadmin](https://www.pgadmin.org/). - -For example: - -```bash -psql 'postgresql://postgres:postgres@localhost:54322/postgres' -``` - - - -To access the database from an edge function in your local Supabase setup, replace `localhost` with `host.docker.internal`. - - - - - - -```sh -# Default URL: -http://localhost:54321 -``` - -If you are accessing these services without the client libraries, you may need to pass the client keys as an `Authorization` header. -Learn more about [JWT headers](/docs/learn/auth-deep-dive/auth-deep-dive-jwts). - -```sh -curl 'http://localhost:54321/rest/v1/' \ - -H "apikey: " \ - -H "Authorization: Bearer " - -http://localhost:54321/rest/v1/ # REST (PostgREST) -http://localhost:54321/realtime/v1/ # Realtime -http://localhost:54321/storage/v1/ # Storage -http://localhost:54321/auth/v1/ # Auth (GoTrue) -``` - - - -`` is provided when you run the command `supabase start`. - - - - - - -## Database migrations - -Database changes are managed through "migrations." Database migrations are a common way of tracking changes to your database over time. - -
    - -
    - -For this guide, we'll create a table called `employees` and see how we can make changes to it. - - - - - - - To get started, generate a [new migration](https://supabase.com/docs/reference/cli/supabase-migration-new) to store the SQL needed to create our `employees` table - - - - - -```bash -supabase migration new create_employees_table -``` - - - - - - - - - - - This creates a new migration: supabase/migrations/\ - _create_employees_table.sql. - - To that file, add the SQL to create this `employees` table - - - - ```sql - -create table -employees ( -id bigint primary key generated always as identity, -name text, -email text, -created_at timestamptz default now() -); - -```` - - - - - - - - - - - - - - Now that you have a migration file, you can run this migration and create the `employees` table. - - Use the `reset` command here to reset the database to the current migrations - - - - ```bash -supabase db reset -```` - - - - - - - - - - - Now you can visit your new `employees` table in the Dashboard. - - Next, modify your `employees` table by adding a column for department. Create a new migration file for that. - - - - ```bash - supabase migration new add_department_to_employees_table - -```` - - - - - - - - - - - - This creates a new migration file: supabase/migrations/\ - _add_department_to_employees_table.sql. - - To that file, add the SQL to create a new department column - - - - ```sql -alter table - if exists public.employees add department text default 'Hooli'; -```` - - - - - - -### Add sample data - -Now that you are managing your database with migrations scripts, it would be great have some seed data to use every time you reset the database. - -For this, you can use the seed script in `supabase/seed.sql`. This file was automatically created when you ran [`supabase init`](/docs/reference/cli/usage#supabase-init)) at the beginning. - - - - - - Insert data into your `employees` table with your `supabase/seed.sql` file. - - - - ```sql - --- in supabase/seed.sql -insert into -public.employees (name) -values -('Erlich Bachman'), -('Richard Hendricks'), -('Monica Hall'); - -```` - - - - - - - - - - - Reset your database (apply current migrations), and populate with seed data - - - - ```bash -supabase db reset -```` - - - - - - -You should now see the `employees` table, along with your seed data in the Dashboard! All of your database changes are captured in code, and you can reset to a known state at any time, complete with seed data. - -### Diffing changes - -This workflow is great if you know SQL and are comfortable creating tables and columns. If not, you can still use the Dashboard to create tables and columns, and then use the CLI to diff your changes and create migrations. - -Create a new table called `cities`, with columns `id`, `name` and `population`. To see the corresponding SQL for this, you can use the `supabase db diff --schema public` command. This will show you the SQL that will be run to create the table and columns. The output of `supabase db diff` will look something like this: - -``` -Diffing schemas: public -Finished supabase db diff on branch main. - -create table "public"."cities" ( - "id" bigint primary key generated always as identity, - "name" text, - "population" bigint -); - -``` - -Alternately, you can view your table definitions directly from the Table Editor: - -![SQL Definition](/docs/img/guides/cli/sql-definitions.png) - -You can then copy this SQL into a new migration file, and run `supabase db reset` to apply the changes. - -The last step is deploying these changes to a live Supabase project. - -## Deploy your project - -You've been developing your project locally, making changes to your tables via migrations. It's time to deploy your project to the Supabase Platform and start scaling up to millions of users! Head over to [Supabase](https://supabase.com/dashboard) and create a new project to deploy to. - -### Link your project - -Associate your project with your remote project using [`supabase link`](/docs/reference/cli/usage#supabase-link). - -```bash -supabase link --project-ref -# You can get from your project's dashboard URL: https://supabase.com/dashboard/project/ - -supabase db pull -# Capture any changes that you have made to your remote database before you went through the steps above -# If you have not made any changes to the remote database, skip this step -``` - -`supabase/migrations` is now populated with a migration in `_remote_schema.sql`. -This migration captures any changes required for your local database to match the schema of your remote Supabase project. - - - -There are a few commands required to link your project. We are in the process of consolidating these commands into a single command. Bear with us! - - - -### Deploy database changes - -Deploy any local database migrations using [`db push`](/docs/reference/cli/usage#supabase-db-push): - -```sh -supabase db push -``` - -Visiting your live project on [Supabase](https://supabase.com/dashboard), you'll see a new `employees` table, complete with the `department` column you added in the second migration above. - -### Deploy Edge Functions - -If your project uses Edge Functions, you can deploy these using [`functions deploy`](/docs/reference/cli/usage#supabase-functions-deploy): - -```sh -supabase functions deploy -``` - -### Use Auth locally - -To use Auth locally, update your project's `supabase/config.toml` file that gets created after running `supabase init`. Add any providers you want, and set enabled to `true`. - -```bash supabase/config.toml -[auth.external.github] -enabled = true -client_id = "env(SUPABASE_AUTH_GITHUB_CLIENT_ID)" -secret = "env(SUPABASE_AUTH_GITHUB_SECRET)" -redirect_uri = "http://localhost:54321/auth/v1/callback" -``` - -As a best practice, any secret values should be loaded from environment variables. You can add them to `.env` file in your project's root directory for the CLI to automatically substitute them. - -```bash .env -SUPABASE_AUTH_GITHUB_CLIENT_ID="redacted" -SUPABASE_AUTH_GITHUB_SECRET="redacted" -``` - -For these changes to take effect, you need to run `supabase stop` and `supabase start` again. - -If you have additional triggers or RLS policies defined on your `auth` schema, you can pull them as a migration file locally. - -```bash -supabase db pull --schema auth -``` - -### Local Logging - -Local logs rely on the Supabase Analytics Server, and are available in the Studio automatically. - - - For advanced logs analysis using the Logs Explorer, it is advised to use the BigQuery backend - instead of the default Postgres backend. Read about the steps - [here](https://supabase.com/docs/reference/self-hosting-analytics/introduction#bigquery). - - -Logs will be directed to the Analytics server instead of the docker logging driver. All logs will be stored in the local database under the `_analytics` schema. - -## Limitations and considerations - -The local development environment is not as feature-complete as the Supabase Platform. Here are some of the differences: - -- You cannot update your project settings in the Dashboard. This must be done using the local config file. -- The CLI version determines the local version of Studio used, so make sure you keep your local [Supabase CLI up to date](https://github.com/supabase/cli#getting-started). We're constantly adding new features and bug fixes. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/cli/managing-config.mdx b/apps/docs/pages/guides/cli/managing-config.mdx deleted file mode 100644 index d63eeafd81c5e..0000000000000 --- a/apps/docs/pages/guides/cli/managing-config.mdx +++ /dev/null @@ -1,50 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'managing-config', - title: 'Managing config and secrets', - description: 'Managing local configuration using config.toml.', -} - -The Supabase CLI uses a `config.toml` file to manage local configuration. This file is located in the `supabase` directory of your project. - -## Config reference - -The `config.toml` file is automatically created when you run `supabase start`. - -There are a wide variety of options available, which can be found in the [CLI Config Reference](/docs/guides/cli/config). - -For example, to enable the "Apple" OAuth provider for local development, you can append the following information to `config.toml`: - -```toml -[auth.external.apple] -enabled = false -client_id = "" -secret = "" -redirect_uri = "" # Overrides the default auth redirectUrl. -``` - -## Using secrets inside config.toml - -You can reference environment variables within the `config.toml` file using the `env()` function. This will detect any values stored in an `.env` file at the root of your project directory. This is particularly useful for storing sensitive information like API keys, and any other values that you don't want to check into version control. - -For example, if your `.env` contained the following values: - -```bash -GITHUB_CLIENT_ID="" -GITHUB_SECRET="" -``` - -Then you would reference them inside of our `config.toml` like this: - -```toml -[auth.external.github] -enabled = true -client_id = "env(GITHUB_CLIENT_ID)" -secret = "env(GITHUB_SECRET)" -redirect_uri = "" # Overrides the default auth redirectUrl. -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/cli/managing-environments.mdx b/apps/docs/pages/guides/cli/managing-environments.mdx deleted file mode 100644 index 59bd4ed51fe15..0000000000000 --- a/apps/docs/pages/guides/cli/managing-environments.mdx +++ /dev/null @@ -1,407 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'managing-environments', - title: 'Managing Environments', - description: 'Manage multiple environments using Database Migrations and GitHub Actions.', - subtitle: 'Manage multiple environments using Database Migrations and GitHub Actions.', - video: 'https://www.youtube-nocookie.com/v/rOLyOsBR1Uc', - tocVideo: 'rOLyOsBR1Uc', -} - -This guide shows you how to set up your local Supabase development environment that integrates with GitHub Actions to automatically test and release schema changes to staging and production Supabase projects. - -![Deploy migration](/docs/img/guides/cli/cicd-github.png) - -## Set up a local environment - -The first step is to set up your local repository with the Supabase CLI: - -```bash -supabase init -``` - -You should see a new `supabase` directory. Then you need to link your local repository with your Supabase project: - -```bash -supabase login -supabase link --project-ref $PROJECT_ID -``` - -You can get your `$PROJECT_ID` from your project's dashboard URL: - -``` -https://supabase.com/dashboard/project/ -``` - -If you're using an existing Supabase project, you might have made schema changes through the Dashboard. -Run the following command to pull these changes before making local schema changes from the CLI: - -```sql -supabase db pull -``` - -This command creates a new migration in `supabase/migrations/_remote_schema.sql` which reflects the schema changes you have made previously. - -Now commit your local changes to Git and run the local development setup: - -```bash -git add . -git commit -m "init supabase" -supabase start -``` - -You are now ready to develop schema changes locally and create your first migration. - -## Create a new migration - -There are two ways to make schema changes: - -1. Manual migration: Write DDL statements manually into a migration file -1. Auto schema diff: Make changes through Studio UI and auto generate a schema diff - -### Manual migration - -Create a new migration script by running: - -```bash -supabase migration new new_employee -``` - -You should see a new file created: `supabase/migrations/_new_employee.sql`. You can then write SQL statements in this script using a text editor: - -```sql -create table public.employees ( - id integer primary key generated always as identity, - name text -); -``` - -Apply the new migration to your local database: - -```bash -supabase db reset -``` - -This command recreates your local database from scratch and applies all migration scripts under `supabase/migrations` directory. Now your local database is up to date. - - - -The new migration command also supports stdin as input. -This allows you to pipe in an existing script from another file or stdout: - -`supabase migration new new_employee < create_employees_table.sql` - - - -### Auto schema diff - -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: - -```bash -supabase db diff -f new_employee -``` - -You should see that a new file `supabase/migrations/_new_employee.sql` is created. Open the file and verify that the generated DDL statements are the same as below. - -```sql --- This script was generated by the Schema Diff utility in pgAdmin 4 --- For the circular dependencies, the order in which Schema Diff writes the objects is not very sophisticated --- and may require manual changes to the script to ensure changes are applied in the correct order. --- Please report an issue for any failure with the reproduction steps. - -CREATE TABLE IF NOT EXISTS public.employees -( - id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ), - name text COLLATE pg_catalog."default", - CONSTRAINT employees_pkey PRIMARY KEY (id) -) - -TABLESPACE pg_default; - -ALTER TABLE IF EXISTS public.employees - OWNER to postgres; - -GRANT ALL ON TABLE public.employees TO anon; - -GRANT ALL ON TABLE public.employees TO authenticated; - -GRANT ALL ON TABLE public.employees TO postgres; - -GRANT ALL ON TABLE public.employees TO service_role; -``` - -You may notice that the auto-generated migration script is more verbose than the manually written one. -This is because the default schema diff tool does not account for default privileges added by the initial schema. - -Commit the new migration script to git and you are ready to deploy. - - - -Alternatively, you may pass in the `--use-migra` experimental flag to generate a more concise migration using [migra](https://github.com/djrobstep/migra). -Without the `-f` file flag, the output is written to stdout by default. - -`supabase db diff --use-migra` - - - -## Deploy a migration - -In a production environment, we recommend using a CI/CD pipeline to deploy new migrations with GitHub Actions rather than deploying from your local machine. - -![Deploy migration](/docs/img/guides/cli/cicd-github.png) - -This example uses two Supabase projects, one for production and one for staging. - -Prepare your environments by: - -- Creating separate Supabase projects for staging and production -- Pushing your git repository to GitHub and enabling GitHub Actions - - - -You need a _new_ project for staging. A project which has already been modified to reflect the production project's schema can't be used because the CLI would reapply these changes. - - - -### Configure GitHub Actions - -The Supabase CLI requires a few environment variables to run in non-interactive mode. - -- `SUPABASE_ACCESS_TOKEN` is your personal access token -- `SUPABASE_DB_PASSWORD` is your project specific database password -- `SUPABASE_PROJECT_ID` is your project specific reference string - -We recommend adding these as [encrypted secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) to your GitHub Actions runners. - -Create the following files inside the `.github/workflows` directory: - - - - -```yaml .github/workflows/ci.yml -name: CI - -on: - pull_request: - workflow_dispatch: - -jobs: - test: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - uses: supabase/setup-cli@v1 - with: - version: latest - - - name: Start Supabase local development setup - run: supabase start - - - name: Verify generated types are checked in - run: | - supabase gen types typescript --local > types.gen.ts - if ! git diff --ignore-space-at-eol --exit-code --quiet types.gen.ts; then - echo "Detected uncommitted changes after build. See status below:" - git diff - exit 1 - fi -``` - - - - -```yaml .github/workflows/staging.yml -name: Deploy Migrations to Staging - -on: - push: - branches: - - develop - workflow_dispatch: - -jobs: - deploy: - runs-on: ubuntu-latest - - env: - SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} - SUPABASE_DB_PASSWORD: ${{ secrets.STAGING_DB_PASSWORD }} - SUPABASE_PROJECT_ID: ${{ secrets.STAGING_PROJECT_ID }} - - steps: - - uses: actions/checkout@v3 - - - uses: supabase/setup-cli@v1 - with: - version: latest - - - run: supabase link --project-ref $SUPABASE_PROJECT_ID - - run: supabase db push -``` - - - - -```yaml .github/workflows/production.yml -name: Deploy Migrations to Production - -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - deploy: - runs-on: ubuntu-latest - - env: - SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} - SUPABASE_DB_PASSWORD: ${{ secrets.PRODUCTION_DB_PASSWORD }} - SUPABASE_PROJECT_ID: ${{ secrets.PRODUCTION_PROJECT_ID }} - - steps: - - uses: actions/checkout@v3 - - - uses: supabase/setup-cli@v1 - with: - version: latest - - - run: supabase link --project-ref $SUPABASE_PROJECT_ID - - run: supabase db push -``` - - - - -The full example code is available in the [demo repository](https://github.com/supabase/supabase-action-example). - -Commit these files to git and push to your `main` branch on GitHub. Update these environment variables to match your Supabase projects: - -- `SUPABASE_ACCESS_TOKEN` -- `PRODUCTION_PROJECT_ID` -- `PRODUCTION_DB_PASSWORD` -- `STAGING_PROJECT_ID` -- `STAGING_DB_PASSWORD` - -When configured correctly, your repository will have CI and Release workflows that trigger on new commits pushed to `main` and `develop` branches. - -![Correctly configured repo](/docs/img/guides/cli/ci-main.png) - -### Open a PR with new migration - -Follow the [migration steps](#create-a-new-migration) to create a `supabase/migrations/_new_employee.sql` file. - -Checkout a new branch `feat/employee` from `develop` , commit the migration file, and push to GitHub. - -```bash -git checkout -b feat/employee -git add supabase/migrations/_new_employee.sql -git commit -m "Add employee table" -git push --set-upstream origin feat/employee -``` - -Open a PR from `feat/employee` to the `develop` branch to see that the CI workflow has been triggered. - -Once the test error is resolved, merge this PR and watch the deployment in action. - -### Release to production - -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 - -### Sync production project to staging - -When setting up a new staging project, you might need to sync the initial schema with migrations previously applied to the production project. - -One way is to leverage the Release workflow: - -- Create a new branch `develop` and choose `main` as the branch source -- Push the `develop` branch to GitHub - -The GitHub Actions runner will deploy your existing migrations to the staging project. - -Alternatively, you can also apply migrations through your local CLI to a linked remote database. - -```sql -supabase db push -``` - -Once pushed, check that the migration version is up to date for both local and remote databases. - -```sql -supabase migration list -``` - -### Permission denied on db pull - -If you have been using Supabase hosted projects for a long time, you might encounter the following permission error when executing `db pull`. - -```bash -Error: Error running pg_dump on remote database: pg_dump: error: query failed: ERROR: permission denied for table _type - -pg_dump: error: query was: LOCK TABLE "graphql"."_type" IN ACCESS SHARE MODE -``` - -To resolve this error, you need to grant `postgres` role permissions to `graphql` schema. You can do that by running the following query from Supabase dashboard's SQL Editor. - -```sql -grant all on all tables in schema graphql to postgres, anon, authenticated, service_role; -grant all on all functions in schema graphql to postgres, anon, authenticated, service_role; -grant all on all sequences in schema graphql to postgres, anon, authenticated, service_role; -``` - -### Permission denied on db push - -If you created a table through Supabase dashboard, and your new migration script contains `ALTER TABLE` statements, you might run into permission error when applying them on staging or production databases. - -```bash -ERROR: must be owner of table employees (SQLSTATE 42501); while executing migration -``` - -This is because tables created through Supabase dashboard are owned by `supabase_admin` role while the migration scripts executed through CLI are under `postgres` role. - -One way to solve this is to reassign the owner of those tables to `postgres` role. For example, if your table is named `users` in the public schema, you can run the following command to reassign owner. - -```sql -ALTER TABLE users OWNER TO postgres; -``` - -Apart from tables, you also need to reassign owner of other entities using their respective commands, including [types](https://www.postgresql.org/docs/current/sql-alterschema.html), [functions](https://www.postgresql.org/docs/current/sql-alterroutine.html), and [schemas](https://www.postgresql.org/docs/current/sql-altertype.html). - -### Rebasing new migrations - -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 -git pull -supabase migration new dev_A -# Assume the new file is: supabase/migrations/_dev_A.sql -mv
    - -
    -
    - -
    -
    - - ) -} -``` - - - - -```tsx app/account/account-form.tsx -'use client' -import { useCallback, useEffect, useState } from 'react' -import { Database } from '../database.types' -import { Session, createClientComponentClient } from '@supabase/auth-helpers-nextjs' - -export default function AccountForm({ session }: { session: Session | null }) { - const supabase = createClientComponentClient() - const [loading, setLoading] = useState(true) - const [fullname, setFullname] = useState(null) - const [username, setUsername] = useState(null) - const [website, setWebsite] = useState(null) - const [avatar_url, setAvatarUrl] = useState(null) - const user = session?.user - - const getProfile = useCallback(async () => { - try { - setLoading(true) - - let { data, error, status } = await supabase - .from('profiles') - .select(`full_name, username, website, avatar_url`) - .eq('id', user?.id) - .single() - - if (error && status !== 406) { - throw error - } - - if (data) { - setFullname(data.full_name) - setUsername(data.username) - setWebsite(data.website) - setAvatarUrl(data.avatar_url) - } - } catch (error) { - alert('Error loading user data!') - } finally { - setLoading(false) - } - }, [user, supabase]) - - useEffect(() => { - getProfile() - }, [user, getProfile]) - - async function updateProfile({ - username, - website, - avatar_url, - }: { - username: string | null - fullname: string | null - website: string | null - avatar_url: string | null - }) { - try { - setLoading(true) - - let { error } = await supabase.from('profiles').upsert({ - id: user?.id as string, - full_name: fullname, - username, - website, - avatar_url, - updated_at: new Date().toISOString(), - }) - if (error) throw error - alert('Profile updated!') - } catch (error) { - alert('Error updating the data!') - } finally { - setLoading(false) - } - } - - return ( -
    -
    - - -
    -
    - - setFullname(e.target.value)} - /> -
    -
    - - setUsername(e.target.value)} - /> -
    -
    - - setWebsite(e.target.value)} - /> -
    - -
    - -
    - -
    -
    - -
    -
    -
    - ) -} -``` - -
    - - -Create a account page for the `AccountForm` component we just created - - - - -```jsx app/account/page.jsx -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import AccountForm from './account-form' - -export default async function Account() { - const supabase = createServerComponentClient({ cookies }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - return -} -``` - - - - -```tsx app/account/page.tsx -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { Database } from '../database.types' -import AccountForm from './account-form' - -export default async function Account() { - const supabase = createServerComponentClient({ cookies }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - return -} -``` - - - - -### Launch! - -Now that we have all the pages, route handlers and components in place, let's 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 app/account/avatar.jsx -'use client' -import React, { useEffect, useState } from 'react' -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' -import Image from 'next/image' - -export default function Avatar({ uid, url, size, onUpload }) { - const supabase = createClientComponentClient() - const [avatarUrl, setAvatarUrl] = useState(null) - const [uploading, setUploading] = useState(false) - - useEffect(() => { - 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) - } - } - - if (url) downloadImage(url) - }, [url, supabase]) - - 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 filePath = `${uid}-${Math.random()}.${fileExt}` - - let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file) - - if (uploadError) { - throw uploadError - } - - onUpload(filePath) - } catch (error) { - alert('Error uploading avatar!') - } finally { - setUploading(false) - } - } - - return ( -
    - {avatarUrl ? ( - Avatar - ) : ( -
    - )} -
    - - -
    -
    - ) -} -``` - - - - -```tsx app/account/avatar.tsx -'use client' -import React, { useEffect, useState } from 'react' -import { Database } from '../database.types' -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' -import Image from 'next/image' -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 = createClientComponentClient() - const [avatarUrl, setAvatarUrl] = useState(url) - const [uploading, setUploading] = useState(false) - - useEffect(() => { - 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) - } - } - - if (url) downloadImage(url) - }, [url, supabase]) - - 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 filePath = `${uid}-${Math.random()}.${fileExt}` - - let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file) - - if (uploadError) { - throw uploadError - } - - onUpload(filePath) - } catch (error) { - alert('Error uploading avatar!') - } finally { - setUploading(false) - } - } - - return ( -
    - {avatarUrl ? ( - Avatar - ) : ( -
    - )} -
    - - -
    -
    - ) -} -``` - - - - -### Add the new widget - -And then we can add the widget to the `AccountForm` component: - -```jsx app/account/account-form.js -// Import the new component -import Avatar from './avatar' - -// ... - -return ( -
    - {/* Add to the body */} - { - setAvatarUrl(url) - updateProfile({ fullname, username, website, avatar_url: url }) - }} - /> - {/* ... */} -
    -) -``` - -### Storage management - - - -At this stage you have a fully functional application! - -## See also - -- See the complete [example on GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-user-management) and deploy it to Vercel -- [Build a Twitter Clone with the Next.js App Router and Supabase - free egghead course](https://egghead.io/courses/build-a-twitter-clone-with-the-next-js-app-router-and-supabase-19bebadb) -- Explore the [pre-built Auth UI for React](/docs/guides/auth/auth-helpers/auth-ui) -- Explore the [Auth Helpers for Next.js](/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 - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 1be2aa21b061b..0000000000000 --- a/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx +++ /dev/null @@ -1,444 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Build a User Management App with Nuxt 3', - description: 'Learn how to use Supabase in your Nuxt 3 App.', -} - - - -![Supabase User Management example](/docs/img/user-management-demo.png) - - - If you get stuck while working through this guide, refer to the [full example on - GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nuxt3-user-management). - - - - -## Building the App - -Let's start building the Vue 3 app from scratch. - -### Initialize a Nuxt 3 app - -We can use [`nuxi init`](https://nuxt.com/docs/getting-started/installation) to create an app called `nuxt-user-management`: - -```bash -npx nuxi init nuxt-user-management - -cd nuxt-user-management -``` - -Then let's install the only additional dependency: [NuxtSupabase](https://supabase.nuxtjs.org/). We only need to import NuxtSupabase as a dev dependency. - -```bash -npm install @nuxtjs/supabase --save-dev -``` - -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](#get-the-api-keys). - -```bash .env -SUPABASE_URL="YOUR_SUPABASE_URL" -SUPABASE_KEY="YOUR_SUPABASE_ANON_KEY" -``` - -These variables will be exposed on the browser, and that's completely fine since we have [Row Level Security](/docs/guides/auth#row-level-security) enabled on our Database. -Amazing thing about [NuxtSupabase](https://supabase.nuxtjs.org/) is that setting environment variables is all we need to do in order to start using Supabase. -No need to initialize Supabase. The library will take care of it automatically. - -And one optional step is to update the CSS file `assets/main.css` to make the app look nice. -You can find the full contents of this file [here](https://github.com/supabase-community/nuxt3-quickstarter/blob/main/assets/main.css). - -```typescript nuxt.config.ts -import { defineNuxtConfig } from 'nuxt' - -// https://v3.nuxtjs.org/api/configuration/nuxt.config -export default defineNuxtConfig({ - modules: ['@nuxtjs/supabase'], - css: ['@/assets/main.css'], -}) -``` - -### Set up Auth component - -Let's set up a Vue component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords. - -```vue /components/Auth.vue - - - -``` - -### User state - -To access the user information, use the composable [useSupabaseUser](https://supabase.nuxtjs.org/usage/composables/use-supabase-user) provided by the Supabase Nuxt module. - -### Account component - -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.vue`. - -```vue components/Account.vue - - - -``` - -### Launch! - -Now that we have all the components in place, let's update `app.vue`: - -```vue app.vue - - - -``` - -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. - -![Supabase Nuxt 3](/docs/img/supabase-vue-3-demo.png) - -## 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 for the user so that they can upload a profile photo. We can start by creating a new component: - -```vue components/Avatar.vue - - - -``` - -### Add the new widget - -And then we can add the widget to the Account page: - -```vue components/Account.vue - - - -``` - -### Storage management - - - -That is it! You should now be able to upload a profile photo to Supabase Storage and you have a fully functional application. - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 18030dc0b6e6e..0000000000000 --- a/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx +++ /dev/null @@ -1,399 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Build a User Management App with React', - description: 'Learn how to use Supabase in your React App.', -} - - - -![Supabase User Management example](/docs/img/user-management-demo.png) - - - If you get stuck while working through this guide, refer to the [full example on - GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/react-user-management). - - - - -## Building the App - -Let's start building the React app from scratch. - -### Initialize a React app - -We can use [Vite](https://vitejs.dev/guide/) to initialize -an app called `supabase-react`: - -```bash -npm create vite@latest supabase-react -- --template react -cd supabase-react -``` - -Then let's install the only additional dependency: [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` file. -All we need are the API URL and the `anon` key that you copied [earlier](#get-the-api-keys). - -```bash .env -VITE_SUPABASE_URL=YOUR_SUPABASE_URL -VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY -``` - -Now that we have the API credentials in place, let's create a helper file to initialize the Supabase client. These variables will be exposed -on the browser, and that's completely fine since we have [Row Level Security](/docs/guides/auth#row-level-security) enabled on our Database. - -Create and edit `src/supabaseClient.js`: - -```js src/supabaseClient.js -import { createClient } from '@supabase/supabase-js' - -const supabaseUrl = import.meta.env.VITE_SUPABASE_URL -const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY - -export const supabase = createClient(supabaseUrl, supabaseAnonKey) -``` - -And one optional step is to update the CSS file `src/index.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/react-user-management/src/index.css). - -### Set up a Login component - -Let's set up a React component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords. - -Create and edit `src/Auth.jsx`: - -```jsx src/Auth.jsx -import { useState } from 'react' -import { supabase } from './supabaseClient' - -export default function Auth() { - const [loading, setLoading] = useState(false) - const [email, setEmail] = useState('') - - const handleLogin = async (event) => { - event.preventDefault() - - setLoading(true) - const { error } = await supabase.auth.signInWithOtp({ email }) - - if (error) { - alert(error.error_description || error.message) - } else { - alert('Check your email for the login link!') - } - setLoading(false) - } - - return ( -
    -
    -

    Supabase + React

    -

    Sign in via magic link with your email below

    -
    -
    - setEmail(e.target.value)} - /> -
    -
    - -
    -
    -
    -
    - ) -} -``` - -### 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 `src/Account.jsx`. - -```jsx src/Account.jsx -import { useState, useEffect } from 'react' -import { supabase } from './supabaseClient' - -export default function Account({ session }) { - const [loading, setLoading] = useState(true) - const [username, setUsername] = useState(null) - const [website, setWebsite] = useState(null) - const [avatar_url, setAvatarUrl] = useState(null) - - useEffect(() => { - async function getProfile() { - setLoading(true) - const { user } = session - - let { data, error } = await supabase - .from('profiles') - .select(`username, website, avatar_url`) - .eq('id', user.id) - .single() - - if (error) { - console.warn(error) - } else if (data) { - setUsername(data.username) - setWebsite(data.website) - setAvatarUrl(data.avatar_url) - } - - setLoading(false) - } - - getProfile() - }, [session]) - - async function updateProfile(event, avatarUrl) { - event.preventDefault() - - setLoading(true) - const { user } = session - - const updates = { - id: user.id, - username, - website, - avatarUrl, - updated_at: new Date(), - } - - let { error } = await supabase.from('profiles').upsert(updates) - - if (error) { - alert(error.message) - } else { - setAvatarUrl(avatarUrl) - } - setLoading(false) - } - - return ( -
    -
    - - -
    -
    - - setUsername(e.target.value)} - /> -
    -
    - - setWebsite(e.target.value)} - /> -
    - -
    - -
    - -
    - -
    -
    - ) -} -``` - -### Launch! - -Now that we have all the components in place, let's update `src/App.jsx`: - -```jsx src/App.jsx -import './App.css' -import { useState, useEffect } from 'react' -import { supabase } from './supabaseClient' -import Auth from './Auth' -import Account from './Account' - -function App() { - const [session, setSession] = useState(null) - - useEffect(() => { - supabase.auth.getSession().then(({ data: { session } }) => { - setSession(session) - }) - - supabase.auth.onAuthStateChange((_event, session) => { - setSession(session) - }) - }, []) - - return ( -
    - {!session ? : } -
    - ) -} - -export default App -``` - -Once that's done, run this in a terminal window: - -```bash -npm run dev -``` - -And then open the browser to [localhost:5173](http://localhost:5173) and you should see the completed app. - -![Supabase React](/docs/img/supabase-react-demo.png) - -## 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 for the user so that they can upload a profile photo. We can start by creating a new component: - -Create and edit `src/Avatar.jsx`: - -```jsx src/Avatar.jsx -import { useEffect, useState } from 'react' -import { supabase } from './supabaseClient' - -export default function Avatar({ url, size, onUpload }) { - 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.message) - } - } - - async function uploadAvatar(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 = `${Math.random()}.${fileExt}` - const filePath = `${fileName}` - - let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file) - - if (uploadError) { - throw uploadError - } - - onUpload(event, filePath) - } catch (error) { - alert(error.message) - } finally { - setUploading(false) - } - } - - return ( -
    - {avatarUrl ? ( - Avatar - ) : ( -
    - )} -
    - - -
    -
    - ) -} -``` - -### Add the new widget - -And then we can add the widget to the Account page at `src/Account.jsx`: - -```jsx src/Account.jsx -// Import the new component -import Avatar from './Avatar' - -// ... - -return ( -
    - {/* Add to the body */} - { - updateProfile(event, url) - }} - /> - {/* ... */} -
    -) -``` - -### Storage management - - - -At this stage you have a fully functional application! - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 375198da2f4e6..0000000000000 --- a/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx +++ /dev/null @@ -1,616 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Build a User Management App with RedwoodJS', - description: 'Learn how to use Supabase in your RedwoodJS App.', -} - - - -![Supabase User Management example](/docs/img/user-management-demo.png) - - - If you get stuck while working through this guide, refer to the [full example on - GitHub](https://github.com/redwoodjs/redwoodjs-supabase-quickstart). - - -## About RedwoodJS - -A Redwood application is split into two parts: a frontend and a backend. This is represented as two node projects within a single monorepo. - -The frontend project is called **`web`** and the backend project is called **`api`**. For clarity, we will refer to these in prose as **"sides"**, i.e. the "web side" and the "api side". -They are separate projects because code on the `web side` will end up running in the user's browser while code on the `api side` will run on a server somewhere. - - - -Important: When this guide refers to "API", that means the Supabase API and when it refers to "api side", that means the RedwoodJS `api side`. - - - -The **`api side`** is an implementation of a GraphQL API. The business logic is organized into "services" that represent their own internal API and can be called both from external GraphQL requests and other internal services. - -The **`web side`** is built with React. Redwood's router makes it simple to map URL paths to React "Page" components (and automatically code-split your app on each route). -Pages may contain a "Layout" component to wrap content. They also contain "Cells" and regular React components. -Cells allow you to declaratively manage the lifecycle of a component that fetches and displays data. - -For the sake of consistency with the other framework tutorials, we'll build this app a little differently than normal. -We **_won't use_** Prisma to connect to the Supabase Postgres database or [Prisma migrations](https://redwoodjs.com/docs/cli-commands#prisma-migrate) as one typically might in a Redwood app. -Instead, we'll rely on the Supabase client to do some of the work on the **`web`** side and use the client again on the **`api`** side to do data fetching as well. - -That means you will want to refrain from running any `yarn rw prisma migrate` commands and also double check your build commands on deployment to ensure Prisma won't reset your database. Prisma currently doesn't support cross-schema foreign keys, so introspecting the schema fails due -to how your Supabase `public` schema references the `auth.users`. - - - -## Building the App - -Let's start building the RedwoodJS app from scratch. - - - -RedwoodJS requires Node.js `>= 14.x <= 16.x` and Yarn `>= 1.15`. - - - -Make sure you have installed yarn since RedwoodJS relies on it to [manage its packages in workspaces](https://classic.yarnpkg.com/lang/en/docs/workspaces/) for its `web` and `api` "sides". - -### Initialize a RedwoodJS app - -We can use [Create Redwood App](https://redwoodjs.com/docs/quick-start) command to initialize -an app called `supabase-redwoodjs`: - -```bash -yarn create redwood-app supabase-redwoodjs -cd supabase-redwoodjs -``` - -While the app is installing, you should see: - -```bash -✔ Creating Redwood app - ✔ Checking node and yarn compatibility - ✔ Creating directory 'supabase-redwoodjs' -✔ Installing packages - ✔ Running 'yarn install'... (This could take a while) -✔ Convert TypeScript files to JavaScript -✔ Generating types - -Thanks for trying out Redwood! -``` - -Then let's install the only additional dependency [supabase-js](https://github.com/supabase/supabase-js) by running the `setup auth` command: - -```bash -yarn redwood setup auth supabase -``` - -When prompted: - -> Overwrite existing /api/src/lib/auth.[jt]s? - -Say, **yes** and it will setup the Supabase client in your app and also provide hooks used with Supabase authentication. - -```bash -✔ Generating auth lib... - ✔ Successfully wrote file `./api/src/lib/auth.js` - ✔ Adding auth config to web... - ✔ Adding auth config to GraphQL API... - ✔ Adding required web packages... - ✔ Installing packages... - ✔ One more thing... - - You will need to add your Supabase URL (SUPABASE_URL), public API KEY, - and JWT SECRET (SUPABASE_KEY, and SUPABASE_JWT_SECRET) to your .env file. -``` - -Next, we want to save the environment variables in a `.env`. -We need the `API URL` as well as the `anon` and `jwt_secret` keys that you copied [earlier](#get-the-api-keys). - -```bash .env -SUPABASE_URL=YOUR_SUPABASE_URL -SUPABASE_KEY=YOUR_SUPABASE_ANON_KEY -SUPABASE_JWT_SECRET=YOUR_SUPABASE_JWT_SECRET -``` - -And finally, you will also need to save **just** the `web side` environment variables to the `redwood.toml`. - -```bash redwood.toml -[web] - title = "Supabase Redwood Tutorial" - port = 8910 - apiProxyPath = "/.redwood/functions" - includeEnvironmentVariables = ["SUPABASE_URL", "SUPABASE_KEY"] -[api] - port = 8911 -[browser] - open = true -``` - -These variables will be exposed on the browser, and that's completely fine. -They allow your web app to initialize the Supabase client with your public anon key -since we have [Row Level Security](/docs/guides/auth#row-level-security) enabled on our Database. - -You'll see these being used to configure your Supabase client in `web/src/App.js`: - -```js web/src/App.js -// ... Redwood imports -import { AuthProvider } from '@redwoodjs/auth' -import { createClient } from '@supabase/supabase-js' - -// ... - -const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_KEY) - -const App = () => ( - - - - - - - - - -) - -export default App -``` - -And one optional step is to update the CSS file `web/src/index.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/react-user-management/src/index.css). - -### Start RedwoodJS and your first Page - -Let's test our setup at the moment by starting up the app: - -```bash -yarn rw dev -``` - - - `rw` is an alias for `redwood`, as in `yarn rw` to run Redwood CLI commands. - - -You should see a "Welcome to RedwoodJS" page and a message about not having any pages yet. - -So, let's create a "home" page: - -```bash -yarn rw generate page home / - -✔ Generating page files... - ✔ Successfully wrote file `./web/src/pages/HomePage/HomePage.stories.js` - ✔ Successfully wrote file `./web/src/pages/HomePage/HomePage.test.js` - ✔ Successfully wrote file `./web/src/pages/HomePage/HomePage.js` -✔ Updating routes file... -✔ Generating types ... -``` - - - -The `/` is important here as it creates a root level route. - - - -You can stop the `dev` server if you want; to see your changes, just be sure to run `yarn rw dev` again. - -You should see the `Home` page route in `web/src/Routes.js`: - -```bash web/src/Routes.js -import { Router, Route } from '@redwoodjs/router' - -const Routes = () => { - return ( - - - - - ) -} - -export default Routes -``` - -### Set up a Login component - -Let's set up a Redwood component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords. - -```bash -yarn rw g component auth - - ✔ Generating component files... - ✔ Successfully wrote file `./web/src/components/Auth/Auth.test.js` - ✔ Successfully wrote file `./web/src/components/Auth/Auth.stories.js` - ✔ Successfully wrote file `./web/src/components/Auth/Auth.js` - -``` - -Now, update the `Auth.js` component to contain: - -```jsx /web/src/components/Auth/Auth.js -import { useState } from 'react' -import { useAuth } from '@redwoodjs/auth' - -const Auth = () => { - const { logIn } = useAuth() - const [loading, setLoading] = useState(false) - const [email, setEmail] = useState('') - - const handleLogin = async (email) => { - try { - setLoading(true) - const { error } = await logIn({ email }) - if (error) throw error - alert('Check your email for the login link!') - } catch (error) { - alert(error.error_description || error.message) - } finally { - setLoading(false) - } - } - - return ( -
    -
    -

    Supabase + RedwoodJS

    -

    Sign in via magic link with your email below

    -
    - setEmail(e.target.value)} - /> -
    -
    - -
    -
    -
    - ) -} - -export default Auth -``` - -### Set up an Account component - -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`. - -```bash -yarn rw g component account - - ✔ Generating component files... - ✔ Successfully wrote file `./web/src/components/Account/Account.test.js` - ✔ Successfully wrote file `./web/src/components/Account/Account.stories.js` - ✔ Successfully wrote file `./web/src/components/Account/Account.js` -``` - -And then update the file to contain: - -```jsx web/src/components/Account/Account.js -import { useState, useEffect } from 'react' -import { useAuth } from '@redwoodjs/auth' - -const Account = () => { - const { client: supabase, currentUser, logOut } = useAuth() - const [loading, setLoading] = useState(true) - const [username, setUsername] = useState(null) - const [website, setWebsite] = useState(null) - const [avatar_url, setAvatarUrl] = useState(null) - - useEffect(() => { - getProfile() - }, [supabase.auth.session]) - - async function getProfile() { - try { - setLoading(true) - const user = supabase.auth.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.message) - } finally { - setLoading(false) - } - } - - async function updateProfile({ username, website, avatar_url }) { - try { - setLoading(true) - const user = supabase.auth.user() - - const updates = { - id: user.id, - username, - website, - avatar_url, - updated_at: new Date(), - } - - let { error } = await supabase.from('profiles').upsert(updates, { - returning: 'minimal', // Don't return the value after inserting - }) - - if (error) { - throw error - } - - alert('Updated profile!') - } catch (error) { - alert(error.message) - } finally { - setLoading(false) - } - } - - return ( -
    -
    -

    Supabase + RedwoodJS

    -

    Your profile

    -
    -
    - - -
    -
    - - setUsername(e.target.value)} - /> -
    -
    - - setWebsite(e.target.value)} - /> -
    - -
    - -
    - -
    - -
    -
    -
    -
    - ) -} - -export default Account -``` - -You'll see the use of `useAuth()` several times. Redwood's `useAuth` hook provides convenient ways to access -logIn, logOut, currentUser, and access the `supabase` authenticate client. We'll use it to get an instance -of the supabase client to interact with your API. - -### Update Home Page - -Now that we have all the components in place, let's update your `HomePage` page to use them: - -```jsx web/src/pages/HomePage/HomePage.js -import { useAuth } from '@redwoodjs/auth' -import { MetaTags } from '@redwoodjs/web' - -import Account from 'src/components/Account' -import Auth from 'src/components/Auth' - -const HomePage = () => { - const { isAuthenticated } = useAuth() - - return ( - <> - - {!isAuthenticated ? : } - - ) -} - -export default HomePage -``` - -> What we're doing here is showing the sign in form if you aren't logged in and your account profile if you are. - -### Launch! - -Once that's done, run this in a terminal window to launch the `dev` server: - -```bash -yarn rw dev -``` - -And then open the browser to [localhost:8910](http://localhost:8910) and you should see the completed app. - -![Supabase RedwoodJS](/docs/img/supabase-redwoodjs-demo.png) - -## 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 for the user so that they can upload a profile photo. We can start by creating a new component: - -```bash -yarn rw g component avatar - ✔ Generating component files... - ✔ Successfully wrote file `./web/src/components/Avatar/Avatar.test.js` - ✔ Successfully wrote file `./web/src/components/Avatar/Avatar.stories.js` - ✔ Successfully wrote file `./web/src/components/Avatar/Avatar.js` -``` - -Now, update your Avatar component to contain the following widget: - -```jsx web/src/components/Avatar/Avatar.js -import { useEffect, useState } from 'react' -import { useAuth } from '@redwoodjs/auth' - -const Avatar = ({ url, size, onUpload }) => { - const { client: supabase } = useAuth() - - 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.message) - } - } - - async function uploadAvatar(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 = `${Math.random()}.${fileExt}` - const filePath = `${fileName}` - - let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file) - - if (uploadError) { - throw uploadError - } - - onUpload(filePath) - } catch (error) { - alert(error.message) - } finally { - setUploading(false) - } - } - - return ( -
    - {avatarUrl ? ( - Avatar - ) : ( -
    - )} -
    - - -
    -
    - ) -} - -export default Avatar -``` - -### Add the new widget - -And then we can add the widget to the Account component: - -```jsx web/src/components/Account/Account.js -// Import the new component -import Avatar from 'src/components/Avatar' - -// ... - -return ( -
    - {/* Add to the body */} - { - setAvatarUrl(url) - updateProfile({ username, website, avatar_url: url }) - }} - /> - {/* ... */} -
    -) -``` - -### Storage management - - - -At this stage you have a fully functional application! - -## See also - -- Learn more about [RedwoodJS](https://redwoodjs.com) -- Visit the [RedwoodJS Discourse Community](https://community.redwoodjs.com) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-refine.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-refine.mdx deleted file mode 100644 index 5c1487153f2db..0000000000000 --- a/apps/docs/pages/guides/getting-started/tutorials/with-refine.mdx +++ /dev/null @@ -1,638 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Build a User Management App with refine', - description: 'Learn how to use Supabase in your refine App.', -} - - - -![Supabase User Management example](/docs/img/user-management-demo.png) - - - If you get stuck while working through this guide, refer to the [full example on - GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/refine-user-management). - - -## About refine - -[refine](https://github.com/refinedev/refine) is a React-based framework used to rapidly build data-heavy applications like admin panels, dashboards, storefronts and any type of CRUD apps. It separates app concerns into individual layers, each backed by a React context and respective provider object. For example, the auth layer represents a context served by a specific set of [`authProvider`](https://refine.dev/docs/tutorial/understanding-authprovider/index/) methods that carry out authentication and authorization actions such as logging in, logging out, getting roles data, etc. Similarly, the data layer offers another level of abstraction that is equipped with [`dataProvider`](https://refine.dev/docs/tutorial/understanding-dataprovider/index/) methods to handle CRUD operations at appropriate backend API endpoints. - -refine provides hassle-free integration with Supabase backend with its supplementary [`@refinedev/supabase`](https://github.com/refinedev/refine/tree/master/packages/supabase) package. It generates `authProvider` and `dataProvider` methods at project initialization, so we don't need to expend much effort to define them ourselves. We just need to choose Supabase as our backend service while creating the app with `create refine-app`. - - - It is possible to customize the `authProvider` for Supabase and as we'll see below, it can be - tweaked from `src/authProvider.ts` file. In contrast, the Supabase `dataProvider` is part of - `node_modules` and therefore is not subject to modification. - - - - -## Building the App - -Let's start building the refine app from scratch. - -### Initialize a refine app - -We can use [create refine-app](https://refine.dev/docs/tutorial/getting-started/headless/create-project/#launch-the-refine-cli-setup) command to initialize -an app. Run the following in the terminal: - -```bash -npm create refine-app@latest -- --preset refine-supabase -``` - -In the above command, we are using the `refine-supabase` preset which chooses the Supabase supplementary package for our app. We are not using any UI framework, so we'll have a headless UI with plain React and CSS styling. - -The `refine-supabase` preset installs the `@refinedev/supabase` package which out-of-the-box includes the Supabase dependency: [supabase-js](https://github.com/supabase/supabase-js). - -We also need to install `@refinedev/react-hook-form` and `react-hook-form` packages that allow us to use [React Hook Form](https://react-hook-form.com) inside refine apps. Run: - -```bash -npm install @refinedev/react-hook-form react-hook-form -``` - -With the app initialized and packages installed, at this point before we begin discussing refine concepts, let's try running the app: - -```bash -cd app-name -npm run dev -``` - -We should have a running instance of the app with a Welcome page at `http://localhost:5173`. - -Let's move ahead to understand the generated code now. - -### refine `supabaseClient` - -The `create refine-app` generated a Supabase client for us in the `src/utility/supabaseClient.ts` file. It has two constants: `SUPABASE_URL` and `SUPABASE_KEY`. We want to replace them as `supabaseUrl` and `supabaseAnonKey` respectively and assign them our own Supabase server's values. - -We'll update it with environment variables managed by Vite: - -```ts src/utility/supabaseClient.ts -import { createClient } from '@refinedev/supabase' - -const supabaseUrl = import.meta.env.VITE_SUPABASE_URL -const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY - -export const supabaseClient = createClient(supabaseUrl, supabaseAnonKey, { - db: { - schema: 'public', - }, - auth: { - persistSession: true, - }, -}) -``` - -And then, we want to save the environment variables in a `.env.local` file. All you need are the API URL and the `anon` key that you copied [earlier](#get-the-api-keys). - -```bash .env.local -VITE_SUPABASE_URL=YOUR_SUPABASE_URL -VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY -``` - -The `supabaseClient` will be used in fetch calls to Supabase endpoints from our app. As we'll see below, the client is instrumental in implementing authentication using refine's auth provider methods and CRUD actions with appropriate data provider methods. - -One optional step is to update the CSS file `src/App.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/refine-user-management/src/App.css). - -In order for us to add login and user profile pages in this App, we have to tweak the `` component inside `App.tsx`. - -### The `` Component - -The `App.tsx` file initially looks like this: - -```tsx src/App.tsx -import { Refine, WelcomePage } from '@refinedev/core' -import { RefineKbar, RefineKbarProvider } from '@refinedev/kbar' -import routerBindings, { - DocumentTitleHandler, - UnsavedChangesNotifier, -} from '@refinedev/react-router-v6' -import { dataProvider, liveProvider } from '@refinedev/supabase' -import { BrowserRouter, Route, Routes } from 'react-router-dom' - -import './App.css' -import authProvider from './authProvider' -import { supabaseClient } from './utility' - -function App() { - return ( - - - - - } /> - - - - - - - - ) -} - -export default App -``` - -We'd like to focus on the [``](https://refine.dev/docs/api-reference/core/components/refine-config/) component, which comes with several props passed to it. Notice the `dataProvider` prop. It uses a `dataProvider()` function with `supabaseClient` passed as argument to generate the data provider object. The `authProvider` object also uses `supabaseClient` in implementing its methods. You can look it up in `src/authProvider.ts` file. - -## Customize `authProvider` - -If you examine the `authProvider` object you can notice that it has a `login` method that implements a OAuth and Email / Password strategy for authentication. We'll, however, remove them and use Magic Links to allow users sign in with their email without using passwords. - -We want to use `supabaseClient` auth's `signInWithOtp` method inside `authProvider.login` method: - -```ts -login: async ({ email }) => { - try { - const { error } = await supabaseClient.auth.signInWithOtp({ email }); - - if (!error) { - alert("Check your email for the login link!"); - return { - success: true, - }; - }; - - throw error; - } catch (e: any) { - alert(e.message); - return { - success: false, - e, - }; - } -}, -``` - -We also want to remove `register`, `updatePassword`, `forgotPassword` and `getPermissions` properties, which are optional type members and also not necessary for our app. The final `authProvider` object looks like this: - -```ts src/authProvider.ts -import { AuthBindings } from '@refinedev/core' - -import { supabaseClient } from './utility' - -const authProvider: AuthBindings = { - login: async ({ email }) => { - try { - const { error } = await supabaseClient.auth.signInWithOtp({ email }) - - if (!error) { - alert('Check your email for the login link!') - return { - success: true, - } - } - - throw error - } catch (e: any) { - alert(e.message) - return { - success: false, - e, - } - } - }, - logout: async () => { - const { error } = await supabaseClient.auth.signOut() - - if (error) { - return { - success: false, - error, - } - } - - return { - success: true, - redirectTo: '/', - } - }, - onError: async (error) => { - console.error(error) - return { error } - }, - check: async () => { - try { - const { data } = await supabaseClient.auth.getSession() - const { session } = data - - if (!session) { - return { - authenticated: false, - error: { - message: 'Check failed', - name: 'Session not found', - }, - logout: true, - redirectTo: '/login', - } - } - } catch (error: any) { - return { - authenticated: false, - error: error || { - message: 'Check failed', - name: 'Not authenticated', - }, - logout: true, - redirectTo: '/login', - } - } - - return { - authenticated: true, - } - }, - getIdentity: async () => { - const { data } = await supabaseClient.auth.getUser() - - if (data?.user) { - return { - ...data.user, - name: data.user.email, - } - } - - return null - }, -} - -export default authProvider -``` - -### Set up a Login component - -We have chosen to use the headless refine core package that comes with no supported UI framework. So, let's set up a plain React component to manage logins and sign ups. - -Create and edit `src/components/auth.tsx`: - -```ts src/components/auth.tsx -import { useState } from 'react' -import { useLogin } from '@refinedev/core' - -export default function Auth() { - const [email, setEmail] = useState('') - const { isLoading, mutate: login } = useLogin() - - const handleLogin = async (event: { preventDefault: () => void }) => { - event.preventDefault() - login({ email }) - } - - return ( -
    -
    -

    Supabase + refine

    -

    Sign in via magic link with your email below

    - -
    - setEmail(e.target.value)} - /> -
    -
    - -
    - -
    -
    - ) -} -``` - -Notice we are using the [`useLogin()`](https://refine.dev/docs/api-reference/core/hooks/authentication/useLogin/) refine auth hook to grab the `mutate: login` method to use inside `handleLogin()` function and `isLoading` state for our form submission. The `useLogin()` hook conveniently offers us access to `authProvider.login` method for authenticating the user with OTP. - -### 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 in `src/components/account.tsx`. - -```tsx src/components/account.tsx -import { BaseKey, useGetIdentity, useLogout } from '@refinedev/core' -import { useForm } from '@refinedev/react-hook-form' - -interface IUserIdentity { - id?: BaseKey - username: string - name: string -} - -export interface IProfile { - id?: string - username?: string - website?: string - avatar_url?: string -} - -export default function Account() { - const { data: userIdentity } = useGetIdentity() - - const { mutate: logOut } = useLogout() - - const { - refineCore: { formLoading, queryResult, onFinish }, - register, - control, - handleSubmit, - } = useForm({ - refineCoreProps: { - resource: 'profiles', - action: 'edit', - id: userIdentity?.id, - redirect: false, - onMutationError: (data) => alert(data?.message), - }, - }) - - return ( -
    -
    -
    - - -
    -
    - - -
    -
    - - -
    - -
    - -
    - -
    - -
    -
    -
    - ) -} -``` - -Notice above that, we are using three refine hooks, namely the [`useGetIdentity()`](https://refine.dev/docs/api-reference/core/hooks/authentication/useGetIdentity/), [`useLogOut()`](https://refine.dev/docs/api-reference/core/hooks/authentication/useLogout/) and [`useForm()`](https://refine.dev/docs/packages/documentation/react-hook-form/useForm/) hooks. - -`useGetIdentity()` is a auth hook that gets the identity of the authenticated user. It grabs the current user by invoking the `authProvider.getIdentity` method under the hood. - -`useLogOut()` is also an auth hook. It calls the `authProvider.logout` method to end the session. - -`useForm()`, in contrast, is a data hook that exposes a series of useful objects that serve the edit form. For example, we are grabbing the `onFinish` function to submit the form with the `handleSubmit` event handler. We are aslo using `formLoading` property to present state changes of the submitted form. - -The `useForm()` hook is a higher-level hook built on top of refine's `useForm()` core hook. It fully supports form state management, field validation and submission using React Hook Form. Behind the scenes, it invokes the `dataProvider.getOne` method to get the user profile data from our Supabase `/profiles` endpoint and also invokes `dataProvider.update` method when `onFinish()` is called. - -### Launch! - -Now that we have all the components in place, let's define the routes for the pages in which they should be rendered. - -Add the routes for `/login` with the `` component and the routes for `index` path with the `` component. So, the final `App.tsx`: - -```tsx src/App.tsx -import { Authenticated, Refine } from '@refinedev/core' -import { RefineKbar, RefineKbarProvider } from '@refinedev/kbar' -import routerBindings, { - CatchAllNavigate, - DocumentTitleHandler, - UnsavedChangesNotifier, -} from '@refinedev/react-router-v6' -import { dataProvider, liveProvider } from '@refinedev/supabase' -import { BrowserRouter, Outlet, Route, Routes } from 'react-router-dom' - -import './App.css' -import authProvider from './authProvider' -import { supabaseClient } from './utility' -import Account from './components/account' -import Auth from './components/auth' - -function App() { - return ( - - - - - }> - - - } - > - } /> - - } />}> - } /> - - - - - - - - - ) -} - -export default App -``` - -Let's test the App by running the server again: - -```bash -npm run dev -``` - -And then open the browser to [localhost:5173](http://localhost:5173) and you should see the completed app. - -![Supabase refine](/docs/img/supabase-refine-demo.png) - -## 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 for the user so that they can upload a profile photo. We can start by creating a new component: - -Create and edit `src/components/avatar.tsx`: - -```tsx src/components/avatar.tsx -import { useEffect, useState } from 'react' -import { supabaseClient } from '../utility/supabaseClient' - -type TAvatarProps = { - url?: string - size: number - onUpload: (filePath: string) => void -} - -export default function Avatar({ url, size, onUpload }: TAvatarProps) { - const [avatarUrl, setAvatarUrl] = useState('') - const [uploading, setUploading] = useState(false) - - useEffect(() => { - if (url) downloadImage(url) - }, [url]) - - async function downloadImage(path: string) { - try { - const { data, error } = await supabaseClient.storage.from('avatars').download(path) - if (error) { - throw error - } - const url = URL.createObjectURL(data) - setAvatarUrl(url) - } catch (error: any) { - console.log('Error downloading image: ', error?.message) - } - } - - async function uploadAvatar(event: React.ChangeEvent) { - 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 = `${Math.random()}.${fileExt}` - const filePath = `${fileName}` - - const { error: uploadError } = await supabaseClient.storage - .from('avatars') - .upload(filePath, file) - - if (uploadError) { - throw uploadError - } - onUpload(filePath) - } catch (error: any) { - alert(error.message) - } finally { - setUploading(false) - } - } - - return ( -
    - {avatarUrl ? ( - Avatar - ) : ( -
    - )} -
    - - -
    -
    - ) -} -``` - -### Add the new widget - -And then we can add the widget to the Account page at `src/components/account.tsx`: - -```tsx src/components/account.tsx -// Import the new components -import { Controller } from 'react-hook-form' -import Avatar from './avatar' - -// ... - -return ( -
    -
    - { - return ( - { - onFinish({ - ...queryResult?.data?.data, - avatar_url: filePath, - onMutationError: (data: { message: string }) => alert(data?.message), - }) - field.onChange({ - target: { - value: filePath, - }, - }) - }} - /> - ) - }} - /> - {/* ... */} - -
    -) -``` - -### Storage management - - - -At this stage, you have a fully functional application! - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 759c23685ce2b..0000000000000 --- a/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx +++ /dev/null @@ -1,425 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Build a User Management App with SolidJS', - description: 'Learn how to use Supabase in your SolidJS App.', -} - - - -![Supabase User Management example](/docs/img/user-management-demo.png) - - - If you get stuck while working through this guide, refer to the [full example on - GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/solid-user-management). - - - - -## Building the App - -Let's start building the SolidJS app from scratch. - -### Initialize a SolidJS app - -We can use [Degit](https://github.com/Rich-Harris/degit) to initialize an app called `supabase-solid`: - -```bash -npx degit solidjs/templates/ts supabase-solid -cd supabase-solid -``` - -Then let's install the only additional dependency: [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`. -All we need are the API URL and the `anon` key that you copied [earlier](#get-the-api-keys). - -```bash .env -VITE_SUPABASE_URL=YOUR_SUPABASE_URL -VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY -``` - -Now that we have the API credentials in place, let's create a helper file to initialize the Supabase client. These variables will be exposed -on the browser, and that's completely fine since we have [Row Level Security](/docs/guides/auth#row-level-security) enabled on our Database. - -```js src/supabaseClient.jsx -import { createClient } from '@supabase/supabase-js' - -const supabaseUrl = import.meta.env.VITE_SUPABASE_URL -const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY - -export const supabase = createClient(supabaseUrl, supabaseAnonKey) -``` - -And one optional step is to update the CSS file `src/index.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/solid-user-management/src/index.css). - -### Set up a Login component - -Let's set up a SolidJS component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords. - -```jsx src/Auth.tsx -import { createSignal } from 'solid-js' -import { supabase } from './supabaseClient' - -export default function Auth() { - const [loading, setLoading] = createSignal(false) - const [email, setEmail] = createSignal('') - - const handleLogin = async (e: SubmitEvent) => { - e.preventDefault() - - try { - setLoading(true) - const { error } = await supabase.auth.signInWithOtp({ email: email() }) - if (error) throw error - alert('Check your email for the login link!') - } catch (error) { - if (error instanceof Error) { - alert(error.message) - } - } finally { - setLoading(false) - } - } - - return ( -
    -
    -

    Supabase + SolidJS

    -

    Sign in via magic link with your email below

    -
    -
    - - setEmail(e.currentTarget.value)} - /> -
    -
    - -
    -
    -
    -
    - ) -} -``` - -### 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.tsx`. - -```tsx src/Account.tsx -import { AuthSession } from '@supabase/supabase-js' -import { Component, createEffect, createSignal } from 'solid-js' -import { supabase } from './supabaseClient' - -interface Props { - session: AuthSession -} - -const Account: Component = ({ session }) => { - const [loading, setLoading] = createSignal(true) - const [username, setUsername] = createSignal(null) - const [website, setWebsite] = createSignal(null) - const [avatarUrl, setAvatarUrl] = createSignal(null) - - createEffect(() => { - getProfile() - }) - - const getProfile = async () => { - try { - setLoading(true) - const { user } = session - - 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) { - if (error instanceof Error) { - alert(error.message) - } - } finally { - setLoading(false) - } - } - - const updateProfile = async (e: Event) => { - e.preventDefault() - - try { - setLoading(true) - const { user } = session - - const updates = { - id: user.id, - username: username(), - website: website(), - avatar_url: avatarUrl(), - updated_at: new Date().toISOString(), - } - - let { error } = await supabase.from('profiles').upsert(updates) - - if (error) { - throw error - } - } catch (error) { - if (error instanceof Error) { - alert(error.message) - } - } finally { - setLoading(false) - } - } - - return ( -
    -
    -
    Email: {session.user.email}
    -
    - - setUsername(e.currentTarget.value)} - /> -
    -
    - - setWebsite(e.currentTarget.value)} - /> -
    -
    - -
    - -
    -
    - ) -} - -export default Account -``` - -### Launch! - -Now that we have all the components in place, let's update `App.tsx`: - -```jsx src/App.tsx -import { Component, createEffect, createSignal } from 'solid-js' -import { supabase } from './supabaseClient' -import { AuthSession } from '@supabase/supabase-js' -import Account from './Account' -import Auth from './Auth' - -const App: Component = () => { - const [session, setSession] = createSignal(null) - - createEffect(() => { - supabase.auth.getSession().then(({ data: { session } }) => { - setSession(session) - }) - - supabase.auth.onAuthStateChange((_event, session) => { - setSession(session) - }) - }) - - return ( -
    - {!session() ? : } -
    - ) -} - -export default App -``` - -Once that's done, run this in a terminal window: - -```bash -npm start -``` - -And then open the browser to [localhost:3000](http://localhost:3000) and you should see the completed app. - -![Supabase SolidJS](/docs/img/supabase-solidjs-demo.png) - -## 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 for the user so that they can upload a profile photo. We can start by creating a new component: - -```jsx src/Avatar.tsx -import { Component, createEffect, createSignal, JSX } from 'solid-js' -import { supabase } from './supabaseClient' - -interface Props { - size: number - url: string | null - onUpload: (event: Event, filePath: string) => void -} - -const Avatar: Component = (props) => { - const [avatarUrl, setAvatarUrl] = createSignal(null) - const [uploading, setUploading] = createSignal(false) - - createEffect(() => { - if (props.url) downloadImage(props.url) - }) - - const downloadImage = async (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) { - if (error instanceof Error) { - console.log('Error downloading image: ', error.message) - } - } - } - - const uploadAvatar: JSX.EventHandler = async (event) => { - try { - setUploading(true) - - const target = event.currentTarget - if (!target?.files || target.files.length === 0) { - throw new Error('You must select an image to upload.') - } - - const file = target.files[0] - const fileExt = file.name.split('.').pop() - const fileName = `${Math.random()}.${fileExt}` - const filePath = `${fileName}` - - let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file) - - if (uploadError) { - throw uploadError - } - - props.onUpload(event, filePath) - } catch (error) { - if (error instanceof Error) { - alert(error.message) - } - } finally { - setUploading(false) - } - } - - return ( -
    - {avatarUrl() ? ( - {avatarUrl() - ) : ( -
    - )} -
    - - - - -
    -
    - ) -} - -export default Avatar -``` - -### Add the new widget - -And then we can add the widget to the Account page: - -```jsx src/Account.tsx -// Import the new component -import Avatar from './Avatar' - -// ... - -return ( -
    - {/* Add to the body */} - { - setAvatarUrl(url) - updateProfile(e) - }} - /> - {/* ... */} -
    -) -``` - -### Storage management - - - -At this stage you have a fully functional application! - -export const Page = ({ children }) => - -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 deleted file mode 100644 index ceb11321c7452..0000000000000 --- a/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx +++ /dev/null @@ -1,378 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Build a User Management App with Svelte', - description: 'Learn how to use Supabase in your Svelte App.', -} - - - -![Supabase User Management example](/docs/img/user-management-demo.png) - - - If you get stuck while working through this guide, refer to the [full example on - GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/svelte-user-management). - - - - -## Building the App - -Let's start building the Svelte app from scratch. - -### Initialize a Svelte app - -We can use the Vite Svelte TypeScript Template to initialize an app called `supabase-svelte`: - -```bash -npm create vite@latest supabase-svelte -- --template svelte-ts -cd supabase-svelte -npm install -``` - -Then let's install the only additional dependency: [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`. -All we need are the API URL and the `anon` key that you copied [earlier](#get-the-api-keys). - -```bash .env -VITE_SUPABASE_URL=YOUR_SUPABASE_URL -VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY -``` - -Now that we have the API credentials in place, let's create a helper file to initialize the Supabase client. These variables will be exposed -on the browser, and that's completely fine since we have [Row Level Security](/docs/guides/auth#row-level-security) enabled on our Database. - -```js src/supabaseClient.ts -import { createClient } from '@supabase/supabase-js' - -const supabaseUrl = import.meta.env.VITE_SUPABASE_URL -const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY - -export const supabase = createClient(supabaseUrl, supabaseAnonKey) -``` - -And one optional step is to update the CSS file `src/app.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/svelte-user-management/src/app.css). - -### Set up a Login component - -Let's set up a Svelte component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords. - -```html src/lib/Auth.svelte - - -
    -
    -

    Supabase + Svelte

    -

    Sign in via magic link with your email below

    - -
    - - -
    -
    - -
    - -
    -
    -``` - -### 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.svelte`. - -```html src/lib/Account.svelte - - -
    -
    Email: {session.user.email}
    -
    - - -
    -
    - - -
    -
    - -
    - -
    -``` - -### Launch! - -Now that we have all the components in place, let's update `App.svelte`: - -```html src/App.svelte - - -
    - {#if !session} - - {:else} - - {/if} -
    -``` - -Once that's done, run this in a terminal window: - -```bash -npm run dev -``` - -And then open the browser to [localhost:5173](http://localhost:5173) and you should see the completed app. - -> ⚠️ WARNING: Svelte uses Vite and the default port is `5173`, Supabase uses `port 3000`. To change the redirection port for supabase go to: `Authentication > Settings` and change the `Site Url` to `localhost:5173` - -![Supabase Svelte](/docs/img/supabase-svelte-demo.png) - -## 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 for the user so that they can upload a profile photo. We can start by creating a new component: - -```html src/lib/Avatar.svelte - - -
    - {#if avatarUrl} {avatarUrl {:else} -
    - {/if} -
    - - - - -
    -
    -``` - -### Add the new widget - -And then we can add the widget to the Account page: - -```html src/lib/Account.svelte - - -
    - - - - - -``` - -### Storage management - - - -At this stage you have a fully functional application! - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 91a53b8cb3ba6..0000000000000 --- a/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx +++ /dev/null @@ -1,613 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Build a User Management App with SvelteKit', - description: 'Learn how to use Supabase in your SvelteKit App.', -} - - - -![Supabase User Management example](/docs/img/user-management-demo.png) - - - If you get stuck while working through this guide, refer to the [full example on - GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/sveltekit-user-management). - - - - -## Building the App - -Let's start building the Svelte app from scratch. - -### Initialize a Svelte app - -We can use the [SvelteKit Skeleton Project](https://kit.svelte.dev/docs) to initialize an app called `supabase-sveltekit` (for this tutorial we will be using TypeScript): - -```bash -npm create svelte@latest supabase-sveltekit -cd supabase-sveltekit -npm install -``` - -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`. -All we need are the `SUPABASE_URL` and the `SUPABASE_KEY` key that you copied [earlier](#get-the-api-keys). - -```bash .env -PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL" -PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_KEY" -``` - -Optionally, add `src/styles.css` with the [CSS from the example](https://raw.githubusercontent.com/supabase/supabase/master/examples/user-management/sveltekit-user-management/src/styles.css). - -### Supabase Auth Helpers - -SvelteKit is a highly versatile framework offering pre-rendering at build time (SSG), server-side rendering at request time (SSR), API routes, and more. - -It can be challenging to authenticate your users in all these different environments, that's why we've created the Supabase Auth Helpers to make user management and data fetching within SvelteKit as easy as possible. - -Install the auth helpers for SvelteKit: - -```bash -npm install @supabase/auth-helpers-sveltekit @supabase/supabase-js -``` - -Add the code below to your `src/hooks.server.ts` to initialize the client on the server: - -```ts src/hooks.server.ts -// src/hooks.server.ts -import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public' -import { createSupabaseServerClient } from '@supabase/auth-helpers-sveltekit' -import type { Handle } from '@sveltejs/kit' - -export const handle: Handle = async ({ event, resolve }) => { - event.locals.supabase = createSupabaseServerClient({ - supabaseUrl: PUBLIC_SUPABASE_URL, - supabaseKey: PUBLIC_SUPABASE_ANON_KEY, - event, - }) - - /** - * A convenience helper so we can just call await getSession() instead const { data: { session } } = await supabase.auth.getSession() - */ - event.locals.getSession = async () => { - const { - data: { session }, - } = await event.locals.supabase.auth.getSession() - return session - } - - return resolve(event, { - filterSerializedResponseHeaders(name) { - return name === 'content-range' - }, - }) -} -``` - -If you are using TypeScript the compiler might complain about `event.locals.supabase` and `event.locals.getSession`, this can be fixed by updating your `src/app.d.ts` with the content below: - -```ts src/app.d.ts -// src/app.d.ts - -import { SupabaseClient, Session } from '@supabase/supabase-js' - -declare global { - namespace App { - interface Locals { - supabase: SupabaseClient - getSession(): Promise - } - interface PageData { - session: Session | null - } - // interface Error {} - // interface Platform {} - } -} -``` - -Create a new `src/routes/+layout.server.ts` file to handle the session on the server-side. - -```ts src/routes/+layout.server.ts -// src/routes/+layout.server.ts -export const load = async ({ locals: { getSession } }) => { - return { - session: await getSession(), - } -} -``` - -> Start your dev server (`npm run dev`) in order to generate the `./$types` files we are referencing in our project. - -Create a new `src/routes/+layout.ts` file to handle the session and the supabase object on the client-side. - -```ts src/routes/+layout.ts -// src/routes/+layout.ts -import { invalidate } from '$app/navigation' -import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public' -import { createSupabaseLoadClient } from '@supabase/auth-helpers-sveltekit' - -export const load = async ({ fetch, data, depends }) => { - depends('supabase:auth') - - const supabase = createSupabaseLoadClient({ - supabaseUrl: PUBLIC_SUPABASE_URL, - supabaseKey: PUBLIC_SUPABASE_ANON_KEY, - event: { fetch }, - serverSession: data.session, - }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - return { supabase, session } -} -``` - -Update your `src/routes/+layout.svelte`: - -```svelte src/routes/+layout.svelte - - - - - User Management - - -
    - -
    -``` - -### Set up a Login page - -#### Supabase Auth UI - -We can use the [Supabase Auth UI](/docs/guides/auth/auth-helpers/auth-ui), a pre-built Svelte component, for authenticating users via OAuth, email, and magic links. - -Install the Supabase Auth UI for Svelte - -```bash -npm install @supabase/auth-ui-svelte @supabase/auth-ui-shared -``` - -Add the `Auth` component to your home page - -```svelte src/routes/+page.svelte - - - - - User Management - - -
    -
    - -
    -
    -``` - -Create a `src/routes/+page.server.ts` file that will return our website url to be used in our `redirectTo` above. - -```ts -// src/routes/+page.server.ts -import { redirect } from '@sveltejs/kit' -import type { PageServerLoad } from './$types' - -export const load: PageServerLoad = async ({ url, locals: { getSession } }) => { - const session = await getSession() - - // if the user is already logged in return them to the account page - if (session) { - throw redirect(303, '/account') - } - - return { url: url.origin } -} -``` - -### Proof Key for Code Exchange (PKCE) - -As we are employing Proof Key for Code Exchange (PKCE) in our authentication flow, it is necessary to create a server endpoint responsible for exchanging the code for a session. - -In the following code snippet, we perform the following steps: - -- Retrieve the code sent back from the Supabase Auth server using the `code` query parameter. -- Exchange this code for a session, which we store in our chosen storage mechanism (in this case, cookies). -- Finally, we redirect the user to the `account` page. - - - - -```js title=src/routes/auth/callback/+server.js -// src/routes/auth/callback/+server.js -import { redirect } from '@sveltejs/kit' - -export const GET = async ({ url, locals: { supabase } }) => { - const code = url.searchParams.get('code') - - if (code) { - await supabase.auth.exchangeCodeForSession(code) - } - - throw redirect(303, '/account') -} -``` - - - - -```ts title=src/routes/auth/callback/+server.ts -// src/routes/auth/callback/+server.ts -import { redirect } from '@sveltejs/kit' - -export const GET = async ({ url, locals: { supabase } }) => { - const code = url.searchParams.get('code') - - if (code) { - await supabase.auth.exchangeCodeForSession(code) - } - - throw redirect(303, '/account') -} -``` - - - - -### Account page - -After a user is signed in, they need to be able to edit their profile details and manage their account. -Create a new `src/routes/account/+page.svelte` file with the content below. - -```svelte src/routes/account/+page.svelte - - - -
    -
    -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    -
    - -
    -
    - -
    -
    -
    -``` - -Now create the associated `src/routes/account/+page.server.ts` file that will handle loading our data from the server through the `load` function -and handle all our form actions through the `actions` object. - -```ts -import { fail, redirect } from '@sveltejs/kit' - -export const load = async ({ locals: { supabase, getSession } }) => { - const session = await getSession() - - if (!session) { - throw redirect(303, '/') - } - - const { data: profile } = await supabase - .from('profiles') - .select(`username, full_name, website, avatar_url`) - .eq('id', session.user.id) - .single() - - return { session, profile } -} - -export const actions = { - update: async ({ request, locals: { supabase, getSession } }) => { - const formData = await request.formData() - const fullName = formData.get('fullName') as string - const username = formData.get('username') as string - const website = formData.get('website') as string - const avatarUrl = formData.get('avatarUrl') as string - - const session = await getSession() - - const { error } = await supabase.from('profiles').upsert({ - id: session?.user.id, - full_name: fullName, - username, - website, - avatar_url: avatarUrl, - updated_at: new Date(), - }) - - if (error) { - return fail(500, { - fullName, - username, - website, - avatarUrl, - }) - } - - return { - fullName, - username, - website, - avatarUrl, - } - }, - signout: async ({ locals: { supabase, getSession } }) => { - const session = await getSession() - if (session) { - await supabase.auth.signOut() - throw redirect(303, '/') - } - }, -} -``` - -### Launch! - -Now that we have all the pages in place, run this in a terminal window: - -```bash -npm run dev -``` - -And then open the browser to [localhost:5173](http://localhost:5173) and you should see the completed app. - -![Supabase Svelte](/docs/img/supabase-svelte-demo.png) - -## 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 for the user so that they can upload a profile photo. We can start by creating a new component called `Avatar.svelte` in the `src/routes/account` directory: - -```svelte src/routes/account/Avatar.svelte - - - -
    - {#if avatarUrl} - {avatarUrl - {:else} -
    - {/if} - - -
    - - -
    -
    -``` - -### Add the new widget - -And then we can add the widget to the Account page: - -```svelte src/routes/account/+page.svelte - - - -
    -
    - - { - profileForm.requestSubmit(); - }} - /> - - - -
    -``` - -### Storage management - - - -At this stage you have a fully functional application! - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 849f25e02b5eb..0000000000000 --- a/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx +++ /dev/null @@ -1,389 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Build a User Management App with Vue 3', - description: 'Learn how to use Supabase in your Vue 3 App.', -} - - - -![Supabase User Management example](/docs/img/user-management-demo.png) - - - If you get stuck while working through this guide, refer to the [full example on - GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/vue3-user-management). - - - - -## Building the App - -Let's start building the Vue 3 app from scratch. - -### Initialize a Vue 3 app - -We can quickly use [Vite with Vue 3 Template](https://vitejs.dev/guide/#scaffolding-your-first-vite-project) to initialize -an app called `supabase-vue-3`: - -```bash -# npm 6.x -npm create vite@latest supabase-vue-3 --template vue - -# npm 7+, extra double-dash is needed: -npm create vite@latest supabase-vue-3 -- --template vue - -cd supabase-vue-3 -``` - -Then let's install the only additional dependency: [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`. -All we need are the API URL and the `anon` key that you copied [earlier](#get-the-api-keys). - -```bash .env -VITE_SUPABASE_URL=YOUR_SUPABASE_URL -VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY -``` - -With the API credentials in place, create an `src/supabase.js` helper file to initialize the Supabase client. These variables are exposed -on the browser, and that's completely fine since we have [Row Level Security](/docs/guides/auth#row-level-security) enabled on our Database. - -```js src/supabase.js -import { createClient } from '@supabase/supabase-js' - -const supabaseUrl = import.meta.env.VITE_SUPABASE_URL -const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY - -export const supabase = createClient(supabaseUrl, supabaseAnonKey) -``` - -Optionally, update [src/style.css](https://raw.githubusercontent.com/supabase/supabase/master/examples/user-management/vue3-user-management/src/style.css) to style the app. - -### Set up a Login component - -Set up an `src/components/Auth.vue` component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords. - -```vue /src/components/Auth.vue - - - -``` - -### Account page - -After a user is signed in we can allow them to edit their profile details and manage their account. -Create a new `src/components/Account.vue` component to handle this. - -```vue src/components/Account.vue - - - -``` - -### Launch! - -Now that we have all the components in place, let's update `App.vue`: - -```vue src/App.vue - - - -``` - -Once that's done, run this in a terminal window: - -```bash -npm run dev -``` - -And then open the browser to [localhost:5173](http://localhost:5173) and you should see the completed app. - -![Supabase Vue 3](/docs/img/supabase-vue-3-demo.png) - -## 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 - -Create a new `src/components/Avatar.vue` component that allows users to upload profile photos: - -```vue src/components/Avatar.vue - - - -``` - -### Add the new widget - -And then we can add the widget to the Account page in `src/components/Account.vue`: - -```vue src/components/Account.vue - - - -``` - -### Storage management - - - -At this stage you have a fully functional application! - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform.mdx b/apps/docs/pages/guides/platform.mdx deleted file mode 100644 index 9740bc439b60f..0000000000000 --- a/apps/docs/pages/guides/platform.mdx +++ /dev/null @@ -1,43 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'platform', - title: 'Supabase Platform', - description: 'Getting started with the Supabase Platform.', - sidebar_label: 'Overview', -} - -Supabase is a hosted platform which makes it very simple to get started without needing to manage any infrastructure. - -Visit [supabase.com/dashboard](https://supabase.com/dashboard) and sign in to start creating projects. - -## Projects - -Each project on Supabase comes with: - -- A dedicated [Postgres database](/docs/guides/database) -- [Auto-generated APIs](/docs/guides/database/api) -- [Auth and user management](/docs/guides/auth) -- [Edge Functions](/docs/guides/functions) -- [Realtime API](/docs/guides/realtime) -- [Storage](/docs/guides/storage) - -## Organizations - -Organizations are a way to group your projects. Each organization can be configured with different team members and billing settings. -Refer to [access control](/docs/guides/platform/access-control) for more information on how to manage team members within an organization. - -## Platform status - -If Supabase experiences outages, we keep you as informed as possible, as early as possible. We provide the following feedback channels: - -- Status page: [status.supabase.com](https://status.supabase.com/) -- RSS Feed: [status.supabase.com/history.rss](https://status.supabase.com/history.rss) -- Atom Feed: [status.supabase.com/history.atom](https://status.supabase.com/history.atom) -- Slack Alerts: You can receive updates via the RSS feed, using Slack's [built-in RSS functionality](https://slack.com/help/articles/218688467-Add-RSS-feeds-to-Slack)
    `/feed subscribe https://status.supabase.com/history.atom` - -Make sure to review our [SLA](/docs/company/sla) for details on our commitment to Platform Stability. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/access-control.mdx b/apps/docs/pages/guides/platform/access-control.mdx deleted file mode 100644 index 9ec8c23843642..0000000000000 --- a/apps/docs/pages/guides/platform/access-control.mdx +++ /dev/null @@ -1,86 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { IconCheck } from 'ui' - -export const meta = { - title: 'Access Control', - description: 'Roles and permissions at the organization level', -} - -Supabase provides granular access controls to manage permissions across your organizations. -For each organization, a member can have one of the following roles: - -- Owner -- Administrator -- Developer - -A default organization is created when you first sign in and -you'll be assigned the **Owner** role. -Each member can access all projects under the organization. -Project level invites are not available at this time. -Create a separate organization if you need to restrict access to certain projects. - -## Manage team members - -To invite others to collaborate, visit your organization's team settings in the -[Dashboard](https://supabase.com/dashboard/projects) to send an invite link to -another user's email. The invite expires after 24 hours. - -### Transferring ownership of an organization - -Each Supabase organization can have one or more owners. If you no longer want be an owner of an organization, click **Leave team** in the members view (`https://supabase.com/dashboard/org//settings#team`) of your organization. -However, you can only leave an organization when there is _at least one other owner_. - -If you are transferring ownership of your organization to someone else, you will need to invite the new member with the **Owner** role. You can leave the organization after they've accepted the invitation. - -### Permissions across roles [#permission-across-roles] - -The table below shows the corresponding permissions for each available role you can assign a team member in the Dashboard. - -| Permissions | Owner | Administrator | Developer | Read only [^2] | -| ------------------------ | ----------------------- | ----------------------- | ----------------------- | ----------------------- | -| **Organization** | -| Change organization name | | | | -| Delete organization | | | | -| **Members** | -| Add an Owner | | | | -| Remove an Owner | | | | -| Add an Administrator | | | | -| Remove an Administrator | | | | -| Add a Developer | | | | -| Remove a Developer | | | | -| Revoke an invite | | | | -| Resend an invite | | | | -| Accept an invite[^1] | | | | -| **Billing** | -| Read invoices | | | | -| Read billing email | | | | -| Change billing email | | | | -| View subscription | | | | -| Update subscription | | | | -| Read billing address | | | | -| Update billing address | | | | -| Read tax codes | | | | -| Update tax codes | | | | -| Read payment methods | | | | -| Update payment methods | | | | -| **Projects** | -| Create a project | | | | -| Delete a project | | | | -| Update a project | | | | -| Pause a project | | | | -| Resume a project | | | | -| Restart a project | | | | -| Manage tables | | | | -| View Data | | | | | - -[^1]: - Invites sent from a SSO account can only be accepted by another SSO account - coming from the same identity provider. This is a security measure that - prevents accidental invites to accounts not managed by your company's - enterprise systems. - -[^2]: Available on the Teams and Enterprise Plans. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/backups.mdx b/apps/docs/pages/guides/platform/backups.mdx deleted file mode 100644 index 65f603344020a..0000000000000 --- a/apps/docs/pages/guides/platform/backups.mdx +++ /dev/null @@ -1,96 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { Admonition } from 'ui' - -export const meta = { - title: 'Database Backups', - description: 'Learn about the available backup methods for your Supabase project.', -} - -export const mutuallyExclusiveNote = ( - - If you enable PITR, Daily Backups will no longer be taken. PITR provides a finer granularity - than Daily Backups, so it's unnecessary to run both. - -) - -Database backups are an integral part of any disaster recovery plan. Disasters come in many shapes and sizes. It could be as simple as accidentally deleting a table column, the database crashing, or even a natural calamity wiping out the underlying hardware a database is running on. The risks and impact brought by these scenarios can never be fully eliminated, but only minimized or even mitigated. Having database backups is a form of insurance policy. They are essentially snapshots of the database at various points in time. When disaster strikes, database backups allow the project to be brought back to any of these points in time, therefore averting the crisis. - -## Frequency of Backups - -When deciding how often a database should be backed up, the key business metric Recovery Point Objective (RPO) should be considered. RPO is the threshold for how much data, measured in time, a business could lose when disaster strikes. This amount is fully dependent on a business and its underlying requirements. A low RPO would mean that database backups would have to be taken at an increased cadence throughout the day. Each Supabase project has access to two forms of backups, Daily Backups and Point-in-Time Recovery (PITR). The agreed upon RPO would be a deciding factor in choosing which solution best fits a project. - -{mutuallyExclusiveNote} - - - -Database backups do not include objects stored via the Storage API, as the database only includes metadata about these objects. Restoring an old backup does not restore objects that have been deleted since then. - - - -## Daily Backups - -All Pro and Enterprise plan Supabase projects are backed up automatically on a daily basis. In terms of Recovery Point Objective (RPO), Daily Backups would be suitable for projects willing to lose up to 24 hours worth of data if disaster hits at the most inopportune time. If a lower RPO is required, enabling Point-in-Time Recovery should be considered. - - - -For security purposes, passwords for custom roles are not stored in daily backups, and will not be found in downloadable files. As such, if you are restoring from a daily backup and are using custom roles, you will need to set their passwords once more following a completed restoration. - - - -### Backup Process [#daily-backups-process] - -The PostgreSQL utility [pg_dumpall](https://www.postgresql.org/docs/current/app-pg-dumpall.html) is used to perform daily backups. An SQL file is generated, zipped up, and sent to our storage servers for safe keeping. - -![Scheduled backups dashboard](/docs/img/backups-daily-dashboard.png) - -You can access daily backups in the [Scheduled backups](https://supabase.com/dashboard/project/_/database/backups/scheduled) settings in the Dashboard. Pro plan projects can access the last 7 days' worth of daily backups while Enterprise plan projects can access up to 30 days' worth of daily backups. Users can restore their project to any one of the backups or download them as a zipped SQL file. - -### Restoration Process [#daily-backups-restoration-process] - -When selecting a backup to restore to, select the closest available one made before the desired point in time to restore to. Earlier backups can always be chosen too but do consider the number of days' worth of data that could be lost. - -![Scheduled backups: Confirmation modal](/docs/img/backups-daily-confirmation-modal.png) - -The Dashboard will then prompt for a confirmation before proceeding with the restoration. The project will be inaccessible following this. As such, do ensure to allot downtime beforehand. This is dependent on the size of the database. The larger it is, the longer the downtime will be. Once the confirmation has been given, the underlying SQL of the chosen backup is then run against the project. The PostgreSQL utility [psql](https://www.postgresql.org/docs/current/app-psql.html) is used to facilitate the restoration. The Dashboard will display a notification once the restoration completes. - -{/* screenshot of the Dashboard of the project completing restoration */} - -## Point-in-Time Recovery - -Point-in-Time Recovery (PITR) allows a project to be backed up at much shorter intervals. This provides users an option to restore to any chosen point of up to seconds in granularity. Even with daily backups, a day's worth of data could still be lost. With PITR, backups could be performed up to the point of disaster. - - - -This feature is available to all Enterprise plan projects. Pro plan projects can enable PITR as an add-on. - - - -{mutuallyExclusiveNote} - -### Backup Process [#pitr-backup-process] - -As discussed [here](https://supabase.com/blog/postgresql-physical-logical-backups), PITR is made possible by a combination of taking physical backups of a project, as well as archiving [Write Ahead Log (WAL)](https://www.postgresql.org/docs/current/wal-intro.html) files. Physical backups provide a snapshot of the underlying directory of the database, while WAL files contain records of every change made in the database. - -Supabase uses [WAL-G](https://github.com/wal-g/wal-g), an open source archival and restoration tool, to handle both aspects of PITR. On a daily basis, a snapshot of the database is taken and sent to our storage servers. Throughout the day, as database transactions occur, WAL files are generated and uploaded. - -By default, WAL files are backed up at two minute intervals. If these files cross a certain file size threshold, they are backed up immediately. As such, during periods of high amount of transactions, WAL file backups become more frequent. Conversely, when there is no activity in the database, WAL file backups are not made. Overall, this would mean that at the worst case scenario or disaster, the PITR achieves a Recovery Point Objective (RPO) of two minutes. - -![PITR dashboard](/docs/img/backups-pitr-dashboard.png) - -You can access PITR in the [Point in Time](https://supabase.com/dashboard/project/_/database/backups/pitr) settings in the Dashboard. The recovery period of a project is indicated by the earliest and latest points of recoveries displayed in your preferred timezone. If need be, the maximum amount of this recovery period can be modified accordingly. - -Note that the latest restore point of the project could be significantly far from the current time. This occurs when there has not been any recent activity in the database, and therefore no WAL file backups have been made recently. This is perfectly fine as the state of the database at the latest point of recovery would still be indicative of the state of the database at the current time given that no transactions have been made in between. - -### Restoration Process [#pitr-restoration-process] - -![PITR: Calendar view](/docs/img/backups-pitr-calendar-view.png) - -A date and time picker will be provided upon pressing the `Start a restore` button. The process will only proceed if the selected date and time fall within the earliest and latest points of recoveries. - -![PITR: Confirmation modal](/docs/img/backups-pitr-confirmation-modal.png) - -After locking in the desired point in time to recover to, The Dashboard will then prompt for a review and confirmation before proceeding with the restoration. The project will be inaccessible following this. As such, do ensure to allot for downtime beforehand. This is dependent on the size of the database. The larger it is, the longer the downtime will be. Once the confirmation has been given, the latest physical backup available is downloaded to the project and the database is partially restored. WAL files generated after this physical backup up to the specified point-in-time are then downloaded. The underlying records of transactions in these files are replayed against the database to complete the restoration. The Dashboard will display a notification once the restoration completes. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/compute-add-ons.mdx b/apps/docs/pages/guides/platform/compute-add-ons.mdx deleted file mode 100644 index d3bd4ad528afa..0000000000000 --- a/apps/docs/pages/guides/platform/compute-add-ons.mdx +++ /dev/null @@ -1,65 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'compute-add-ons', - title: 'Compute Add-ons', - description: "Learn about your project's instance and additional add-ons.", -} - -Every project on the Supabase Platform comes with its own dedicated Postgres instance running inside a virtual machine (VM). The following table describes the base instance with additional compute add-ons available if you need extra performance when scaling up Supabase. - -| Plan | Pricing | CPU | Memory | Connections: Direct | Connections: Pooler | -| --------------- | ------- | ----------------------- | ------ | ------------------- | ------------------- | -| Free (Included) | $0 | 2-core ARM (shared) | 1 GB | 60 | 200 | -| Small | $5 | 2-core ARM (shared) | 2 GB | 90 | 200 | -| Medium | $50 | 2-core ARM (shared) | 4 GB | 120 | 200 | -| Large | $100 | 2-core ARM (dedicated) | 8 GB | 160 | 300 | -| XL | $200 | 4-core ARM (dedicated) | 16 GB | 240 | 700 | -| 2XL | $400 | 8-core ARM (dedicated) | 32 GB | 380 | 1500 | -| 4XL | $950 | 16-core ARM (dedicated) | 64 GB | 480 | 3000 | -| 8XL | $1,860 | 32-core ARM (dedicated) | 128 GB | 490 | 6000 | -| 12XL | $2,790 | 48-core ARM (dedicated) | 192 GB | 500 | 9000 | -| 16XL | $3,720 | 64-core ARM (dedicated) | 256 GB | 500 | 12,000 | - -Number of connections above are recommended values. - -[Contact us](https://supabase.com/contact/enterprise) if you require a custom plan. - -## Dedicated vs. shared CPU - -All Postgres instances on Supabase are dedicated applications running inside dedicated virtual machines. However, the underlying hardware resources, for example the physical CPU, may be shared between multiple VMs, but appear to the OS as if it is a dedicated hardware CPU. This is commonly referred to as a vCPU (virtual CPU). Cloud providers use these shared hardware resources to save cost—you can upgrade to a larger compute add-on to guarantee a dedicated physical CPU for your instance. - -## Compute upgrades [#upgrades] - -When considering compute upgrades, assess whether your bottlenecks are hardware-constrained or software-constrained. For example, you may want to look into [optimizing the number of connections](/docs/guides/platform/performance#optimizing-the-number-of-connections) or [examining query performance](/docs/guides/platform/performance#examining-query-performance). When you're happy with your Postgres instance's performance, then you can focus on additional compute resources. For example, you can load test your application in staging to understand your compute requirements. You can also start out on a smaller tier, [create a report](https://supabase.com/dashboard/project/_/reports) in the Dashboard to monitor your CPU utilization, and upgrade later as needed - -## Disk IO - -SSD Disks are attached to your servers and the disk performance depends on the compute add-on of your instance. Disk IO refers to two metrics: throughput (Megabits per Second) and IOPS (Input/Output Operations per Second). - -| Plan | Pricing | Max Disk Throughput | Baseline Disk Throughput | Max IOPS | Baseline IOPS | -| --------------- | ------- | ------------------- | ------------------------ | ----------- | ------------- | -| Free (Included) | $0 | 2,085 Mbps | 87 Mbps | 11,800 IOPS | 500 IOPS | -| Small | $5 | 2,085 Mbps | 174 Mbps | 11,800 IOPS | 1,000 IOPS | -| Medium | $50 | 2,085 Mbps | 347 Mbps | 11,800 IOPS | 2,000 IOPS | -| Large | $100 | 4,750 Mbps | 630 Mbps | 20,000 IOPS | 3,600 IOPS | -| XL | $200 | 4,750 Mbps | 1,188 Mbps | 20,000 IOPS | 6,000 IOPS | -| 2XL | $400 | 4,750 Mbps | 2,375 Mbps | 20,000 IOPS | 12,000 IOPS | -| 4XL | $950 | 4,750 Mbps | 4,750 Mbps | 20,000 IOPS | 20,000 IOPS | -| 8XL | $1,860 | 9,500 Mbps | 9,500 Mbps | 40,000 IOPS | 40,000 IOPS | -| 12XL | $2,790 | 14,250 Mbps | 14,250 Mbps | 50,000 IOPS | 50,000 IOPS | -| 16XL | $3,720 | 19,000 Mbps | 19,000 Mbps | 80,000 IOPS | 80,000 IOPS | - -[Contact us](https://supabase.com/contact/enterprise) if you require a custom plan. - -### Bursting and Disk Budget - -Smaller compute instances can burst up to their largest throughput and IOPS for 30 minutes in a day. Beyond that, the performance reverts to the baseline. For example, the free tier can burst up to 2,085 Mbps for 30 minutes a day and reverts to the baseline performance of 87 Mbps. Your disk budget gets replenished throughout the day. - -If you need consistent disk performance, choose the 4XL or larger compute add-on which has the same baseline and maximum disk throughput and IOPS. - -If you're unsure of how much throughput or IOPS your application requires, you can load test your project and inspect these [metrics in the Dashboard](https://supabase.com/dashboard/project/_/reports). If the `Disk IO % consumed` stat is more than 1%, it indicates that your workload has burst beyond the baseline IO throughput during the day. If this metric goes to 100%, the workload has used up all available disk budget and will revert to baseline performance. Projects that use any disk budget are good candidates for upgrading to a larger compute add-on with higher baseline throughput. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/custom-domains.mdx b/apps/docs/pages/guides/platform/custom-domains.mdx deleted file mode 100644 index 9d751bca152f9..0000000000000 --- a/apps/docs/pages/guides/platform/custom-domains.mdx +++ /dev/null @@ -1,157 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'custom-domains', - title: 'Custom Domains', - description: 'Configuring a Custom Domain for your Supabase project.', - video: 'https://www.youtube.com/v/6rcGnW_Mh-0', -} - -Custom domains allow you to present a branded experience to your users. Custom domains are available as a [add-on for projects on a paid plan](https://supabase.com/dashboard/project/_/settings/billing/subscription?panel=customDomain). Setting up a custom domain requires [Owner or Admin permissions](/docs/guides/platform/access-control#manage-team-members) for the project. Currently, you must use a subdomain (e.g., `api.example.com`, rather than `example.com`) for the purposes of this guide. - -
    - -
    - -## Configure a Custom Domain using the Supabase Dashboard - -Follow the **Custom Domains** steps in the [General Settings](https://supabase.com/dashboard/project/_/settings/general) page in the Dashboard to set up a custom domain for your project. - -## Configure a Custom Domain using the Supabase CLI - -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`. - -To get started: - -1. [Install](/docs/guides/resources/supabase-cli) the Supabase CLI 1.11.3+. -1. [Log in](/docs/guides/resources/supabase-getting-started/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI. - -### Configure a CNAME - -Set up a CNAME record for `api.example.com`, resolving to `foobarbaz.supabase.co.`, with as low a TTL as possible. - -### Configure TXT Verification - -Use the `create` subcommand of the CLI to notify Supabase of your domain and retrieve TXT verification records: - -```bash -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, -and for us to issue SSL certificates for it. For example: - -```bash -[...] -Required outstanding validation records: - _cf-custom-hostname.api.example.com TXT -> 46BBC14D-D50A-409C-8DB5-F862CF5BA660 - api.example.com TXT -> ca3-F1HvR9i938OgVwpCFwi1jTsbhe1hvT0Ic3efPY3Q -``` - -[^1] One of the records requires you to _replace_ the CNAME record set up in [the first step](#configure-a-cname) with a TXT record. You'll be able to restore it back to the CNAME after the verification process has been completed. - -### Verify your domain - -Set up both records as instructed, and then use the `reverify` command for the Supabase Platform to verify the records: - -```bash -supabase domains reverify --project-ref foobarbaz --experimental -``` - -You might need to wait a few minutes before your updated DNS records are propagated, especially if the older records were using a high TTL. - -### 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 (`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). You can initialize a new Supabase client with your custom domain, `api.example.com`. For example: - - ```js - import { createClient } from '@supabase/supabase-js' - - // Use a custom domain as the supabase URL - const supabase = createClient('https://api.example.com', 'public-anon-key') - ``` - -- Any OAuth providers (e.g., google, github) - -Additionally, update the DNS configuration for `api.example.com` to once more use a CNAME record that resolves to `foobarbaz.supabase.co`. -Finally, you can use the `activate` subcommand to reconfigure your project: - -```bash -supabase domains activate --project-ref foobarbaz --experimental -``` - -## Remove a Custom Domain - -If you have a custom domain (`api.example.com`) 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 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 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/resources/supabase-cli) the Supabase CLI 1.22.0+. -1. [Log in](/docs/guides/resources/supabase-getting-started/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/platform/access-control#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 plan) in the [Billing page of the Dashboard](https://supabase.com/dashboard/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 activate --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 - -- A Supabase project can—at this time—use either a Custom Domain or a Vanity Subdomain, but not both. -- Some authentication flows like Sign-in with Twitter set cookies to track the progress of the flow. Make sure you use only one domain in your frontend application for this reason. Mixing calls to the Supabase domain `foobarbaz.supabase.co` and your custom domain could cause those flows to stop working due to the [Same Origin Policy](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy) enforced on cookies by the browser. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/custom-postgres-config.mdx b/apps/docs/pages/guides/platform/custom-postgres-config.mdx deleted file mode 100644 index c5888bf6a6e15..0000000000000 --- a/apps/docs/pages/guides/platform/custom-postgres-config.mdx +++ /dev/null @@ -1,87 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'custom-postgres-config', - title: 'Custom Postgres Config', - description: 'Configuring Postgres for your Supabase project.', -} - -Supabase projects come with a Postgres cluster that is pre-configured for optimal performance. The configuration is based on a diverse range of workloads as well as the compute add-ons being used in the project. You can override this configuration to better optimize the Postgres cluster for specific workloads. - - - -Custom Postgres Config gives you advanced control over your database. Using it to set values that are inappropriate for your workload or compute add-on could cause severe performance degradation or project instability. - - - -## Custom Postgres Config - -While most Postgres parameters can be configured from [within SQL](https://www.postgresql.org/docs/current/config-setting.html#CONFIG-SETTING-SQL-COMMAND-INTERACTION), some parameters must either be set using a config file, or require superuser access. Custom Postgres Config allows you to configure such parameters. - -From the perspective of Postgres, config overrides will show up in the global configuration file. Role or database specific configuration could override them for some scenarios; please refer to the [Postgres docs](https://www.postgresql.org/docs/current/) on each parameter for additional details. - -### Supported Parameters - -The following parameters are available for overrides: - -1. [effective_cache_size](https://postgresqlco.nf/doc/en/param/effective_cache_size/) -1. [maintenance_work_mem](https://postgresqlco.nf/doc/en/param/maintenance_work_mem/) -1. [max_connections](https://postgresqlco.nf/doc/en/param/max_connections/) -1. [max_parallel_maintenance_workers](https://postgresqlco.nf/doc/en/param/max_parallel_maintenance_workers/) -1. [max_parallel_workers_per_gather](https://postgresqlco.nf/doc/en/param/max_parallel_workers_per_gather/) -1. [max_parallel_workers](https://postgresqlco.nf/doc/en/param/max_parallel_workers/) -1. [max_worker_processes](https://postgresqlco.nf/doc/en/param/max_worker_processes/) -1. [session_replication_role](https://postgresqlco.nf/doc/en/param/session_replication_role/) -1. [shared_buffers](https://postgresqlco.nf/doc/en/param/shared_buffers/) -1. [statement_timeout](https://postgresqlco.nf/doc/en/param/statement_timeout/) -1. [work_mem](https://postgresqlco.nf/doc/en/param/work_mem/) - -### Setting config using the CLI - -To get started: - -1. [Install](/docs/guides/resources/supabase-cli) the Supabase CLI 1.69.0+. -1. [Log in](/docs/guides/resources/supabase-getting-started/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI. - -The `postgres config` command of the CLI can be used for setting configuration parameters: - -```bash -$ supabase --experimental --project-ref postgres-config update --config max_parallel_workers=6 --config shared_buffers=250MB -- Custom Postgres Config - -Config |Value | -shared_buffers |250MB | -max_parallel_workers |6 | -- End of Custom Postgres Config - -``` - -By default, the CLI will merge any provided config overrides with any existing ones. The `--replace-existing-overrides` flag can be used to instead force all existing overrides to be replaced with the ones being provided: - -```bash -$ supabase --experimental --project-ref postgres-config update --config max_parallel_workers=3 --replace-existing-overrides - -- Custom Postgres Config - -Config |Value | -max_parallel_workers |3 | -- End of Custom Postgres Config - -``` - -## Considerations - -1. The Postgres cluster will be restarted in order to change the configuration being used. This will cause momentary disruption to existing database connections; in most cases this should not take more than a few seconds. -1. Custom Postgres Config will always override the default optimizations generated by Supabase. When changing compute add-ons, this may require manual updates to any relevant overrides that have been applied. - -export const Page = ({ children }) => - -export default Page - -## Pooler Config - -You can also [customize some parameters](https://supabase.com/dashboard/project/_/settings/database) for the Connection Pooler: - -1. [Pooling Mode](https://devcenter.heroku.com/articles/best-practices-pgbouncer-configuration#pgbouncer-s-connection-pooling-modes) -1. [Default Pool Size](https://www.pgbouncer.org/config.html) -1. [Max Client Connections](https://www.pgbouncer.org/config.html) - -The default pool size, and the maximum number of clients allowed to connect concurrently is automatically optimized based on the compute add-on being used. At the moment, the Dashboard only reflects any custom configuration being used, and does not include the default optimized numbers used for your project. - -Custom Pooler Config may also require manual updates to any relevant overrides when changing compute add-ons. diff --git a/apps/docs/pages/guides/platform/database-size.mdx b/apps/docs/pages/guides/platform/database-size.mdx deleted file mode 100644 index 8554737a8021e..0000000000000 --- a/apps/docs/pages/guides/platform/database-size.mdx +++ /dev/null @@ -1,112 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'database-size', - title: 'Database size', - description: 'Understanding how database size applies to your subscription.', -} - -Database size refers to the _monthly average storage usage_, as reported by Postgres. This metric is reported in your project's [billing usage](https://supabase.com/dashboard/project/_/settings/billing/usage) and is updated daily. As you read this document we will refer to "database size" and "disk size": - -- "Database size" is the total size of used storage from your database. -- "Disk Storage size" describes the size of the underlying available storage. - -## Database space management - -### Database size - -This SQL query will show the current size of your Postgres database: - -```sql -select - sum(pg_database_size(pg_database.datname)) / (1024 * 1024) as db_size_mb -from pg_database; -``` - -This value is reported in the [database report page](https://supabase.com/dashboard/project/_/reports/database). - -Database Space is consumed primarily by your data, indexes, and materialized views. You can reduce your disk size by removing any of these and running a Vacuum operation. - - - -Depending on your billing plan, your database can go into read-only mode which can prevent you inserting and deleting data. There are instructions for managing read-only mode in the [Disk Management](#disk-management) section. - - - -### Vacuum operations - -Postgres does not immediately reclaim the physical space used by dead tuples (i.e., deleted rows) in the DB. They are marked as "removed" until a [vacuum operation](https://www.postgresql.org/docs/current/routine-vacuuming.html) is executed. As a result, deleting data from your database may not immediately reduce the reported disk usage. - - - -Vacuum operations can temporarily increase resource utilization, which may adversely impact the observed performance of your project until the maintenance is completed. - - - -Supabase projects have automatic vacuuming enabled, which ensures that these operations are performed regularly to keep the database healthy and performant. -It is possible to [fine-tune](https://www.percona.com/blog/2018/08/10/tuning-autovacuum-in-postgresql-and-autovacuum-internals/) the [autovacuum parameters](https://www.enterprisedb.com/blog/postgresql-vacuum-and-analyze-best-practice-tips), or [manually initiate](https://www.postgresql.org/docs/current/sql-vacuum.html) vacuum operations. -Running a manual vacuum after deleting large amounts of data from your DB could help reduce the database size reported by Postgres. - -### Preoccupied Space - -New Supabase projects have a database size of ~40-60mb. This space includes pre-installed extensions, schemas, and default Postgres data. Additional database size is used when installing extensions, even if those extensions are inactive. - -## Disk management - -Supabase uses network-attached storage to balance performance with scalability. The behavior of your disk depends on your billing plan. - -### Paid Plan Behavior - -Projects on the Pro plan and above have auto-scaling Disk Storage. - -Disk Storage expands automatically when the database reaches 90% of the disk size. The disk is expanded to be 50% larger (e.g., 8GB -> 12GB). Auto-scaling can only take place once every 6 hours. If within those 6 hours you reach 95% of the disk space, your project will enter read-only mode. - -The Disk Storage Size can also be manually expanded on the [Database settings page](https://supabase.com/dashboard/project/_/settings/database). The maximum default you can expand the Disk Storage to is 200GB. If you wish to manually expand it to any more than 200GB, please [contact us](https://supabase.com/dashboard/support/new) to discuss expanding the 200GB limit. - - -You may want to import a lot of data into your database which requires multiple disk expansions; for example, uploading more than 1.5x the current size of your database storage will put your database into [read-only mode](#read-only-mode). If so, it is highly recommended you increase the Disk Storage Size manually on the [Database settings page](https://supabase.com/dashboard/project/_/settings/database). - -Due to provider restrictions, disk expansions can occur only once every six hours. During the six-hour window, the disk cannot be resized again. - - - -The maximum Disk Storage Size for the Pro plan is 16TB. If you need more than this, [contact us](https://forms.supabase.com/enterprise) to learn more about the Enterprise plan. - -### Free Plan Behavior - -Free Plan projects enter [read-only](#read-only-mode) mode when you exceed the 500MB limit. Once in read-only mode, you have several options: - -- [Upgrade to the Pro plan](https://supabase.com/dashboard/project/_/settings/billing/subscription) to increase the limit to 8GB. [Disable the Spend Cap](https://app.supabase.com/project/_/settings/billing/subscription?panel=costControl) if you want your Pro instance to auto-scale and expand beyond the 8GB database size limit. -- [Disable read-only mode](#disabling-read-only-mode) and reduce your database size. - -### Read-only mode - -In some cases Supabase may put your database into read-only mode to prevent your database from exceeding the billing or disk limitations. - -In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size, - -### Disabling read-only mode - -You manually override read-only mode to reduce disk size. To do this, run the following in the [SQL Editor](https://supabase.com/dashboard/project/_/sql): - -First, change the [transaction access mode](https://www.postgresql.org/docs/current/sql-set-transaction.html): - -```sql -set session characteristics as transaction read write; -``` - -This allows you to delete data from within the session. After deleting data, you should run a vacuum to reclaim as much space as possible. After deleting data, consider running a vacuum to reclaim as much space as possible: - -```sql -vacuum; -``` - -Once you have reclaimed space, you can run the following to disable [read-only](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-DEFAULT-TRANSACTION-READ-ONLY) mode: - -```SQL -set default_transaction_read_only = 'off'; -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/exhaust-cpu.mdx b/apps/docs/pages/guides/platform/exhaust-cpu.mdx deleted file mode 100644 index 95fe2a00d9fd6..0000000000000 --- a/apps/docs/pages/guides/platform/exhaust-cpu.mdx +++ /dev/null @@ -1,49 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'exhaust-cpu', - title: 'High CPU Usage', - description: - 'Learn what high CPU usage could mean for your Supabase instance and what could have caused it.', -} - -Learn what high CPU usage could mean for your Supabase instance and what could have caused it. - -## The danger of high CPU usage - -Every Supabase project runs in its dedicated virtual machine. Your instance will have a different set of hardware provisioned depending on your [compute add-on](https://supabase.com/docs/guides/platform/compute-add-ons). Your hardware may not be suitable for the intended workload and may experience high CPU usage. - -High CPU usage could come with a range of issues: - -- slower queries -- disruption of daily backup routines -- in rare cases, your instance may become unresponsive - -Moreover, your instance might not be able to handle future traffic spikes if it already has a high CPU usage. - -## Monitor your CPU - -You can check your CPU usage directly on the Supabase Platform. For this go to database health in the reports section or [click here](https://supabase.com/dashboard/project/_/reports/database) and select your project. - -![CPU usage reported on Supabase dashboard](/docs/img/guides/platform/exhaust-cpu-report.png) - -It is also possible to monitor your resources and set up alerts using Prometheus/Grafana. You can find a guide for this [here](https://supabase.com/docs/guides/platform/metrics). - -## Common reasons for high CPU usage - -Everything you do with your Supabase project requires compute. Hence, there can be many reasons for high CPU usage. Here are some common ones: - -- **Query performance:** Queries that take a long time to complete (>1 second) as well as excessive amounts of querying can put a strain on the CPU. Check our guide on [examining query performance](https://supabase.com/docs/guides/platform/performance#examining-query-performance). -- **Missing indexes:** Your database might have to scan through a large amount of data to find the information it needs. Creating indexes helps your database find data faster. Learn more about indexes [here](https://supabase.com/docs/guides/database/postgres/indexes). -- **Unsuitable compute:** The instance size of your Supabase project might not be suitable for your application as you might have more traffic or run resource-intensive operations. - -## Solving high CPU usage - -There are two ways to solve high CPU: - -1. **Optimize performance:** Get more out of your instance's resources by optimizing your usage. Have a look at our [performance tuning guide](https://supabase.com/docs/guides/platform/performance#examining-query-performance) and our [production readiness guide](https://supabase.com/docs/guides/platform/going-into-prod#performance). -2. **Upgrade your compute:** You can get a Compute Add-on for your project. Follow [this link](https://supabase.com/dashboard/project/_/settings/billing/subscription?panel=computeInstance) and select your project to see your upgrade options. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/exhaust-disk-io.mdx b/apps/docs/pages/guides/platform/exhaust-disk-io.mdx deleted file mode 100644 index 23ff66a844d1d..0000000000000 --- a/apps/docs/pages/guides/platform/exhaust-disk-io.mdx +++ /dev/null @@ -1,48 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'exhaust-disk-io', - title: 'High Disk IO Consumption', - description: - 'Understand Disk IO, what can deplete your Disk Budget and what you can do about it.', -} - -## Understanding Disk IO and Disk Budget - -Disk IO refers to two metrics: throughput in Megabits per Second and IOPS which are Input/Output Operations per Second. Depending on the compute add-on of your instance you will have [different baseline performances](https://supabase.com/docs/guides/platform/compute-add-ons#disk-io). - -Smaller compute instances can burst and exceed their baseline performance for a short quota of time every day. This quota is represented as your Disk Budget and once your Disk Budget is consumed, your instance reverts back to its baseline performance. You can read more about this under [Bursting and Disk Budget](https://supabase.com/docs/guides/platform/compute-add-ons#bursting-and-disk-budget). - -## Depleting your Disk Budget - -Running out of Disk Budget means that your instance is using more disk than its compute add-on can handle and essentially gets throttled. This could have a wide range of implications: - -- Response times on requests can increase noticeably -- CPU usage rises noticeably due to IO wait -- Disruption of [daily backup](https://supabase.com/docs/guides/platform/backups#daily-backups) routines -- Disruption of internal Postgres processes such as [autovacuuming](https://supabase.com/docs/guides/platform/database-size#vacuum-operations) -- Your instance may become unresponsive - -## Monitor your Disk Budget - -To check your Disk Budget on the Supabase Platform, head over to [Database Health in the Reports section](https://supabase.com/dashboard/project/_/reports/database). - -It is also possible to monitor your resources and set up alerts using Prometheus/Grafana. With Grafana you will be able to see how much of your RAM is used for caching and you can track other metrics such as your Swap usage. Read the [Metrics Guide](https://supabase.com/docs/guides/platform/metrics) to learn more. - -## Common reasons for high disk IO usage - -Most operations on your Supabase project require the disk in some form. Hence, there can be many reasons for high disk usage. Here are some common ones: - -- **High Memory Usage:** Every Supabase project has 1GB of disk allocated for swapping. When your memory usage is high, the operating system might frequently move parts of the memory back and forth of the swap space on the disk. -- **Low Cache Usage:** If your cache hit rate is low, many of your database requests might go straight to the disk. Go to the [Cache Hit Rate Guide](https://supabase.com/docs/guides/platform/performance#hit-rate) to learn more. -- **Query performance:** Queries that take a long time to complete (>1 second) could be using your disk inefficiently. Check our guide on [examining query performance](https://supabase.com/docs/guides/platform/performance#examining-query-performance). -- **High popularity:** Congrats! Your side project turned out to be a real success and is getting more requests than it can handle. - -## How to fix - -1. **Upgrade your compute:** You can get a Compute Add-on for your project. See your [upgrade options](https://supabase.com/dashboard/project/_/settings/billing/subscription?panel=computeInstance) by selecting your project. Do reference the [different baseline performances](https://supabase.com/docs/guides/platform/compute-add-ons#disk-io) that come with larger Compute Add-ons. -2. **Optimize performance:** Get more out of your instance's resources by optimizing your usage. Have a look at our [performance tuning guide](https://supabase.com/docs/guides/platform/performance#examining-query-performance) and our [production readiness guide](https://supabase.com/docs/guides/platform/going-into-prod#performance). - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/exhaust-ram.mdx b/apps/docs/pages/guides/platform/exhaust-ram.mdx deleted file mode 100644 index 2e5a68e3c96bb..0000000000000 --- a/apps/docs/pages/guides/platform/exhaust-ram.mdx +++ /dev/null @@ -1,55 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'exhaust-ram', - title: 'High Memory Usage', - description: - 'Learn what high RAM usage could mean for your Supabase instance and what could have caused it.', -} - -Learn what high RAM usage could mean for your Supabase instance and what could have caused it. - - - -High memory usage doesn't necessarily mean that your instance is at risk. Memory that is used for caching and buffers improves data access speed. But if you notice less performance alongside high memory usage, your memory usage might be unhealthy. - - - -## Base Memory Usage - -You may observe elevated memory usage even when your database has little to no load. Supabase requires a wide range of services other than Postgres to operate, which can result in an elevated base memory usage. Especially on the smallest compute instance that comes with 1 GB of RAM, it is not unusual for your project to have a base memory usage of ~50%. - -## Issues with High Memory Usage - -Every Supabase project runs in its own dedicated virtual machine. Your instance will have a different set of hardware provisioned depending on your [compute add-on](https://supabase.com/docs/guides/platform/compute-add-ons). Depending on your workload, your compute hardware may not be suitable and can result in high RAM usage. - -A good proxy for unhealthy memory usage is swap usage. If you run out of RAM, your system will offload memory to your disk's much slower swap partition. If your swap is above 70%, chances are high that your compute hardware is not suitable for your workload. Head over to your project's [Database Health](https://supabase.com/dashboard/project/_/reports/database) to see your swap usage. - -High RAM usage could come with a range of issues: - -- degraded performance overall when your instance has to use swap memory -- the operating system may start killing processes as your system runs out of memory -- in rare cases, your instance may become unresponsive - -## Monitor your RAM - -To check your RAM usage on the Supabase Platform, head over to [Database Health in the Reports section](https://supabase.com/dashboard/project/_/reports/database). - -It is also possible to monitor your resources and set up alerts using Prometheus/Grafana. With Grafana you will be able to see how much of your RAM is used for caching and you can track other metrics such as your Swap usage. Read the [Metrics Guide](https://supabase.com/docs/guides/platform/metrics) to learn more. - -## Common reasons for high RAM usage - -Everything you do with your Supabase project requires memory in some form. Hence, there can be many reasons for high RAM usage. Here are some common ones: - -- **Query performance:** Queries that take a long time to complete (>1 second) could be using your RAM inefficiently. Check our guide on [examining query performance](https://supabase.com/docs/guides/platform/performance#examining-query-performance). -- **Too many connections:** Every connection to your database consumes memory. You can check the number of active connections under [Database Roles](https://supabase.com/dashboard/project/_/database/roles) after you select your project. Read our guide on [too many open connections](https://supabase.com/docs/guides/platform/troubleshooting#too-many-open-connections). -- **Extensions:** Some extensions such as `timescaledb` or `pg_cron` can use a lot of memory. It can also add up when you have too many extensions running. You can manage your database extensions in the dashboard under [Extensions](https://supabase.com/dashboard/project/_/database/extensions). - -## How to fix your memory issues - -1. **Upgrade your compute:** You can get a Compute Add-on for your project. See your [upgrade options](https://supabase.com/dashboard/project/_/settings/billing/subscription?panel=computeInstance) by selecting your project. -2. **Optimize performance:** Get more out of your instance's resources by optimizing your usage. Have a look at our [performance tuning guide](https://supabase.com/docs/guides/platform/performance#examining-query-performance) and our [production readiness guide](https://supabase.com/docs/guides/platform/going-into-prod#performance). - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/going-into-prod.mdx b/apps/docs/pages/guides/platform/going-into-prod.mdx deleted file mode 100644 index 289e437cda0f0..0000000000000 --- a/apps/docs/pages/guides/platform/going-into-prod.mdx +++ /dev/null @@ -1,100 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'going-into-prod', - title: 'Production Checklist', - description: 'Things to do before making your app publicly available', -} - -After developing your project and deciding it's Production Ready, you should run through this checklist to ensure that your project: - -- is secure -- won't falter under the expected load -- remains available whilst in production - -## Security - -- Ensure RLS is enabled - - Tables that do not have RLS enabled with reasonable policies allow any client to access and modify their data. This is unlikely to be what you want in the majority of cases. - - [Learn more about RLS](/docs/guides/auth/row-level-security). -- Enable replication on tables containing sensitive data by enabling Row Level Security (RLS) and setting row security policies: - - Go to the Authentication > Policies page in the Supabase Dashboard to enable RLS and create security policies. - - Go to the Database > Replication page in the Supabase Dashboard to manage replication tables. -- Turn on [SSL Enforcement](/docs/guides/platform/ssl-enforcement) -- Enable [Network Restrictions](/docs/guides/platform/network-restrictions) for your database. -- Enable 2FA on GitHub. Since your GitHub account gives you administrative rights to your Supabase project, you should protect it with a strong password and 2FA using a U2F key or a TOTP app. -- Ensure email confirmations are enabled in the `Settings > Auth` page. -- Use a custom SMTP server for auth emails so that your users can see that the mails are coming from a trusted domain (preferably the same domain that your app is hosted on). Grab SMTP credentials from any major email provider such as SendGrid, AWS SES, etc. -- Think hard about how _you_ would abuse your service as an attacker, and mitigate. -- Review these [common cybersecurity threats](https://auth0.com/docs/security/prevent-threats). - -## Performance - -- Ensure that you have suitable indices to cater to your common query patterns - - [Learn more about indexes in Postgres](https://www.enterprisedb.com/postgres-tutorials/overview-postgresql-indexes). - - `pg_stat_statements` can help you [identify hot or slow queries](https://www.virtual-dba.com/blog/postgresql-performance-identifying-hot-and-slow-queries/). -- Perform load testing (preferably on a staging env) - - Tools like [k6](https://k6.io/) can simulate traffic from many different users. -- Upgrade your database if you require more resources. If you need anything beyond what is listed, contact enterprise@supabase.io. -- If you are expecting a surge in traffic (for a big launch) [contact support](https://supabase.com/dashboard/support/new) with more details about your launch. We'll keep an eye on your project. -- If you expect your database size to be > 4 GB, [enable](https://supabase.com/dashboard/project/_/settings/billing/subscription?panel=pitr) the Point in Time Recovery (PITR) addon. Daily backups can take up resources from your database when the backup is in progress. PITR is more resource efficient, since only the changes to the database are backed up. - -## Availability - -- Use your own SMTP credentials so that you have full control over the deliverability of your transactional auth emails (see Settings > Auth) - - you can grab SMTP credentials from any major email provider such as SendGrid, AWS SES, etc. You can refer to our [SMTP guide](/docs/guides/auth/auth-smtp) for more details. - - The default rate limit for auth emails when using a custom SMTP provider is 30 new users per hour, if doing a major public announcement you will likely require more than this. -- If your application is on the free plan and is **not** expected to be queried at least once every 7 days, then it may be paused by Supabase to save on server resources. - - You can restore paused projects from the Supabase dashboard. - - Upgrade to Pro to guarantee that your project will not be paused for inactivity. -- Database backups are not available for download on the free plan. - - You can set up your own backup systems using tools like [pg_dump](https://www.postgresqltutorial.com/postgresql-backup-database/) or [wal-g](https://github.com/wal-g/wal-g). - - Nightly backups for Pro plan projects are available on the Supabase dashboard for up to 7 days. - - Point in Time Recovery (PITR) allows a project to be backed up at much shorter intervals. This provides users an option to restore to any chosen point of up to seconds in granularity. In terms of Recovery Point Objective (RPO), Daily Backups would be suitable for projects willing to lose up to 24 hours worth of data. If a lower RPO is required, enable PITR. -- Upgrading to the Supabase Pro plan will give you [access to our support team](https://supabase.com/dashboard/support/new). - -## Rate Limiting, Resource Allocation, & Abuse Prevention - -- Supabase employs a number of safeguards against bursts of incoming traffic to prevent abuse and help maximize stability across the platform - - If you're expecting high load events including production launches or heavy load testing, or prolonged high resource usage please give us at least 2 weeks notice. You can do this by opening a ticket via the [support form](https://supabase.com/dashboard/support/new). - -### Auth Rate Limits - -- The table below shows the rate limit quotas on the following authentication endpoints: - -| Endpoint | Path | Limited By | Rate Limit | -| ------------------------------------------------ | -------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | -| All endpoints that send emails | `/auth/v1/signup` `/auth/v1/recover` `/auth/v1/user`[^1] | Sum of combined requests | Defaults to 30 emails per hour. As of 14th July 2023, this has been updated to 4 emails per hour. Is customizable with custom SMTP set up. | -| All endpoints that send One-Time-Passwords (OTP) | `/auth/v1/otp` | Sum of combined requests | Defaults to 30 OTPs per hour. Is customizable. | -| Send OTPs or magiclinks | `/auth/v1/otp` | Last request | Defaults to 60 seconds window before a new request is allowed. Is customizable. | -| Signup confirmation request | `/auth/v1/signup` | Last request | Defaults to 60 seconds window before a new request is allowed. Is customizable. | -| Password Reset Request | `/auth/v1/recover` | Last request | Defaults to 60 seconds window before a new request is allowed. Is customizable. | -| Verification requests | `/auth/v1/verify` | IP Address | 360 requests per hour (with bursts up to 30 requests) | -| Token refresh requests | `/auth/v1/token` | IP Address | 360 requests per hour (with bursts up to 30 requests) | -| Create or Verify an MFA challenge | `/auth/v1/factors/:id/challenge` `/auth/v1/factors/:id/verify` | IP Address | 15 requests per minute (with bursts up to 30 requests) | - -### Realtime Quotas - -- Review the [Realtime quotas](/docs/guides/realtime/quotas). -- If you need quotas increased you can always [contact support](https://supabase.com/dashboard/support/new). - -### Abuse Prevention - -- Supabase provides CAPTCHA protection on the signup, sign-in and password reset endpoints. Please refer to [our guide](/docs/guides/auth/auth-captcha) on how to protect against abuse using this method. - -### Email Link Validity - -- When working with enterprise systems, email scanners may scan and make a `GET` request to the reset password link or sign up link in your email. Since links in Supabase Auth are single use, a user who opens an email post-scan to click on a link will receive an error. To get around this problem, - consider altering the email template to replace the original magic link with a link to a domain you control. The domain can present the user with a "Sign-in" button which redirect the user to the original magic link URL when clicked. - -- When using a custom SMTP service, some services might have link tracking enabled which may overwrite or malform the email confirmation links sent by Supabase Auth. To prevent this from happening, we recommend that you disable link tracking when using a custom SMTP service. - -## Next steps - -This checklist is always growing so be sure to check back frequently, and also feel free to suggest additions and amendments by making a PR on [GitHub](https://github.com/supabase/supabase). - -[^1]: The rate limit is only applied on `/auth/v1/user` if this endpoint is called to update the user's email address. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/http-status-codes.mdx b/apps/docs/pages/guides/platform/http-status-codes.mdx deleted file mode 100644 index abe9e9cf7eddd..0000000000000 --- a/apps/docs/pages/guides/platform/http-status-codes.mdx +++ /dev/null @@ -1,47 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'http-status-codes', - title: 'HTTP Status Codes', - description: 'HTTP Status Codes used by the Supabase platform', -} - -The Supabase platform offers several HTTP APIs for each project. These APIs can use the status codes to indicate the state of the project, and the request being processed. The status codes returned for requests can be access via the [logs explorer](../platform/logs#logs-explorer). - -## 2XX Success - -2XX status codes indicate that the request was processed successfully. - -## 3XX Redirects - -3XX status codes indicate that the client must initiate another course of action to have the request processed successfully. The most popular usage of 3XX codes is to redirect the client to a different location. - -## 4XX Client Errors - -4XX status codes indicate an issue on the client's end with the request being made. These could include missing or invalid auth information, a malformed request, making too many requests in too short a time period ("rate limiting"), or a network issue on the client's end. - -## 5XX Server or Project Errors - -5XX status codes indicate that the project was unable to process the request successfully, but not because of an issue with the client's request. - -5XX status codes can be the result of the project not having enough [compute](/docs/guides/platform/compute-add-ons) to process a complex request being made by a client or not being able to keep up with the volume of requests made against the project. - -### 54X Project Errors - -54X status codes are custom codes used by the Supabase platform to indicate the state of the project. - -#### 540 Project Paused - -The project the request was being made against has been paused. The project cannot process requests until it is un-paused by the owner. - -Free-plan projects may be paused due to inactivity, on request by the owner, or in rare instances, due to abuse. - -#### 544 Project API Gateway Timeout - -The request is not completed within the configured time limit. - -The timeout limit is set to prevent long-running queries which can cause performance issues, increase latency, and potentially even crash the project. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/logs.mdx b/apps/docs/pages/guides/platform/logs.mdx deleted file mode 100644 index cbf4486c460bc..0000000000000 --- a/apps/docs/pages/guides/platform/logs.mdx +++ /dev/null @@ -1,319 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { logConstants } from 'shared-data' - -export const meta = { - id: 'logs', - title: 'Logging', - description: 'Getting started with Supabase Log Browser', -} - -The Supabase Platform includes a Logs Explorer that allows log tracing and debugging. Log retention is based on your [project's pricing plan](https://supabase.com/pricing). - -## Product Logs - -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. - -{/* */} - - - - -[API logs](https://supabase.com/dashboard/project/_/database/api-logs) show all network requests and response for the REST and GraphQL [APIs](../../guides/database/api). - -![API Logs](/docs/img/guides/platform/logs/logs-api.png) - - - - -[Postgres logs](https://supabase.com/dashboard/project/_/logs/postgres-logs) show queries and activity for your [database](../../guides/database). - -![Postgres Logs](/docs/img/guides/platform/logs/logs-database.png) - - - - -[Auth logs](https://supabase.com/dashboard/project/_/logs/auth-logs) show all server logs for your [Auth usage](../../guides/auth). - -![Auth Logs](/docs/img/guides/platform/logs/logs-auth.png) - - - - -[Storage logs](https://supabase.com/dashboard/project/_/logs/storage-logs) shows all server logs for your [Storage API](../../guides/storage). - -![Storage Logs](/docs/img/guides/platform/logs/logs-storage.png) - - - - -[Realtime logs](https://supabase.com/dashboard/project/_/logs/realtime-logs) show all server logs for your [Realtime API usage](../../guides/realtime). - - - -Realtime connections are not logged by default. Turn on [Realtime connection logs per client](#logging-realtime-connections) with the `log_level` parameter. - - - -![Realtime Logs](/docs/img/guides/platform/logs/logs-realtime.png) - - - - -For each [Edge Function](https://supabase.com/dashboard/project/_/functions), logs are available under the following tabs: - -**Invocations** - -The Invocations tab displays the edge logs of function calls. - -![Function Edge Logs](/docs/img/guides/platform/logs/logs-functions-edge.png) - -**Logs** - -The Logs tab displays logs emitted during function execution. - -![Function Logs](/docs/img/guides/platform/logs/logs-functions.png) - - - - ---- - -## Logging Postgres Queries - -By default, query logs are disabled for new Supabase projects, as they can reveal metadata about the contents of your database (such as table and column names). - -To enable query logs: - -1. [Enable the pgAudit extension](https://supabase.com/dashboard/project/_/database/extensions). -2. [Restart your project](https://supabase.com/dashboard/project/_/settings/general) using the **Fast database reboot** option. -3. Configure `pgaudit.log` (see below). Perform a fast reboot if needed. -4. View your query logs under [Logs > Postgres Logs](https://supabase.com/dashboard/project/_/logs/postgres-logs). - -### Configuring `pgaudit.log` - -The stored value under `pgaudit.log` determines the classes of statements that are logged by [pgAudit extension](https://www.pgaudit.org/). Refer to the pgAudit documentation for the [full list of values](https://github.com/pgaudit/pgaudit/blob/master/README.md#pgauditlog). - -To enable logging for function calls/do blocks, writes, and DDL statements for a single session, execute the following within the session: - -```sql --- temporary single-session config update -set pgaudit.log = 'function, write, ddl'; -``` - -To _permanently_ set a logging configuration (beyond a single session), execute the following, then perform a fast reboot: - -```sql --- equivalent permanent config update. -alter role postgres set pgaudit.log to 'function, write, ddl'; -``` - -To help with debugging, we recommend adjusting the log scope to only relevant statements as having too wide of a scope would result in a lot of noise in your Postgres logs. - -Note that in the above example, the role is set to `postgres`. To log user-traffic flowing through the [HTTP APIs](../../guides/database/api#rest-api-overview) powered by PostgREST, set your configuration values for the roles `anon` and `authenticated`. For traffic using the `service_role` key, set the configuration values for the role `service_role`. - -```sql --- for API-related logs -alter role anon set pgaudit.log to 'write'; -alter role authenticated set pgaudit.log to 'write'; - --- for service role logs -alter role service_role set pgaudit.log to 'write'; -``` - -By default, the log level will be set to `log`. To view other levels, run the following: - -```sql --- adjust log level -alter role postgres set pgaudit.log_level to 'info'; -alter role postgres set pgaudit.log_level to 'debug5'; -``` - -Note that as per the pgAudit [log_level documentation](https://github.com/pgaudit/pgaudit/blob/master/README.md#pgauditlog_level), `error`, `fatal`, and `panic` are not allowed. - -To reset system-wide settings, execute the following, then perform a fast reboot: - -```sql --- resets stored config. -alter role postgres reset pgaudit.log -``` - - - -If any permission errors are encountered when executing `alter role postgres ...`, it is likely that your project has yet to receive the patch to the latest version of [supautils](https://github.com/supabase/supautils), which is currently being rolled out. - - - -## Logging Realtime Connections - -Realtime doesn't log new WebSocket connections or Channel joins by default. Enable connection logging per client by including an `info` `log_level` parameter when instantiating the Supabase client. - -```javascript -import { createClient } from '@supabase/supabase-js' - -const options = { - realtime: { - log_level: 'info', - }, -} -const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', options) -``` - -## Logs Explorer - -The [Logs Explorer](https://supabase.com/dashboard/project/_/logs-explorer) exposes logs from each part of the Supabase stack as a separate table that can be queried and joined using SQL. - -![Logs Explorer](/docs/img/guides/platform/logs/logs-explorer.png) - -You can access the following logs from the **Sources** drop-down: - -- `auth_logs`: GoTrue server logs, containing authentication/authorization activity. -- `edge_logs`: Edge network logs, containing request and response metadata retrieved from Cloudflare. -- `function_edge_logs`: Edge network logs for only edge functions, containing network requests and response metadata for each execution. -- `function_logs`: Function internal logs, containing any `console` logging from within the edge function. -- `postgres_logs`: Postgres database logs, containing statements executed by connected applications. -- `realtime_logs`: Realtime server logs, containing client connection information. -- `storage_logs`: Storage server logs, containing object upload and retrieval information. - -## Querying with the Logs Explorer - -The Logs Explorer uses BigQuery and supports all [available SQL functions and operators](https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators). - -### Timestamp Display and Behavior - -Each log entry is stored with a `timestamp` as a `TIMESTAMP` data type. Use the appropriate [timestamp function](https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions#timestamp) to utilize the `timestamp` field in a query. - -Raw top-level timestamp values are rendered as unix microsecond. To render the timestamps in a human-readable format, use the `DATETIME()` function to convert the unix timestamp display into an ISO-8601 timestamp. - -```sql --- timestamp column without datetime() -select timestamp from .... --- 1664270180000 - --- timestamp column with datetime() -select datetime(timestamp) from .... --- 2022-09-27T09:17:10.439Z -``` - -### Unnesting Arrays - -Each log event stores metadata an array of objects with multiple levels, and can be seen by selecting single log events in the Logs Explorer. To query arrays, use `unnest()` on each array field and add it to the query as a join. This allows you to reference the nested objects with an alias and select their individual fields. - -For example, to query the edge logs without any joins: - -```sql -select timestamp, metadata from edge_logs as t; -``` - -The resulting `metadata` key is rendered as an array of objects in the Logs Explorer. In the following diagram, each box represents a nested array of objects: - -{/* */} - -![Without Unnesting](/docs/img/unnesting-none.png) - -Perform a `cross join unnest()` to work with the keys nested in the `metadata` key. - -To query for a nested value, add a join for each array level: - -```sql -select timestamp, request.method, header.cf_ipcountry -from - edge_logs as t - cross join unnest(t.metadata) as metadata - cross join unnest(metadata.request) as request - cross join unnest(request.headers) as header; -``` - -This surfaces the following columns available for selection: -![With Two Level Unnesting](/docs/img/unnesting-2.png) - -This allows you to select the `method` and `cf_ipcountry` columns. In JS dot notation, the full paths for each selected column are: - -- `metadata[].request[].method` -- `metadata[].request[].headers[].cf_ipcountry` - -### LIMIT and Result Row Limitations - -The Logs Explorer has a maximum of 1000 rows per run. Use `LIMIT` to optimize your queries by reducing the number of rows returned further. - -### Best Practices - -1. Include a filter over **timestamp** - -Querying your entire log history might seem appealing. For **Enterprise** customers that have a large retention range, you run the risk of timeouts due additional time required to scan the larger dataset. - -2. Avoid selecting large nested objects. Select individual values instead. - -When querying large objects, the columnar storage engine selects each column associated with each nested key, resulting in a large number of columns being selected. This inadvertently impacts the query speed and may result in timeouts or memory errors, especially for projects with a lot of logs. - -Instead, select only the values required. - -```sql --- ❌ Avoid doing this -select - datetime(timestamp), - m as metadata -- <- metadata contains many nested keys -from - edge_logs as t - cross join unnest(t.metadata) as m; - --- ✅ Do this -select - datetime(timestamp), - r.method -- <- select only the required values -from - edge_logs as t - cross join unnest(t.metadata) as m - cross join unnest(m.request) as r; -``` - -### Examples and Templates - -The Logs Explorer includes **Templates** (available in the Templates tab or the dropdown in the Query tab) to help you get started. - -For example, you can enter the following query in the SQL Editor to retrieve each user's IP address: - -```sql -select datetime(timestamp), h.x_real_ip -from - edge_logs - cross join unnest(metadata) as m - cross join unnest(m.request) as r - cross join unnest(r.headers) as h -where h.x_real_ip is not null and r.method = "GET"; -``` - -### Log Source Reference - -Refer to the full field reference for each available source below. Do note that in order to access each nested key, you would need to perform the [necessary unnesting joins](#unnesting-arrays) - - - {logConstants.schemas.map((schema) => ( - - - - - - - - {schema.fields - .sort((a, b) => a.path - b.path) - .map((field) => ( - - - - - ))} - -
    PathType
    {field.path}{field.type}
    -
    - ))} -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/marketplace.mdx b/apps/docs/pages/guides/platform/marketplace.mdx deleted file mode 100644 index 755b5ebd5dd4a..0000000000000 --- a/apps/docs/pages/guides/platform/marketplace.mdx +++ /dev/null @@ -1,40 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'integrations', - title: 'Supabase Marketplace', - description: 'Integrations and Partners', -} - -The Supabase Marketplace brings together all the tools you need to extend your Supabase project. This includes: - -- [Experts](https://supabase.com/partners/experts) - partners to help you build and support your Supabase project. -- [Integrations](https://supabase.com/partners/integrations) - extend your projects with external Auth, Caching, Hosting, and Low-code tools. - -## Build an integration - -Supabase provides several integration points: - -- The [Postgres connection](/docs/guides/database/connecting-to-postgres). Anything that works with Postgres also works with Supabase projects. -- The [Project REST API](/docs/guides/api#rest-api-overview) & client libraries. -- The [Project GraphQL API](/docs/guides/api#graphql-api-overview). -- The [Platform API](/docs/reference/api). - -## List your integration - -[Apply to the Partners program](https://supabase.com/partners/integrations#become-a-partner) to list your integration in the Partners marketplace and in the Supabase docs. - -Integrations are assessed on the following criteria: - -- **Business viability** - While we welcome everyone to built an integration, we only list companies that are deemed to be long-term viable. This includes an official business registration and bank account, meaningful revenue, or Venture Capital backing. We require this criteria to ensure the health of the marketplace. -- **Compliance** - Integrations should not infringe on the Supabase brand/trademark. In short, you cannot use "Supabase" in the name. As the listing appears on the Supabase domain, we don't want to mislead developers into thinking that an integration is an official product. -- **Service Level Agreements** - All listings are required to have their own Terms and Conditions, Privacy Policy, and Acceptable Use Policy, and the company must have resources to meet their SLAs. -- **Maintainability** - All integrations are required to be maintained and functional with Supabase, and the company may be assessed on your ability to remain functional over a long time horizon. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/maturity-model.mdx b/apps/docs/pages/guides/platform/maturity-model.mdx deleted file mode 100644 index b86279f395311..0000000000000 --- a/apps/docs/pages/guides/platform/maturity-model.mdx +++ /dev/null @@ -1,49 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'maturity-model', - title: 'Maturity Model', - description: 'Growing with your application.', -} - -Supabase is great for building something very fast _and_ for scaling up. However, it's important to note that as your application matures and your team expands, the practices you use for managing an application in production should not be the same as the practices you used for prototyping. - -## Prototyping - -The Dashboard is a quick and easy tool for building applications while you are prototyping. That said, we strongly recommend using [Migrations](/docs/guides/getting-started/local-development#database-migrations) to manage your database changes. You can use our CLI to [capture any changes](/docs/reference/cli/supabase-db-diff) you have made on the Dashboard so that you can commit them a version control system, like git. - -## Collaborating - -As soon as you start collaborating with team members, all project changes should be in version control. At this point we strongly recommend moving away from using the Dashboard for schema changes. Use migrations to manage your database, and check them into your version control system to track every change. - -Resources: - -- [Database migrations](/docs/guides/getting-started/local-development#database-migrations) -- [Managing access on the Dashboard](/docs/guides/platform/access-control) -- [PGAudit for Postgres](/docs/guides/database/extensions/pgaudit) - -## In Production - -Once your application is live, you should never change your database using the Dashboard. Supabase provides various [access levels](https://supabase.com/docs/guides/platform/access-control) for the Dashboard that can help enforce this. Some other important things to consider at this point include: - -- Read the [Production Checklist](/docs/guides/platform/going-into-prod). -- Make your team aware of the [Shared Responsibilities](/docs/guides/platform/shared-responsibility-model) between your organization and Supabase. -- Design a [safe workflow](https://supabase.com/docs/guides/platform/shared-responsibility-model#you-decide-your-own-workflow) for managing your database. We strongly recommend running [multiple environments](/docs/guides/cli/managing-environments) as part of your development workflow (`local` -> `staging` -> `prod`). -- As your database to grows, we strongly recommend moving to [Point-in-Time Recovery](/docs/guides/platform/backups#point-in-time-recovery). This is safer and has less impact on your database performance during maintenance windows. - -Resources: - -- [Database migrations](/docs/guides/getting-started/local-development#database-migrations) -- [Managing access on the Dashboard](/docs/guides/platform/access-control) -- [PGAudit for Postgres](/docs/guides/database/extensions/pgaudit) -- [Managing environments](/docs/guides/cli/managing-environments) - -## Enterprise - -For a more secure setup, consider running your workload across several organizations. It's a common pattern to have a Production organization which is restricted to only those team members who are qualified to have direct access to production databases. - -Reach out to [growth@supabase.com](mailto:growth@supabase.com) if you need help designing a secure development workflow for your organization. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/metrics.mdx b/apps/docs/pages/guides/platform/metrics.mdx deleted file mode 100644 index 5f5bb6e1e90fa..0000000000000 --- a/apps/docs/pages/guides/platform/metrics.mdx +++ /dev/null @@ -1,37 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'metrics', - title: 'Metrics', - description: 'Observability for your Supabase project', -} - -In addition to the reports and charts built in to the Supabase dashboard, each project hosted on the Supabase platform comes with a [Prometheus](https://prometheus.io/)-compatible metrics endpoint, which can be used to gather insight into the health and status of your project. - -You can use this endpoint to ingest data into your own monitoring and alerting infrastructure, as long as it is capable of scraping Prometheus-compatible endpoints, in order to set up custom rules beyond those supported by the Supabase dashboard. - - - -The endpoint discussed in this article is in beta, and the metrics returned by it might evolve or be changed in the future to increase its utility. - - - - - -The endpoint discussed in this article is not available on self-hosted. - - - -## Accessing the metrics endpoint - -Your project's metrics endpoint is accessible at `https://.supabase.co/customer/v1/privileged/metrics`. Access to the endpoint is secured via HTTP Basic Auth; the username is `service_role`, while the password is the service role JWT available through the Supabase dashboard. - -```shell -> curl https://.supabase.co/customer/v1/privileged/metrics --user 'service_role:' -``` - -Additionally, we [maintain a guide](https://github.com/supabase/grafana-agent-fly-example/) on quickly setting up a scraping agent to work with Grafana Cloud. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx b/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx deleted file mode 100644 index f425d5d260d3a..0000000000000 --- a/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx +++ /dev/null @@ -1,137 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'migrating-and-upgrading-projects', - title: 'Migrating and Upgrading Projects', - description: 'Upgrade your project to the latest version of Supabase.', - sidebar_label: 'Migrating and upgrading', -} - -Supabase ships fast and we endeavor to add all new features to existing projects wherever possible. -In some cases, access to new features require upgrading or migrating your Supabase project. - -## Upgrade your project - - - This is only available for projects on the Free plan. For projects on the Pro plan, please contact - support for assistance with upgrading. - - -When you pause and restore a project, the restored database includes the latest features. This method _does_ include downtime, so be aware that your project will be inaccessible for a short period of time. - -1. On the [General Settings](https://supabase.com/dashboard/project/_/settings/general) page in the Dashboard, click **Pause project**. You will be redirected to the home screen as your project is pausing. This process can take several minutes. -1. After your project is paused, click **Restore project**. The restoration can take several minutes depending on how much data your database has. You will receive an email once the restoration is complete. - -## Migrate your project - -Migrating projects can be achieved using the Supabase CLI. This is particularly useful for older projects (e.g. to use a newer Postgres version). - -### Before you begin - -- Install [Postgres](https://www.postgresql.org/download/) so you can run `psql` and `pg_dump`. -- Install [Supabase CLI](https://supabase.com/docs/guides/cli#installation). -- Create a new [Supabase project](https://supabase.com/dashboard). -- Install [Docker Desktop](https://www.docker.com) for your platform. -- Set environment variables for the old project's database URL as `$OLD_DB_URL` and the new project's as `$NEW_DB_URL`. - To find the database URL for a project, go to the project's dashboard page [Project Settings/Database](https://supabase.com/dashboard/project/_/settings/database) and look at `Connection string / URI`. For example, to set the `$OLD_DB_URL` you would run `export OLD_DB_URL=postgresql://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF#].supabase.co:5432/postgres`. - -### Backup your old database - -1. Run the following command from your terminal: - -```bash -supabase db dump --db-url "$OLD_DB_URL" -f roles.sql --role-only -supabase db dump --db-url "$OLD_DB_URL" -f schema.sql -supabase db dump --db-url "$OLD_DB_URL" -f data.sql --use-copy --data-only -``` - -### Restore to your new project - -In your new project: - -1. Enable [Database Webhooks](https://supabase.com/dashboard/project/_/database/hooks) if you enabled them in your old project. -2. Enable any [extensions](https://supabase.com/dashboard/project/_/database/extensions) that were enabled in your old project. - -Then run the following command from your terminal: - -```bash -psql \ - --single-transaction \ - --variable ON_ERROR_STOP=1 \ - --file roles.sql \ - --file schema.sql \ - --file data.sql \ - --dbname "$NEW_DB_URL" -``` - -Notes: - -- If you have created any [custom roles](https://supabase.com/dashboard/project/_/database/roles) with `login` attribute, you have to manually set their passwords in the new project. -- If you receive any permission errors when running `supabase db dump --db-url "$OLD_DB_URL" -f schema.sql`, you may need to edit the `schema.sql` file and change any lines saying `OWNER TO "supabase_admin"` to `OWNER TO "postgres"`. - -### Enable publication on tables - -Replication for Realtime is disabled for all tables in your new project. On the [Replication](https://supabase.com/dashboard/project/_/database/replication) page in the Dashboard, select your new project and enable replication for tables that were enabled in your old project. - -### Migrate Storage objects - -The new project has the old project's Storage buckets, but the Storage objects need to be migrated manually. Use this script to move storage objects from one project to another. - -```js -// npm install @supabase/supabase-js@1 -const { createClient } = require('@supabase/supabase-js') - -const OLD_PROJECT_URL = 'https://xxx.supabase.co' -const OLD_PROJECT_SERVICE_KEY = 'old-project-service-key-xxx' - -const NEW_PROJECT_URL = 'https://yyy.supabase.co' -const NEW_PROJECT_SERVICE_KEY = 'new-project-service-key-yyy' - -;(async () => { - const oldSupabaseRestClient = createClient(OLD_PROJECT_URL, OLD_PROJECT_SERVICE_KEY, { - db: { - schema: 'storage', - }, - }) - const oldSupabaseClient = createClient(OLD_PROJECT_URL, OLD_PROJECT_SERVICE_KEY) - const newSupabaseClient = createClient(NEW_PROJECT_URL, NEW_PROJECT_SERVICE_KEY) - - // make sure you update max_rows in postgrest settings if you have a lot of objects - // or paginate here - const { data: oldObjects, error } = await oldSupabaseRestClient.from('objects').select() - if (error) { - console.log('error getting objects from old bucket') - throw error - } - - for (const objectData of oldObjects) { - console.log(`moving ${objectData.id}`) - try { - const { data, error: downloadObjectError } = await oldSupabaseClient.storage - .from(objectData.bucket_id) - .download(objectData.name) - if (downloadObjectError) { - throw downloadObjectError - } - - const { _, error: uploadObjectError } = await newSupabaseClient.storage - .from(objectData.bucket_id) - .upload(objectData.name, data, { - upsert: true, - contentType: objectData.metadata.mimetype, - cacheControl: objectData.metadata.cacheControl, - }) - if (uploadObjectError) { - throw uploadObjectError - } - } catch (err) { - console.log('error moving ', objectData) - console.log(err) - } - } -})() -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/network-restrictions.mdx b/apps/docs/pages/guides/platform/network-restrictions.mdx deleted file mode 100644 index cb86b8008fd99..0000000000000 --- a/apps/docs/pages/guides/platform/network-restrictions.mdx +++ /dev/null @@ -1,75 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'network-restrictions', - title: 'Network Restrictions', - description: "Apply network restrictions for your project's database.", -} - - - -Network Restrictions is currently in beta and is slowly being made available to all projects. [Contact support](https://supabase.com/dashboard/support/new) if you'd like to request early access. - - - -Each Supabase project comes with configurable restrictions on the IP ranges that are allowed to connect to Postgres and PgBouncer ("your database"). These restrictions are enforced before traffic reaches your database. If a connection is not restricted by IP, it still needs to authenticate successfully with valid database credentials. - -To get started: - -1. [Install](/docs/guides/cli) the Supabase CLI 1.22.0+. -1. [Log in](/docs/guides/getting-started/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI. -1. If your project was created before 23rd December 2022, it will need to be [upgraded to the latest Supabase version](/docs/guides/platform/migrating-and-upgrading-projects) before Network Restrictions can be used. -1. Ensure that you have [Owner or Admin permissions](/docs/guides/platform/access-control#manage-team-members) for the project that you are enabling network restrictions. - -## Check restrictions - -You can use the `get` subcommand of the CLI to retrieve the restrictions currently in effect. - -If restrictions have been applied, the output of the `get` command will reflect the IP ranges allowed to connect: - -```bash -> supabase network-restrictions --project-ref {ref} get --experimental -DB Allowed CIDRs: [128.12.1.1/16 183.12.1.1/24] -Restrictions applied successfully: true -``` - -If restrictions have never been applied to your project, the list of allowed CIDRs will be empty, but they will also not have been applied ("Restrictions applied successfully: false"). As a result, all IPs are allowed to connect to your database: - -```bash -> supabase network-restrictions --project-ref {ref} get --experimental -DB Allowed CIDRs: [] -Restrictions applied successfully: false -``` - -## Update restrictions - -The `update` subcommand is used to apply network restrictions to your project: - -```bash -> supabase network-restrictions --project-ref {ref} update --db-allow-cidr 128.12.1.1/16 --db-allow-cidr 183.12.1.1/24 --experimental -DB Allowed CIDRs: [128.12.1.1/16 183.12.1.1/24] -Restrictions applied successfully: true -``` - -The restrictions specified (in the form of CIDRs) replaces any restrictions that might have been applied in the past. -To add to the existing restrictions, you must include the existing restrictions within the list of CIDRs provided to the `update` command. - -## Remove restrictions - -To remove all restrictions on your project, you can use the `update` subcommand with the CIDR `0.0.0.0/0`: - -```bash -> supabase network-restrictions --project-ref {ref} update --db-allow-cidr 0.0.0.0/0 --experimental -DB Allowed CIDRs: [0.0.0.0/0] -Restrictions applied successfully: true -``` - -## Limitations - -- The current iteration of Network Restrictions applies to connections to Postgres and PgBouncer and doesn't currently apply to APIs offered over HTTPS (e.g., PostgREST, Storage, and Auth). -- Network Restrictions should not be used if you need to connect to your Postgres database using Edge Functions. -- [Supavisor](https://github.com/supabase/supavisor/) does not currently support Network Restrictions. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/oauth-apps/build-a-supabase-integration.mdx b/apps/docs/pages/guides/platform/oauth-apps/build-a-supabase-integration.mdx deleted file mode 100644 index f98840a403468..0000000000000 --- a/apps/docs/pages/guides/platform/oauth-apps/build-a-supabase-integration.mdx +++ /dev/null @@ -1,163 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'build-a-supabase-integration', - title: 'Build a Supabase Integration (Beta)', - subtitle: - "This guide steps through building a Supabase Integration using OAuth2 and the management API, allowing you to manage users' organizations and projects on their behalf.", - description: 'Build a Supabase Integration using OAuth2 and the Management API.', -} - -Using OAuth2.0 you can retrieve an access and refresh token that grant your application full access to the [Management API](https://supabase.com/docs/reference/api/introduction) on behalf of the user. - -## Create an OAuth App - -1. In your organization's settings, navigate to the [**OAuth Apps**](/dashboard/org/_/apps) tab. -2. In the upper-right section of the page, click **Add application**. -3. Fill in the required details and click **Confirm**. - -## Show a "Connect Supabase" button - -In your user interface, add a "Connect Supabase" button to kick off the OAuth flow. Follow the design guidelines outlined in our [brand assets](/brand-assets). - -## Implementing the OAuth 2.0 flow - -Once you've published your OAuth App on Supabase, you can use the OAuth 2.0 protocol get authorization from Supabase users to manage their organizations and projects. - -You can use your preferred OAuth2 client or follow the steps below. You can see an example implementation in TypeScript using Supabase Edge Functions [on our GitHub](https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/connect-supabase). - -### Redirecting to the authorize URL - -Within your app's UI, redirect the user to [`https://api.supabase.com/v1/oauth/authorize`](). Make sure to include all required query parameters such as: - -- `client_id`: Your client id from the app creation above. -- `redirect_uri`: The URL where Supabase will redirect the user to after providing consent. -- `scope`: Currently only `all` is supported. More fine-grained access control coming soon. -- `response_type`: Set this to `code`. -- `state`: Information about the state of your app. Note that `redirect_uri` and `state` together cannot exceed 4kB in size. -- (Recommended) PKCE: We strongly recommend using the PKCE flow for increased security. Generate a random value before taking the user to the authorize endpoint. This value is called code verifier. Hash it with SHA256 and include it as the `code_challenge` parameter, while setting `code_challenge_method` to `S256`. In the next step, you would need to provide the code verifier to get the first access and refresh token. - -```ts -router.get('/connect-supabase/login', async (ctx) => { - // Construct the URL for the authorization redirect and get a PKCE codeVerifier. - const { uri, codeVerifier } = await oauth2Client.code.getAuthorizationUri() - console.log(uri.toString()) - // console.log: https://api.supabase.com/v1/oauth/authorize?response_type=code&client_id=7673bde9-be72-4d75-bd5e-b0dba2c49b38&redirect_uri=http%3A%2F%2Flocalhost%3A54321%2Ffunctions%2Fv1%2Fconnect-supabase%2Foauth2%2Fcallback&scope=all&code_challenge=jk06R69S1bH9dD4td8mS5kAEFmEbMP5P0YrmGNAUVE0&code_challenge_method=S256 - - // Store the codeVerifier in the user session (cookie). - ctx.state.session.flash('codeVerifier', codeVerifier) - - // Redirect the user to the authorization endpoint. - ctx.response.redirect(uri) -}) -``` - -Find the full example on [GitHub](https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/connect-supabase). - -### Handling the callback - -Once the user consents to providing API access to your OAuth App, Supabase will redirect the user to the `redirect_uri` provided in the previous step. The URL will contain these query parameters: - -- `code`: An authorization code you should exchange with Supabase to get the access and refresh token. -- `state`: The value you provided in the previous step, to help you associate the request with the user. The `state` property returned here should be compared to the `state` you sent previously. - -Exchange the authorization code for an access and refresh token by calling [`POST https://api.supabase.com/v1/oauth/token`]() with the following query parameters as content-type `application/x-www-form-urlencoded`: - -- `grant_type`: The value `authorization_code`. -- `code`: The `code` returned in the previous step. -- `redirect_uri`: This must be exactly the same URL used in the first step. -- (Recommended) `code_verifier`: If you used the PKCE flow in the first step, include the code verifier as `code_verifier`. - -As per OAuth2 spec, provide the client id and client secret as basic auth header: - -- `client_id`: The unique client ID identifying your OAuth App. -- `client_secret`: The secret that authenticates your OAuth App to Supabase. - -```ts -router.get('/connect-supabase/oauth2/callback', async (ctx) => { - // Make sure the codeVerifier is present for the user's session. - const codeVerifier = ctx.state.session.get('codeVerifier') as string - if (!codeVerifier) throw new Error('No codeVerifier!') - - // Exchange the authorization code for an access token. - const tokens = await fetch(config.tokenUri, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - Accept: 'application/json', - Authorization: `Basic ${btoa(`${config.clientId}:${config.clientSecret}`)}`, - }, - body: new URLSearchParams({ - grant_type: 'authorization_code', - code: ctx.request.url.searchParams.get('code') || '', - redirect_uri: config.redirectUri, - code_verifier: codeVerifier, - }), - }).then((res) => res.json()) - console.log('tokens', tokens) - - // Store the tokens in your DB for future use. - - ctx.response.body = 'Success' -}) -``` - -Find the full example on [GitHub](https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/connect-supabase). - -## Refreshing an access token - -You can use the [`POST /v1/oauth/token`]() endpoint to refresh an access token using the refresh token returned at the end of the previous section. - -If the user has revoked access to your application, you will not be able to refresh a token. Furthermore, access tokens will stop working. Make sure you handle HTTP Unauthorized errors when calling any Supabase API. - -## Calling the Management API - -Refer to [the Management API reference](/docs/reference/api/introduction#authentication) to learn more about authentication with the Management API. - -### Use the JavaScript (TypeScript) SDK - -For convenience, when working with JavaScript/TypeScript, you can use the [supabase-management-js](https://github.com/supabase-community/supabase-management-js#supabase-management-js) library. - -```ts -import { SupabaseManagementAPI } from 'supabase-management-js' - -const client = new SupabaseManagementAPI({ accessToken: '' }) -``` - -## Integration Recommendations - -There are a couple common patterns you can consider adding to your integration that can facilitate a great user experience. - -### Store API keys in env variables - -Some integraions, e.g. like [Cloudflare Workers](/partners/integrations/cloudflare-workers) provide convenient access to the API URL and API keys to allow user to speed up development. - -Using the management API, you can retrieve a project's API credentials using the [`/projects/{ref}/api-keys` endpoint](https://api.supabase.com/api/v1#/projects/getProjectApiKeys). - -### Pre-fill database connection details - -If your integration directly connects to the project's database, you can pref-fill the Postgres connection details for the user, it follows this schema: - -``` -postgresql://postgres:[DB-PASSWORD]@db.[REF].supabase.co:5432/postgres -``` - -Note that you cannot retrieve the database password via the management API, so for the user's existing projects you will need to collect their database password in your UI. - -### Create new organizations and projects - -If you don't need access to the user's existing project, we recommend creating a new project under a new organization. Use the [`/v1/organizations` endpoint](https://api.supabase.com/api/v1#/organizations/createOrganization) to create a new organization named after your integration, afterward use the [`/v1/projects` endpoint](https://api.supabase.com/api/v1#/projects/createProject) to create a new project. - -When creating a new project, you can either ask the user to provide a database password, or you can generate a secure password for them. In any case, make sure to securely store the database password on your end which will allow you to construct the Postgres URI. - -### Configure custom Auth SMTP - -You can configure the user's [custom SMTP settings](https://supabase.com/docs/guides/auth/auth-smtp) using the [`/config/auth` endpoint](https://api.supabase.com/api/v1#/projects%20config/updateV1AuthConfig). - -## Current limitations - -Only some features are available until we roll out fine-grained access control. If you need full database access, you will need to prompt the user for their database password. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/performance.mdx b/apps/docs/pages/guides/platform/performance.mdx deleted file mode 100644 index e8844a8037546..0000000000000 --- a/apps/docs/pages/guides/platform/performance.mdx +++ /dev/null @@ -1,226 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'performance', - title: 'Performance Tuning', - description: 'Getting the best results out of your Supabase project', -} - -The Supabase platform automatically optimizes your Postgres database to take advantage of the compute resources of the plan your project is on. However, these optimizations are based on assumptions about the type of workflow the project is being utilized for, and it is likely that better results can be obtained by tuning the database for your particular workflow. - -## Examining Query Performance - -Unoptimized queries are a major cause of poor database performance. The techniques on this page can help you identify and understand queries that take the most time and resources from your database. - -Database performance is a large topic and many factors can contribute. Some of the most common causes of poor performance include: - -- An inefficiently designed schema -- Inefficiently designed queries -- A lack of indexes causing slower than required queries over large tables -- Unused indexes causing slow `INSERT`, `UPDATE` and `DELETE` operations -- Not enough compute resources, such as memory, causing your database to go to disk for results too often -- Lock contention from multiple queries operating on highly utilized tables -- Large amount of bloat on your tables causing poor query planning - -Thankfully there are solutions to all these issues, which we will cover in the following sections. - -### Postgres Cumulative Statistics system - -Postgres collects data about its own operations using the [cumulative statistics system](https://www.postgresql.org/docs/current/monitoring-stats.html). In addition to this, every Supabase project has the [pg_stat_statements extension](/docs/guides/database/extensions/pg_stat_statements) enabled by default. This extension records query execution performance details and is the best way to find inefficient queries. This information can be combined with the Postgres query plan analyzer to develop more efficient queries. - -Here are some example queries to get you started. - -#### Most frequently called queries: - -```sql -select - auth.rolname, - statements.query, - statements.calls, - -- -- Postgres 13, 14, 15 - statements.total_exec_time + statements.total_plan_time as total_time, - statements.min_exec_time + statements.min_plan_time as min_time, - statements.max_exec_time + statements.max_plan_time as max_time, - statements.mean_exec_time + statements.mean_plan_time as mean_time, - -- -- Postgres <= 12 - -- total_time, - -- min_time, - -- max_time, - -- mean_time, - statements.rows / statements.calls as avg_rows -from - pg_stat_statements as statements - inner join pg_authid as auth on statements.userid = auth.oid -order by statements.calls desc -limit 100; -``` - -This query shows: - -- query statistics, ordered by the number of times each query has been executed -- the role that ran the query -- the number of times it has been called -- the average number of rows returned -- the cumulative total time the query has spent running -- the min, max and mean query times. - -This provides useful information about the queries you run most frequently. Queries that have high `max_time` or `mean_time` times and are being called often can be good candidates for optimization. - -#### Slowest queries by execution time: - -```sql -select - auth.rolname, - statements.query, - statements.calls, - -- -- Postgres 13, 14, 15 - statements.total_exec_time + statements.total_plan_time as total_time, - statements.min_exec_time + statements.min_plan_time as min_time, - statements.max_exec_time + statements.max_plan_time as max_time, - statements.mean_exec_time + statements.mean_plan_time as mean_time, - -- -- Postgres <= 12 - -- total_time, - -- min_time, - -- max_time, - -- mean_time, - statements.rows / statements.calls as avg_rows -from - pg_stat_statements as statements - inner join pg_authid as auth on statements.userid = auth.oid -order by max_time desc -limit 100; -``` - -This query will show you statistics about queries ordered by the maximum execution time. It is similar to the query above ordered by calls, but this one highlights outliers that may have high executions times. Queries which have high or mean execution times are good candidates for optimisation. - -#### Most time consuming queries: - -```sql -select - auth.rolname, - statements.query, - statements.calls, - statements.total_exec_time + statements.total_plan_time as total_time, - to_char( - ( - (statements.total_exec_time + statements.total_plan_time) / sum( - statements.total_exec_time + statements.total_plan_time - ) over () - ) * 100, - 'FM90D0' - ) || '%' as prop_total_time -from - pg_stat_statements as statements - inner join pg_authid as auth on statements.userid = auth.oid -order by total_time desc -limit 100; -``` - -This query will show you statistics about queries ordered by the cumulative total execution time. It shows the total time the query has spent running as well as the proportion of total execution time the query has taken up. - -Queries which are the most time consuming are not necessarily bad, you may have a very efficient and frequently ran queries that end up taking a large total % time, but it can be useful to help spot queries that are taking up more time than they should. - -### Hit rate - -Generally for most applications a small percentage of data is accessed more regularly than the rest. To make sure that your regularly accessed data is available, Postgres tracks your data access patterns and keeps this in its [shared_buffers](https://www.postgresql.org/docs/15/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY) cache. - -Applications with lower cache hit rates generally perform more poorly since they have to hit the disk to get results rather than serving them from memory. Very poor hit rates can also cause you to burst past your [Disk IO limits](./compute-add-ons#disk-io) causing significant performance issues. - -You can view your cache and index hit rate by executing the following query: - -```sql -select - 'index hit rate' as name, - (sum(idx_blks_hit)) / nullif(sum(idx_blks_hit + idx_blks_read), 0) * 100 as ratio -from pg_statio_user_indexes -union all -select - 'table hit rate' as name, - sum(heap_blks_hit) / nullif(sum(heap_blks_hit) + sum(heap_blks_read), 0) * 100 as ratio -from pg_statio_user_tables; -``` - -This shows the ratio of data blocks fetched from the Postgres [shared_buffers](https://www.postgresql.org/docs/15/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY) cache against the data blocks that were read from disk/OS cache. - -If either of your index or table hit rate are < 99% then this can indicate your compute plan is too small for your current workload and you would benefit from more memory. [Upgrading your compute](./compute-add-ons) is easy and can be done from your [project dashboard](https://supabase.com/dashboard/project/_/settings/billing/subscription). - -### Optimizing poor performing queries - -Postgres has built in tooling to help you optimize poorly performing queries. You can use the [query plan analyzer](https://www.postgresql.org/docs/current/sql-explain.html) on any expensive queries that you have identified: - -```sql -explain analyze ; -``` - -When you include `analyze` in the explain statement, the database attempts to execute the query and provides a detailed query plan along with actual execution times. So, be careful using `explain analyze` with `insert`/`update`/`delete` queries, because the query will actually run, and could have unintended side-effects. - -If you run just `explain` without the `analyze` keyword, the database will only perform query planning without actually executing the query. This approach can be beneficial when you want to inspect the query plan without affecting the database or if you encounter timeouts in your queries. - -Using the query plan analyzer to optimize your queries is a large topic, with a number of online resources available: - -- [Official docs.](https://www.postgresql.org/docs/current/using-explain.html) -- [The Art of PostgreSQL.](https://theartofpostgresql.com/explain-plan-visualizer/) -- [Postgres Wiki.](https://wiki.postgresql.org/wiki/Using_EXPLAIN) -- [Enterprise DB.](https://www.enterprisedb.com/blog/postgresql-query-optimization-performance-tuning-with-explain-analyze) - -You can pair the information available from `pg_stat_statements` with the detailed system metrics available [via your metrics endpoint](../platform/metrics) to better understand the behavior of your DB and the queries you're executing against it. - -## Optimizing the number of connections - -By default, the number of connections allowed to Postgres and PgBouncer is configured based on the resources available to the database. - -| Compute Add-on | Postgresql connections | PGBouncer connections | -| -------------- | ---------------------- | --------------------- | -| None | 60 | 200 | -| Small | 90 | 200 | -| Medium | 120 | 200 | -| Large | 160 | 300 | -| XL | 240 | 700 | -| 2XL | 380 | 1500 | -| 4XL | 480 | 3000 | -| 8XL | 490 | 6000 | -| 12XL | 500 | 9000 | -| 16XL | 500 | 12000 | - -If the number of connections is insufficient, you will receive the following error upon connecting to the DB: - -```shell -$ psql -U postgres -h ... -FATAL: remaining connection slots are reserved for non-replication superuser connections -``` - -In such a scenario, you can consider: - -- [upgrading to a larger compute add-on](https://supabase.com/dashboard/project/_/settings/billing) -- configuring your clients to use fewer connections -- manually configuring the database for a higher number of connections - -### Configuring clients to use fewer connections - -You can use the [pg_stat_activity](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-ACTIVITY-VIEW) view to debug which clients are holding open connections on your DB. `pg_stat_activity` only exposes information on direct connections to the database. Information on the number of connections to pgbouncer is available [via the metrics endpoint](../platform/metrics). - -Depending on the clients involved, you might be able to configure them to work with fewer connections (e.g. by imposing a limit on the maximum number of connections they're allowed to use), or shift specific workloads to connect via [pgbouncer](/docs/guides/database/connecting-to-postgres#connection-pooler) instead. Transient workflows, which can quickly scale up and down in response to traffic (e.g. serverless functions), can especially benefit from using a connection pooler rather than connecting to the DB directly. - -### Allowing higher number of connections - -You can configure Postgres by executing the following statement, followed by a server restart: - -```sql -alter system set max_connections = ''; -``` - -Note that the default configuration used by the Supabase platform optimizes the database to maximize resource utilization, and as a result, you might also need to configure other options (e.g. `work_mem`, `shared_buffers`, `maintenance_work_mem`) in order to tune them towards your use-case, and to avoid causing instability in your database. - -Once overridden, the Supabase platform will continue to respect your manually configured value (even if the add-on size is changed), unless the override is removed with the following statement, followed by a server restart: - -```sql -alter system reset max_connections; -alter system reset ; -... -``` - -Configuring the number of PgBouncer connections is not supported at this time. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/permissions.mdx b/apps/docs/pages/guides/platform/permissions.mdx deleted file mode 100644 index 1efb9f3228cb6..0000000000000 --- a/apps/docs/pages/guides/platform/permissions.mdx +++ /dev/null @@ -1,20 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'permissions', - title: 'Permissions', - description: 'Permissions requirements for the Supabase Cloud hosting environment', -} - -The Supabase platform offers additional services (e.g. Storage) on top of the Postgres database that comes with each project. These services default to storing their operational data within your database, to ensure that you retain complete control over it. - -However, these services assume a base level of access to their data, in order to e.g. be able to run migrations over it. Breaking these assumptions runs the risk of rendering these services inoperational for your project: - -- all entitites under the `storage` schema are owned by `supabase_storage_admin` -- all entitites under the `auth` schema are owned by `supabase_auth_admin` - -It is possible for violations of these assumptions to not cause an immediate outage, but take effect at a later time when a newer migration becomes available. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/shared-responsibility-model.mdx b/apps/docs/pages/guides/platform/shared-responsibility-model.mdx deleted file mode 100644 index 5675f33bfd02d..0000000000000 --- a/apps/docs/pages/guides/platform/shared-responsibility-model.mdx +++ /dev/null @@ -1,62 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'shared-responsibility-model', - title: 'Shared Responsibility Model', - description: 'Running databases is a shared responsibility between you and Supabase.', -} - -Running databases is a shared responsibility between you and Supabase. There are some things that we can take care of for you, and some things that you are responsible for. This is by design: we to give you the freedom to use your database however you want. While we _could_ put many more restrictions in place to ensure that you can’t do anything wrong, you will eventually find those restrictions prohibitive. - -Generally, we aim reduce your burden of managing infrastructure and knowing about Postgres internals, minimizing configuration as much as we can. Here are a few things that you should know: - -## You share the security responsibility - -We give you full access to the database. If you share that access with other people (either people on your team, or the public in general) then it is your responsibility to ensure that the access levels you provide are correctly managed. - -If you have an inexperienced member on your team, then you probably shouldn’t give them access to Production. You should set internal workflows around what they should and should not be able to do, with restricted access to avoid anything that might be deemed dangerous. - -You are also responsible for ensuring that tables with sensitive data have the right level of access. You are also responsible for managing your database secrets and API keys, storing them safely in an encrypted store. - -## You decide your own workflow - -There are _many_ ways to work with Supabase. - -You can use our Dashboard, our client libraries, external tools like Prisma and Drizzle, or migration tools like our CLI, Flyway, Sqitch, and anything else that is Postgres-compatible. You can develop directly on your database while you're getting started, run migrations from [local to production](/docs/guides/getting-started/local-development), or you can use [multiple environments](/docs/guides/cli/managing-environments). - -None of these are right or wrong. It depends on the stage of your project. You _definitely_ shouldn’t be developing on your database directly when you’re in production - but that’s absolutely fine when you’re prototyping and don’t have users. - -## You are responsible for your application architecture - -Supabase isn't a silver-bullet for bad architectural decisions. A poorly designed database will run poorly, no matter where it’s hosted. - -You can get away with a poorly-designed database for a while by simply adding compute. After a while, things will start to break. The database schema is the area you want to spend _the most_ time thinking about. That’s the benefit of Supabase - you can spend more time designing a scalable database system and less time thinking about the mundane tasks like implementing CRUD APIs. - -If you don’t want to implement logic inside your database, that is 100% fine. You can use _any_ tools which work with Postgres. - -## You choose your level of comfort with Postgres - -Our goal at Supabase is to make _all_ of Postgres easy to use. That doesn’t mean you have to use all of it. If you’re a Postgres veteran, you’ll probably love the tools that we offer. If you’ve never used Postgres before, then start smaller and grow into it. If you just want to treat Postgres like a simple table-store, that’s perfectly fine. - -## You are in control of your database - -Supabase places very few guard-rails around your database. That gives you a lot of control, but it also means you can break things. ”Break” is used liberally here. It refers to any situation that affects your application because of the way you're using the database. - -You are responsible for using best-practices to optimize and manage your database: adding indexes, adding filters on large queries, using caching strategies, optimizing your database queries, and managing connections to the database. - -You are responsible of provisioning enough compute to run the workload that your application requires. The Supabase Dashboard provides [observability tooling](https://supabase.com/dashboard/project/_/reports/database) to help with this. - -## Managing healthcare data - -You can use Supabase to store and process Protected Health Information (PHI). You are responsible for the following - -- Signing a Business Associate Agreement with Supabase. Reach out to growth@supabase.io to get started. -- Enabling [Point in Time Recovery](/docs/guides/platform/backups#point-in-time-recovery). -- Turning on [SSL Enforcement](/docs/guides/platform/ssl-enforcement). -- Enabling [Network Restrictions](/docs/guides/platform/network-restrictions). -- Disabling [Supabase AI editor](https://supabase.com/dashboard/org/_/general) in our dashboard. -- Encrypting PHI in your database. Consider using pgsodium's [Transparent Column Encryption](https://github.com/michelp/pgsodium#transparent-column-encryption) which comes bundled in with every Supabase project. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/spend-cap.mdx b/apps/docs/pages/guides/platform/spend-cap.mdx deleted file mode 100644 index 2e2cbf23049fd..0000000000000 --- a/apps/docs/pages/guides/platform/spend-cap.mdx +++ /dev/null @@ -1,55 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Spend cap', - description: 'Learn about the cost control of Supabase.', -} - -Supabase offers a "Spend Cap" on each project to manage your usage and costs. - -This Spend Cap determines whether your project can exceed the free quota allowance of any [line item](#what-additional-usage-can-i-be-charged-for) in a given billing cycle. -If you exceed the free quota allowance of a line item, and the Spend Cap is **"off"**, then you will be billed for any additional usage on that line item. - -## What additional usage can I be charged for? - -Supabase charges for certain usage line items in your project. Those line items include: - -- Database Size -- Storage Size -- Egress -- Storage Image Transformations -- Realtime concurrent peak connections -- Realtime messages -- Edge function invocations -- Number of Edge functions - -You can view the pricing, and free quota allowance of each line item on the [pricing page](/pricing). - -You can monitor your usage and costs using the [Usage section of your project](https://supabase.com/dashboard/project/_/settings/billing/usage) in the dashboard. -This will show you how much you have spent so far in the current billing cycle, as well as an estimate of your expected total cost for the cycle based on your current usage. - -## How can I turn the Spend Cap on or off? - -To set up a Spend Cap in your project, navigate to the [Subscription section](https://supabase.com/dashboard/project/_/settings/billing/subscription) of your project. -From there, you can click on "Change subscription" to select the plan you want to use and, at the same time, turn on or off the Spend Cap. - -## What happens when the Spend Cap is on? - -Once you use all your free quota allowance for a [line item](#what-additional-usage-can-i-be-charged-for), your project will not allow any further usage on that line item until the next billing cycle begins. - -This can help you to avoid unexpected costs and manage your expenses more effectively. - -## What happens when Spend Cap is off? - -Your project will continue to operate after using all the free quota allowance for each [line item](#what-additional-usage-can-i-be-charged-for). -This additional usage will be charged based on the line item's cost per unit outlined on the [pricing page](/pricing). - - - -When your Spend Cap is **off**, we recommend monitoring your consumption and costs using the [Usage section of your project](https://supabase.com/dashboard/project/_/settings/billing/usage) in the dashboard. - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/ssl-enforcement.mdx b/apps/docs/pages/guides/platform/ssl-enforcement.mdx deleted file mode 100644 index 61ea6fa8ad590..0000000000000 --- a/apps/docs/pages/guides/platform/ssl-enforcement.mdx +++ /dev/null @@ -1,64 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Postgres SSL Enforcement', - description: 'Enforce SSL usage for all Postgres connections', -} - - - -Postgres SSL Enforcement is currently in beta. Some projects need to [upgrade](/docs/guides/platform/migrating-and-upgrading-projects#upgrade-your-project) to the latest version to use this feature. - - - -Your Supabase project supports connecting to the Postgres DB without SSL enabled to maximize client compatibility. For increased security, you can prevent clients from connecting if they're not using SSL. - -SSL enforcement only applies to connections to both Postgres and PgBouncer ("Connection Pooler"); all HTTP APIs offered by Supabase (e.g., PostgREST, Storage, Auth) automatically enforce SSL on all incoming connections. - -## Manage SSL enforcement via the Dashboard - -SSL enforcement can be configured via the "Enforce SSL on incoming connections" setting under the SSL Configuration section in [Database Settings page](https://supabase.com/dashboard/project/_/settings/database) of the dashboard. - -## Manage SSL enforcement via the CLI - -To get started: - -1. [Install](/docs/guides/cli) the Supabase CLI 1.37.0+. -1. [Log in](/docs/guides/getting-started/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/platform/access-control#manage-team-members) for the project that you are enabling SSL enforcement. - -### Check enforcement status - -You can use the `get` subcommand of the CLI to check whether SSL is currently being enforced: - -```bash -> supabase ssl-enforcement --project-ref {ref} get --experimental -SSL is being enforced. -``` - -Or similarly, if SSL is not being enforced, you will see: - -```bash -> supabase ssl-enforcement --project-ref {ref} get --experimental -SSL is *NOT* being enforced. -``` - -### Update enforcement - -The `update` subcommand is used to change the SSL enforcement status for your project: - -```bash -> supabase ssl-enforcement --project-ref {ref} update --enable-db-ssl-enforcement --experimental -SSL is now being enforced. -``` - -Similarly, to disable SSL enforcement: - -```bash -> supabase ssl-enforcement --project-ref {ref} update --disable-db-ssl-enforcement --experimental -SSL is *NOT* being enforced. -``` - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/sso.mdx b/apps/docs/pages/guides/platform/sso.mdx deleted file mode 100644 index f08081d5e6b8f..0000000000000 --- a/apps/docs/pages/guides/platform/sso.mdx +++ /dev/null @@ -1,48 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Enable SSO for Your Organization', - description: 'General information about enabling single sign-on (SSO) for your organization', -} - - - -Looking for docs on how to add Single Sign-On support in your Supabase project? Head on over to [Single Sign-On with SAML 2.0 for Projects](/docs/guides/auth/sso/auth-sso-saml). - - - -Supabase offers single sign-on (SSO) as a login option to provide additional account security for your team. This allows company administrators to enforce the use of an identity provider when logging into Supabase. SSO improves the onboarding and offboarding experience of the company as the employee only needs a single set of credentials to access third-party applications or tools which can also be revoked easily by an administrator. - - - -Supabase currently provides SAML SSO for [Team and Enterprise plan customers](https://supabase.com/pricing). Please contact [Sales](https://forms.supabase.com/team) to have this enabled for your organization. - - - -## Setup and limitations - -Supabase supports practically all identity providers that support the SAML 2.0 SSO protocol. We've prepared these guides for commonly used identity providers to help you get started. If you use a different provider, our support stands ready to support you. - -- [Google Workspaces (formerly GSuite)](/docs/guides/platform/sso/gsuite) -- [Azure Active Directory](/docs/guides/platform/sso/azure) -- [Okta](/docs/guides/platform/sso/okta) - -Accounts signing in with SSO have certain limitations. -The following sections outline the limitations when SSO is enabled or disabled for your team. - -### Enable SSO for your team [#enable-sso] - -- Organization invites are restricted to company members belonging to the same identity provider. -- Every user has an organization created by default. They can create as many projects as they want. -- An SSO user will not be able to update or reset their password since the company administrator manages their access via the identity provider. -- If an SSO user with the following email of `alice@foocorp.com` attempts to sign in with a GitHub account that uses the same email, a separate Supabase account is created and will not be linked to the SSO user's account. -- An SSO user will not be able to see all organizations/projects created under the same identity provider. They will need to be invited to the Supabase organization first. Refer to [access control](/docs/guides/platform/access-control) for more information. - -### Disable SSO for your team [#disable-sso] - -- You can prevent a user's account from further access to Supabase by removing or disabling their account in your identity provider. -- You should also remove or downgrade their permissions from any organizations inside Supabase. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/sso/azure.mdx b/apps/docs/pages/guides/platform/sso/azure.mdx deleted file mode 100644 index 29cf8c8b89cf6..0000000000000 --- a/apps/docs/pages/guides/platform/sso/azure.mdx +++ /dev/null @@ -1,134 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { Button, IconArrowDown } from 'ui' - -export const meta = { - title: 'Set Up SSO with Azure AD', - description: 'Configure single sign-on with Azure AD (Microsoft Entra).', -} - - - -This feature is only available on the Teams and Enterprise tiers. Please contact [Sales](https://forms.supabase.com/enterprise) before doing these steps. - - - -Supabase supports single sign-on (SSO) using Microsoft Azure AD. - -## Step 1: Add and register an Enterprise Application [#add-and-register-enterprise-application] - -Open up the [Azure Active -Directory](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Overview) -dashboard for your Azure account. - -Click the _Add_ button then _Enterprise application_. - -![Azure AD console: Default Directory Overview](/docs/img/sso-azure-step-01.png) - -## Step 2: Choose Create your own application [#create-application] - -You'll be using the custom enterprise application setup for Supabase. - -![Azure AD console: Browse Azure AD Gallery, select: Create your own -application](/docs/img/sso-azure-step-02.png) - -## Step 3: Fill in application details [#add-application-details] - -In the modal titled _Create your own application_ enter the name you wish -Supabase to be available to your Azure AD users. `Supabase` works in most -cases. - -Make sure to choose the third option: _Integrate any other application you -don't find in the gallery (Non-gallery)_. - -![Azure AD console: Create your own application modal](/docs/img/sso-azure-step-03.png) - -## Step 4: Choose the Set up single sign-on option [#set-up-single-sign-on] - -Before you get to assigning users and groups, which would allow accounts in -Azure AD to access Supabase, you need to configure the SAML details that allows -Supabase to accept sign in requests from Azure AD. - -![Azure AD console: Supabase custom enterprise application, selected Set up -single sign-on](/docs/img/sso-azure-step-04.png) - -## Step 5: Select SAML single sign-on method [#saml-sso] - -Supabase only supports the SAML 2.0 protocol for Single Sign-On, which is an -industry standard. - -![Azure AD console: Supabase application, Single sign-on configuration screen, -selected SAML](/docs/img/sso-azure-step-05.png) - -## Step 6: Upload SAML-based Sign-on metadata file [#upload-saml-metadata] - -First you need to download Supabase's SAML metadata file. Click the button -below to initiate a download of the file. - - - - - -Alternatively, visit this page to initiate a download: `https://alt.supabase.io/auth/v1/sso/saml/metadata?download=true` - -Click on the _Upload metadata file_ option in the toolbar and select the file -you just downloaded. - -![Azure AD console: Supabase application, SAML-based Sign-on screen, -selected Upload metadata file button](/docs/img/sso-azure-step-06-1.png) - -All of the correct information should automatically populate the _Basic SAML -Configuration_ screen as shown. - -![Azure AD console: Supabase application, SAML-based Sign-on screen, -Basic SAML Configuration shown](/docs/img/sso-azure-step-06-2.png) - -**Make sure you input these additional settings.** - -| Setting | Value | -| ----------- | -------------------------------------------- | -| Sign on URL | `https://supabase.com/dashboard/sign-in-sso` | -| Relay State | `https://supabase.com/dashboard` | - -Finally, click the _Save_ button to save the configuration. - -## Step 7: Obtain metadata URL and send to Supabase [#send-metadata-url] - -Supabase needs to finalize enabling single sign-on with your Azure AD -application. To do this, please copy and send the link under **App Federation -Metadata Url** in \*section 3 **SAML Certificates\*** to your support -contact and await further instructions. If you're not clear who to send this -link to or need further assistance, please reach out to -[support@supabase.com](mailto:support@supabase.com). - -**Do not test the login until you have heard back from the support contact.** - -![Azure AD console: Supabase application, SAML Certificates card -shown, App Federation Metadata Url highlighted](/docs/img/sso-azure-step-07.png) - -## Step 8: Wait for confirmation [#confirmation] - -Please wait for confirmation or further instructions from your support contact -at Supabase before proceeding to the next step. It usually takes us 1 business -day to configure SSO for you. - -## Step 9: Test single sign-on [#testing] - -_Testing sign-on before your Azure AD has been registered with Supabase will -not work. Make sure you've received confirmation from your support contact at -Supabase as laid out in the [confirmation](#confirmation) step._ - -Once you’ve received confirmation from your support contact at Supabase that -SSO setup has been completed for your enterprise, you can ask some of your -users to sign in via their Azure AD account. - -You ask them to enter their email address on the [Sign in with -SSO](https://supabase.com/dashboard/sign-in-sso) page. - -If sign in is not working correctly, please reach out to your support contact -at Supabase for further guidance. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/sso/gsuite.mdx b/apps/docs/pages/guides/platform/sso/gsuite.mdx deleted file mode 100644 index c7e1c11e92eb4..0000000000000 --- a/apps/docs/pages/guides/platform/sso/gsuite.mdx +++ /dev/null @@ -1,123 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Set Up SSO with Google Workspace', - description: 'Configure single sign-on with Google Workspace (GSuite).', -} - -Supabase supports single sign-on (SSO) using Google Workspace (formerly known -as GSuite). - -## Step 1: Open the Google Workspace Web and mobile apps console [#google-workspace-console] - -![Google Workspace: Web and mobile apps admin -console](/docs/img/sso-gsuite-step-01.png) - -## Step 2: Choose Add custom SAML app [#add-custom-saml-app] - -From the _Add app_ button in the toolbar choose _Add custom SAML app_. - -![Google Workspace: Web and mobile apps admin console, Add custom SAML app -selected](/docs/img/sso-gsuite-step-02.png) - -## Step 3: Fill out app details [#add-app-details] - -The information you enter here is for visibility into your Google Workspace. -You can choose any values you like. `Supabase` as a name works well for most -use cases. Optionally enter a description. - -![Google Workspace: Web and mobile apps admin console, Add custom SAML, App -details screen](/docs/img/sso-gsuite-step-03.png) - -## Step 4: Download IdP metadata [#download-idp-metadata] - -This is a very important step. Click on _DOWNLOAD METADATA_ and save the file -that was downloaded. - -![Google Workspace: Web and mobile apps admin console, Add custom SAML, Google -Identity Provider details screen](/docs/img/sso-gsuite-step-04.png) - -It's very important to send this file to your support contact at Supabase to -complete the SSO setup process. If you're not sure where to send this file, you -can always reach us at [support@supabase.com](mailto:support@supabase.com). - -**Important: Make sure the certificate as shown on screen has at least 1 year -before it expires. Mark down this date in your calendar so you will be reminded -that you need to update the certificate without any downtime for your users.** - -## Step 5: Add service provider details [#add-service-provider-details] - -Fill out these serivce provider details on the next screen. - -| Detail | Value | -| -------------- | --------------------------------------------------- | -| ACS URL | `https://alt.supabase.io/auth/v1/sso/saml/acs` | -| Entity ID | `https://alt.supabase.io/auth/v1/sso/saml/metadata` | -| Start URL | `https://supabase.com/dashboard` | -| Name ID format | PERSISTENT | -| Name ID | _Basic Information > Primary email_ | - -![Google Workspace: Web and mobile apps admin console, Add custom SAML, -Service provider details screen](/docs/img/sso-gsuite-step-05.png) - -## Step 6: Configure Attribute mapping [#configure-attribute-mapping] - -Attribute mappings allow Supabase to get information about your Google -Workspace users on each login. - -**A _Primary email_ to `email` mapping is required to exist.** Other mappings -shown below are optional and configurable depending on your Google Workspace -setup. If in doubt, replicate the same config as shown. - -Please share any changes, if any, from this screen with your Supabase support -contact. - -![Google Workspace: Web and mobile apps admin console, Add custom SAML, -Attribute mapping](/docs/img/sso-gsuite-step-06.png) - -## Step 7: Wait for confirmation [#confirmation] - -Once you’ve configured the Google Workspace app as shown above, make sure you -send the [metadata file you downloaded](#download-idp-metadata) -and information regarding the [attribute mapping](#configure-attribute-mappings) (if any -changes are applicable) to your support contact at Supabase. - -This information needs to be entered into Supabase before SSO is activated -end-to-end. - -Wait for confirmation that this information has successfully been added to -Supabase. It usually takes us 1 business day to configure this information -for you. -Supabase. - -## Step 8: Configure user access [#configure-user-access] - -You can configure which Google Workspace user accounts will get access to -Supabase. This is important if you wish to limit access to your software -engineering teams. - -You can configure this access by clicking on the _User -access_ card (or down-arrow). Follow the instructions on screen. - -Changes from this step sometimes take a while to propagate across Google’s -systems. Please wait at least 15 minutes before proceeding to the next step. - -![Google Workspace: Web and mobile apps admin console, Supabase app -screen](/docs/img/sso-gsuite-step-08.png) - -## Step 9: Test single sign-on [#testing] - -Once you’ve turned on access to Supabase for users in your organization, ask -one of those users to help you out in testing the setup. - -It often helps to ask them to log out of their Google account and log back in. - -Ask them to enter their email addres in the [Sign in with -SSO](https://supabase.com/dashboard/sign-in-sso) page. - -If sign in is not working correctly, please reach out to your support contact -at Supabase. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/sso/okta.mdx b/apps/docs/pages/guides/platform/sso/okta.mdx deleted file mode 100644 index 1446783d9a2b7..0000000000000 --- a/apps/docs/pages/guides/platform/sso/okta.mdx +++ /dev/null @@ -1,112 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Set Up SSO with Okta', - description: 'Configure single sign-on with Okta.', -} - -Supabase supports single sign-on (SSO) using Okta. - -## Step 1: Choose Create App Integration in the Applications dashboard [#create-app-integration] - -Navigate to the Applications dashboard of the Okta admin console. Choose the -_Create App Integration_ button from the toolbar. - -![Okta dashboard: Create App Integration -button](/docs/img/sso-okta-step-01.png) - -## Step 2: Choose SAML 2.0 in the app integration dialog [#create-saml-app] - -Supabase supports the SAML 2.0 SSO protocol. Choose it from the _Create a new -app integration_ dialog. - -![Okta dashboard: Create new app integration dialog](/docs/img/sso-okta-step-02.png) - -## Step 3: Fill out General Settings [#add-general-settings] - -The information you enter here is for visibility into your Okta applications -menu. You can choose any values you like. `Supabase` as a name works well for -most use cases. - -![Okta dashboard: Create SAML Integration -wizard](/docs/img/sso-okta-step-03.png) - -## Step 4: Fill out SAML Settings [#add-saml-settings] - -These settings let Supabase use SAML 2.0 properly with your Okta application. -Make sure you enter this information exactly as shown on in this table and -screenshot. - -| Setting | Value | -| ---------------------------------------------- | ---------------------------------------------------------- | -| Single sign-on URL | `https://supabase.com/dashboard/auth/v1/sso/saml/acs` | -| Use this for Recipient URL and Destination URL | ✔️ | -| Audience URI (SP Entity ID) | `https://supabase.com/dashboard/auth/v1/sso/saml/metadata` | -| Default RelayState | `https://supabase.com/dashboard` | -| Name ID format | EmailAddress | -| Application username | Email | -| Update application username on | Create and update | - -![Okta dashboard: Create SAML Integration -wizard, Configure SAML step](/docs/img/sso-okta-step-04.png) - -## Step 5: Fill out Attribute Statements [#add-attribute-statements] - -Attribute Statements allow Supabase to get information about your Okta users on each login. - -**A `email` to `user.email` statement is required to exist.** Other mappings -shown below are optional and configurable depending on your Okta -setup. If in doubt, replicate the same config as shown. - -Please share any changes, if any, from this screen with your Supabase support -contact. - -![Okta dashboard: Attribute Statements configuration -screen](/docs/img/sso-okta-step-05.png) - -## Step 6: Obtain IdP metadata URL [#idp-metadata-url] - -Supabase needs to finalize enabling single sign-on with your Okta -application. - -To do this scroll down to the _SAML Signing Certificates_ section on the _Sign -On_ tab of the _Supabase_ application. Pick the the _SHA-2_ row with an -_Active_ status. Click on the _Actions_ dropdown button and then on the _View -IdP Metadata_. - -This will open up the SAML 2.0 Metadata XML file in a new tab in your browser. -Copy this URL and send it to your support contact and await further -instructions. If you're not clear who to send this link to or need further -assistance, please reach out to -[support@supabase.com](mailto:support@supabase.com). - -The link usually has this structure: `https://.okta.com/apps//sso/saml/metadata` - -![Okta dashboard: SAML Signing Certificates, Actions button highlighted](/docs/img/sso-okta-step-06.png) - -## Step 7: Wait for confirmation [#confirmation] - -Once you’ve configured the Okta app as shown above, make sure you send the -[metadata URL](#idp-metadata-url) and information regarding the -[attribute statements](#add-attribute-statements) (if any changes are applicable) to -your support contact at Supabase. - -Wait for confirmation that this information has successfully been added to -Supabase. It usually takes us 1 business day to configure this information -for you. - -## Step 8: Test single sign-on [#testing] - -Once you’ve received confirmation from your support contact at Supabase that -SSO setup has been completed for your enterprise, you can ask some of your -users to sign in via their Okta account. - -You ask them to enter their email address on the [Sign in with -SSO](https://supabase.com/dashboard/sign-in-sso) page. - -If sign in is not working correctly, please reach out to your support contact -at Supabase for further guidance. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/platform/troubleshooting.mdx b/apps/docs/pages/guides/platform/troubleshooting.mdx deleted file mode 100644 index 001b78510a0bb..0000000000000 --- a/apps/docs/pages/guides/platform/troubleshooting.mdx +++ /dev/null @@ -1,57 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'troubeshooting', - title: 'Troubleshooting', - description: 'Diagnosing and fixing issues with your hosted Supabase project.', -} - -Learn how to diagnose and fix common issues with your Supabase project. - -## HTTP API Issues - -Symptoms: - -- HTTP timeouts -- 5xx response codes -- High response times - -### Under-provisioned resources - -The most common class of issues that causes HTTP timeouts and 5xx response codes is the under-provisioning of resources for your project. This can cause your project to be unable to service the traffic it is receiving. - -Each Supabase project is provisioned with [segregated compute resources](../platform/compute-add-ons). This allows the project to serve unlimited requests, as long as they can be handled using the resources that have been provisioned. Complex queries, or queries that process larger amounts of data, will require higher amounts of resources. As such, the amount of resources that can handle a high volume of simple queries (or queries involving small amounts of data), will likely be unable to handle a similar volume of complex queries. - -You can view the resource utilization of your Supabase Project using the [reports in the Dashboard](https://supabase.com/dashboard/project/_/reports/database). - -Some common solutions for this issue are: - -- [Upgrading](https://supabase.com/dashboard/project/_/settings/billing/subscription) to a [larger compute add-on](../platform/compute-add-ons) in order to serve higher volumes of traffic. -- [Optimizing the queries](../platform/performance#examining-query-performance) being executed. -- [Using fewer Postgres connections](../platform/performance#configuring-clients-to-use-fewer-connections) can reduce the amount of resources needed on the project. -- [Restarting](https://supabase.com/dashboard/project/_/settings/general) the database. This only temporarily solves the issue by terminating any ongoing workloads that might be tying up your compute resources. - -If your [Disk IO budget](../platform/compute-add-ons#disk-io) has been drained, you will need to either wait for it to be replenished the next day, or upgrade to a larger compute add-on to increase the budget available to your project. - -## Unable to connect to your Supabase Project - -Symptom: You're unable to connect to your Postgres database directly, but can open the Project in the [Supabase Dashboard](https://supabase.com/dashboard/project/_/). - -### Too many open connections - -Errors about too many open connections can be _temporarily_ resolved by [restarting the database](https://supabase.com/dashboard/project/_/settings/general). However, this won't solve the underlying issue for a permanent solution. - -- If you're receiving a `No more connections allowed (max_client_conn)` error: - - Configure your applications and services to [use fewer connections](../platform/performance#configuring-clients-to-use-fewer-connections). - - [Upgrade](https://supabase.com/dashboard/project/_/settings/billing/subscription) to a [larger compute add-on](../platform/compute-add-ons) to increase the number of available connections. -- If you're receiving a `sorry, too many clients already` or `remaining connection slots are reserved for non-replication superuser connections` error message in addition to the above suggestions, switch to using the [connection pooler](/docs/guides/database/connecting-to-postgres#connection-pool) instead. - -### Connection refused - -If you receive a `connection refused` error after a few initial failed connection attempts, your client has likely been temporarily blocked in order to protect the database from brute-force attacks. You can wait 30 minutes before trying again with the correct password, or you can [contact support](https://supabase.com/dashboard/support/new) with your client's IP address to manually unblock you. - -If you're also unable to open the project using the [Supabase Dashboard](https://supabase.com/dashboard/project/_/), review the solutions for [under-provisioned projects](#under-provisioned-resources). - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/realtime.mdx b/apps/docs/pages/guides/realtime.mdx deleted file mode 100644 index b11c3a5604928..0000000000000 --- a/apps/docs/pages/guides/realtime.mdx +++ /dev/null @@ -1,26 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'realtime', - title: 'Realtime', - description: 'Supabase Realtime with Broadcast, Presence, and Postgres Changes.', - sidebar_label: 'Overview', -} - -Supabase provides a globally distributed cluster of [Realtime](https://github.com/supabase/realtime) servers that enable the following functionality: - -- [Broadcast](/docs/guides/realtime/broadcast): Send ephemeral messages from client to clients with low latency. -- [Presence](/docs/guides/realtime/presence): Track and synchronize shared state between clients. -- [Postgres Changes](/docs/guides/realtime/postgres-changes): Listen to Postgres database changes and send them to authorized clients. - -A [channel](https://hexdocs.pm/phoenix/channels.html) is the basic building block of Realtime and narrows the scope of data flow to subscribed clients. You can think of a channel as a chatroom where participants are able to see who's online and send and receive messages; similar to a Discord or Slack channel. - -All clients can connect to a channel and take advantage of the built-in features, Broadcast and Presence, while extensions, like Postgres Changes, must be enabled prior to use. - -## See Also - -- [Realtime: Multiplayer Edition](https://supabase.com/blog/supabase-realtime-multiplayer-general-availability) blog post - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/realtime/architecture.mdx b/apps/docs/pages/guides/realtime/architecture.mdx deleted file mode 100644 index ff43225cc60bd..0000000000000 --- a/apps/docs/pages/guides/realtime/architecture.mdx +++ /dev/null @@ -1,64 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'architecture', - title: 'Realtime Architecture', - description: 'Architecture of the Supabase Realtime service', - sidebar_label: 'Architecture', -} - -Realtime is a globally distributed Elixir cluster. Clients can connect to any node in the cluster via WebSockets and send messages to any other client connected to the cluster. - -Realtime is written in [Elixir](https://elixir-lang.org/), which compiles to [Erlang](https://www.erlang.org/), and utilizes many tools the [Phoenix Framework](https://www.phoenixframework.org/) provides out of the box. - -![Global Architecture](/docs/img/guides/realtime/realtime-arch.png) - -## Elixir & Phoenix - -Phoenix is fast and able to handle millions of concurrent connections. - -Phoenix can handle many concurrent connections because Elixir provides lightweight processes (not OS processes) to work with. - -Client-facing WebSocket servers need to handle many concurrent connections. Elixir & Phoenix let the Supabase Realtime cluster do this easily. - -## Channels - -Channels are implemented using [Phoenix Channels](https://hexdocs.pm/phoenix/channels.html) which uses [Phoenix.PubSub](https://hexdocs.pm/phoenix_pubsub/Phoenix.PubSub.html) with the default `Phoenix.PubSub.PG2` adapter. - -The PG2 adapter utilizes Erlang [process groups](https://www.erlang.org/docs/18/man/pg2.html) to implement the PubSub model where a publisher can send messages to many subscribers. - -## Global Cluster - -Presence is an in-memory key-value store backed by a CRDT. When a user is connected to the cluster the state of that user is sent to all connected Realtime nodes. - -Broadcast lets you send a message from any connected client to a Channel. Any other client connected to that same Channel will receive that message. - -This works globally. A client connected to a Realtime node in the United States can send a message to another client connected to a node in Singapore. Simply connect two clients to the same Realtime Channel and they'll all receive the same messages. - -Broadcast is useful for getting messages to users in the same location very quickly. If a group of clients are connected to a node in Singapore, the message only needs to go to that Realtime node in Singapore and back down. If users are close to a Realtime node they'll get Broadcast messages in the time it takes to ping the cluster. - -Thanks to the Realtime cluster, you (an amazing Supabase user) don't have to think about which regions your clients are connected to. - -If you're using Broadcast, Presence, or streaming database changes, messages will always get to your users via the shortest path possible. - -## Connecting to a Database - -Realtime allows you to listen to changes from your Postgres database. When a new client connects to Realtime and initializes the `postgres_changes` Realtime Extension the cluster will connect to your Postgres database and start streaming changes from a replication slot. - -Realtime knows the region your database is in, and connects to it from the closest region possible. - -Every Realtime region has at least two nodes so if one node goes offline the other node should reconnect and start streaming changes again. - -## Streaming the Write-Ahead Log - -A Postgres logical replication slot is acquired when connecting to your database. - -Realtime delivers changes by polling the replication slot and appending channel subscription IDs to each wal record. - -Subscription IDs are Erlang processes representing underlying sockets on the cluster. These IDs are globally unique and messages to processes are routed automatically by the Erlang virtual machine. - -After receiving results from the polling query, with subscription IDs appended, Realtime delivers records to those clients. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/realtime/bring-your-own-database.mdx b/apps/docs/pages/guides/realtime/bring-your-own-database.mdx deleted file mode 100644 index db805ba7b224f..0000000000000 --- a/apps/docs/pages/guides/realtime/bring-your-own-database.mdx +++ /dev/null @@ -1,107 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'bring-your-own-database', - title: 'Bring Your Own Database', - description: 'Bring your own Postgres database to subscribe to Realtime changes', - sidebar_label: 'Bring Your Own Database', -} - -Realtime Database Changes works with any Postgres database that has logical replication enabled and the [wal2json](https://github.com/eulerto/wal2json) extension installed. - - - -After setting up your database for Realtime, [submit a support ticket](https://supabase.com/dashboard/support/new) if you want to use your database with hosted Supabase Realtime. - - - -The following steps will make sure that your database is properly set up to work with Realtime. - -## `wal2json` Extension - -Realtime relies on the `wal2json` Postgres extension to format database changes to JSON which are then sent to Realtime subscribers. - -Postgres databases managed by AWS RDS and Google Cloud SQL should already have `wal2json` installed. -Please check to make sure this is indeed the case with your Postgres database. - -## Logical Replication Configuration - -Realtime relies on Postgres' logical replication functionality to get database changes. Please enable logical replication on your database and configure the following settings: - -- `max_replication_slots`: we recommend `10` because Realtime requires a few slots plus the slots you'll need for your non-Realtime logical replication needs. -- `max_slot_wal_keep_size`: we recommend `1024` (MB) so Realtime can attempt to deliver more database changes stored in Postgres. - -## Realtime Database Setup - -### `supabase_realtime` Publication - -Create `supabase_realtime` publication and add tables you want Realtime to listen to: - -```sql -create publication supabase_realtime with (publish = 'insert, update, delete'); - -alter publication supabase_realtime add table messages, users; -``` - - - -If the payload contains a `401 Unauthorized` then you will need to grant `select` privileges to the table for the database role you want to authorize to receive database changes: - -```sql -grant select on table messages to anon; -``` - - - -### `realtime` Schema - -Create a `realtime` schema: - -```sql -create schema realtime; -``` - -### `supabase_realtime_admin` Role - -Create a `supabase_realtime_admin` database role and grant it replication permissions: - -```sql -create role supabase_realtime_admin with noinherit login password 'secure-password'; -``` - -Make sure to grant `supabase_realtime_admin` role with replication permissions. This step will vary based on your database provider. - -For example, if your database is managed by AWS RDS then you can run: - -```sql -grant rds_replication to supabase_realtime_admin; -``` - -### `supabase_realtime_admin` Privileges - -Grant `supabase_realtime_admin` privileges for `realtime` schema and all related Realtime objects: - -```sql -grant all on schema realtime to supabase_realtime_admin; -grant all on all tables in schema realtime to supabase_realtime_admin; -grant all on all sequences in schema realtime to supabase_realtime_admin; -grant all on all routines in schema realtime to supabase_realtime_admin; -``` - -### `authenticated` Role - -Create an `authenticated` role: - -```sql -create role authenticated nologin noinherit; -``` - - - -This role is hardcoded into Realtime migrations so it's required for the time being. - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/realtime/broadcast.mdx b/apps/docs/pages/guides/realtime/broadcast.mdx deleted file mode 100644 index 90055d2c2ae67..0000000000000 --- a/apps/docs/pages/guides/realtime/broadcast.mdx +++ /dev/null @@ -1,275 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import StepHikeCompact from '~/components/StepHikeCompact' - -export const meta = { - title: 'Broadcast', - subtitle: "Get up and running with Realtime's Broadcast feature", - breadcrumb: 'Realtime Broadcast Quickstart', -} - -Realtime Broadcast follows the [publish-subscribe pattern](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) where a client publishes messages to a channel based on a unique topic. For example, a user could send a message to a channel with topic `room-1`. - -Other clients can receive the message in real-time by subscribing to the channel with topic `room-1`. These clients can continue to receive messages as long as they continue to be online and subscribed to the same channel topic. - -An example use-case is sharing a user's cursor position with other clients in an online tool or game. - -## Quick start - -Let's explore how to implement Realtime Broadcast so you can integrate it into your use case. - - - - - - - - Install the Supabase JavaScript client. - - - - - - ```bash - npm install @supabase/supabase-js - ``` - - - - - - - - - - This client will be used to listen for messages. - - Go to your Supabase project's [API Settings](https://supabase.com/dashboard/project/_/settings/api) and grab the `URL` and `anon` public API key. - - - - - - ```js - import { - createClient - } from '@supabase/supabase-js' - - const clientA = createClient( - 'https://.supabase.co', - '' - ) - ``` - - - - - - - - - - A channel's topic can be anything except for `'realtime'`. - - - - - - ```js - const channelA = clientA.channel('room-1') - ``` - - - - - - - - - - Specify the Broadcast event you want the `on` handler to listen for. This event name can be anything you want. We'll send a broadcast message with this event name later on. - - - - - - ```js - channelA - .on( - 'broadcast', - { event: 'test' }, - (payload) => console.log(payload) - ) - .subscribe() - ``` - - - - - - - - - - This client will be used to send a message. - - - - - - ```js - const clientB = createClient( - 'https://.supabase.co', - '' - ) - ``` - - - - - - - - - - This channel's topic must match `channelA`'s. - - - - - - ```js - const channelB = clientB.channel('room-1') - ``` - - - - - - - - - - Subscribe to channel and send a message. - - The payload's `event` must match channelA's `event` in the `on` handler. - - - - - - ```js - channelB.subscribe((status) => { - if (status === 'SUBSCRIBED') { - channelB.send({ - type: 'broadcast', - event: 'test', - payload: { - message: 'hello, world' - }, - }) - } - }) - ``` - - - - - - - - - - `clientA` receives the message `clientB` sent. - - - - - - - -## Broadcast options - -There are additional Broadcast functionality that you can enable when creating a channel. - -### Self-send messages - -You can have a client broadcast a message and then receive the same message by setting Broadcast's `self` config to `true`. Without this, broadcast messages are only sent to other clients. - -```js -const channelC = clientC.channel('room-2', { - config: { - broadcast: { - self: true, - }, - }, -}) - -channelC.on('broadcast', { event: 'test-my-messages' }, (payload) => console.log(payload)) - -channelC.subscribe((status) => { - if (status === 'SUBSCRIBED') { - channelC.send({ - type: 'broadcast', - event: 'test-my-messages', - payload: { message: 'talking to myself' }, - }) - } -}) -``` - -### Acknowledge messages - -You can confirm that Realtime received your message by setting Broadcast's `ack` config to `true`. - -```js -const channelD = clientD.channel('room-3', { - config: { - broadcast: { - ack: true, - }, - }, -}) - -channelD.subscribe(async (status) => { - if (status === 'SUBSCRIBED') { - const resp = await channelD.send({ - type: 'broadcast', - event: 'acknowledge', - payload: {}, - }) - - console.log('resp', resp) - } -}) -``` - -Use this to guarantee that the server has received the message before resolving `channelD.send`'s promise. If the `ack` config is not set to `true` when creating the channel, the promise returned by `channelD.send` will resolve immediately. - -## Client-side rate limit - -By default the client will rate limit itself at 10 messages per second (1 message every 100 milliseconds). You can customize this when creating the client: - -```js -import { createClient } from '@supabase/supabase-js' - -const clientE = createClient('https://.supabase.co', '', { - realtime: { - params: { - eventsPerSecond: 20, - }, - }, -}) -``` - -By setting `eventsPerSecond` to 20, you can send one message every 50 milliseconds on a per client basis. - -Learn more by visiting the [Quotas](/docs/guides/realtime/quotas) section. - -## More Realtime Quickstarts - -- [Presence Quickstart](/docs/guides/realtime/presence) -- [Postgres Changes Quickstart](/docs/guides/realtime/postgres-changes) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/realtime/concepts.mdx b/apps/docs/pages/guides/realtime/concepts.mdx deleted file mode 100644 index af4dee031bdaa..0000000000000 --- a/apps/docs/pages/guides/realtime/concepts.mdx +++ /dev/null @@ -1,38 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'channels', - title: 'Realtime Concepts', - description: 'Learn about channels and other features in Supabase Realtime', - sidebar_label: 'Concepts', -} - -Supabase Realtime lets you to build real-time applications with collaborative/multiplayer functionality. It includes 3 core features: - -- [Broadcast](/docs/guides/realtime/broadcast): sends rapid, ephemeral messages to other connected clients. You can use it to track mouse movements, for example. -- [Presence](/docs/guides/realtime/presence): sends user state between connected clients. You can use it to show an "online" status, which disappears when a user is disconnected. -- [Postgres Changes](/docs/guides/realtime/postgres-changes): receives database changes in real-time. - -## Channels - -When you initialize your Supabase Realtime client, you define a `topic` that uniquely references a channel. Everyone connected to the same Channel `topic` receives the same messages. - -```js -import { createClient } from '@supabase/supabase-js' - -const client = createClient('https://.supabase.co', '') - -const channel = client.channel('my-topic') // set your topic here -``` - -Clients can bi-directionally send and receive messages over a Channel. The Realtime backend can also push messages to all clients connected to the same Channel. - -A single client can receive change records from Postgres, Broadcast messages from other clients, and Presence updates all over the same Channel. - -## Choosing between Broadcast and Presence - -We recommend using Broadcast by default, and then Presence when required. Presence merges all changes into a shared state for every client connected to the same channel. If you use Presence, it's best to throttle your changes so that you are sending updates less frequently. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/realtime/postgres-changes.mdx b/apps/docs/pages/guides/realtime/postgres-changes.mdx deleted file mode 100644 index c776b9d706c8d..0000000000000 --- a/apps/docs/pages/guides/realtime/postgres-changes.mdx +++ /dev/null @@ -1,568 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import StepHikeCompact from '~/components/StepHikeCompact' - -export const meta = { - title: 'Postgres Changes', - subtitle: "Get up and running with Realtime's Postgres Changes feature", - breadcrumb: 'Realtime Postgres Changes Quickstart', -} - -Realtime's Postgres Changes feature listens for database changes and sends them to clients. Clients are required to subscribe with a JWT dictating which changes they are allowed to receive based on the database's [Row Level Security](/docs/guides/auth/row-level-security). - -Anyone with access to a valid JWT signed with the project's JWT secret is able to listen to your database's changes, unless tables have [Row Level Security](/docs/guides/auth/row-level-security) enabled and policies in place. - -Clients can choose to receive `INSERT`, `UPDATE`, `DELETE`, or `*` (all) changes for all changes in a schema, a table in a schema, or a column's value in a table. Your clients should only listen to tables in the `public` schema and you must first enable the tables you want your clients to listen to. - -## Quick start - -Let's explore how to implement Realtime Postgres Changes so you can integrate it into your use case. - - - - - - - [Create a new project](https://app.supabase.com) in the Supabase Dashboard. - - After your project is ready, create a table in your Supabase database. You can do this with either the Table interface or the [SQL Editor](https://app.supabase.com/project/_/sql). - - - - - - - - - ```sql - -- Create a table called "todos" - -- with a column to store tasks. - create table todos ( - id serial primary key, - task text - ); - ``` - - - - - - - - - - - - - - - - - - In this example we'll turn on [Row Level Security](/docs/guides/auth/row-level-security) for this table and allow anonymous access. In production, be sure to secure your application with the appropriate permissions. - - - - - - ```sql - -- Turn on security - alter table "todos" - enable row level security; - - -- Allow anonymous access - create policy "Allow anonymous access" - on todos - for select - to anon - using (true); - ``` - - - - - - - - - - Go to your project's [Replication settings](https://supabase.com/dashboard/project/_/database/replication), and under `supabase_realtime`, toggle on the tables you want to listen to. - - - - - - - - - - Install the Supabase JavaScript client. - - - - - - ```bash - npm install @supabase/supabase-js - ``` - - - - - - - - - - This client will be used to listen to Postgres changes. - - - - - - ```js - import { - createClient - } from '@supabase/supabase-js' - - const client = createClient( - 'https://.supabase.co', - '' - ) - ``` - - - - - - - - - Listen to changes on all tables in the `public` schema by setting the `schema` property to 'public' and event name to `*`. The event name can be one of: - - `INSERT` - - `UPDATE` - - `DELETE` - - `*` - - The channel name can be any string except 'realtime'. - - - - - - ```js - const channelA = client - .channel('schema-db-changes') - .on( - 'postgres_changes', - { - event: '*', - schema: 'public', - }, - (payload) => console.log(payload) - ) - .subscribe() - ``` - - - - - - Listen to just inserts in the `todos` table by setting the `table` property to 'todos' and event name to `INSERT`. - - - - - - ```js - const channelB = client - .channel('table-db-changes') - .on( - 'postgres_changes', - { - event: 'INSERT', - schema: 'public', - table: 'todos', - }, - (payload) => console.log(payload) - ) - .subscribe() - ``` - - - - - - Listen to changes in the `todos` table when a column's value equals a specified value. In this example, we only listen to inserts on `todos` where the row `id` is 1. - - - - - - ```js - const channelC = client - .channel('table-filter-changes') - .on( - 'postgres_changes', - { - event: 'INSERT', - schema: 'public', - table: 'todos', - filter: 'id=eq.1', - }, - (payload) => console.log(payload) - ) - .subscribe() - ``` - - - - - - Check out the [full list of available filters](/docs/guides/realtime/postgres-changes#available-filters). - - - - - - - - - Now we can add some data to our table which will trigger `channelA`, `channelB`, and `channelC` event handlers. - - - - - - ```sql - insert into todos (task) - values - ('Change!'); - ``` - - - - - - - -## Available filters - -Realtime offers filters so you can specify the data your client receives at a more granular level. - -### eq - -To listen to changes when a column's value in a table equals a client-specified value: - -```js -const channel = supabase - .channel('changes') - .on( - 'postgres_changes', - { - event: 'UPDATE', - schema: 'public', - table: 'messages', - filter: 'body=eq.hey', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - -This filter uses Postgres' `=`. - -### neq - -To listen to changes when a column's value in a table does not equal a client-specified value: - -```js -const channel = supabase - .channel('changes') - .on( - 'postgres_changes', - { - event: 'INSERT', - schema: 'public', - table: 'messages', - filter: 'body=neq.bye', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - -This filter uses Postgres' `!=`. - -### lt - -To listen to changes when a column's value in a table is less than a client-specified value: - -```js -const channel = supabase - .channel('changes') - .on( - 'postgres_changes', - { - event: 'INSERT', - schema: 'public', - table: 'messages', - filter: 'id=lt.100', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - - - This filter uses Postgres' `<` so it works for non-numeric types but make sure to check the expected behavior of the compared data's type. - - -### lte - -To listen to changes when a column's value in a table is less than or equal to a client-specified value: - -```js -const channel = supabase - .channel('changes') - .on( - 'postgres_changes', - { - event: 'UPDATE', - schema: 'public', - table: 'profiles', - filter: 'age=lte.65', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - - - This filter uses Postgres' `<=` so it works for non-numeric types but make sure to check the expected behavior of the compared data's type. - - -### gt - -To listen to changes when a column's value in a table is greater than a client-specified value: - -```js -const channel = supabase - .channel('changes') - .on( - 'postgres_changes', - { - event: 'INSERT', - schema: 'public', - table: 'products', - filter: 'quantity=gt.10', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - - - This filter uses Postgres' `>` so it works for non-numeric types but make sure to check the - expected behavior of the compared data's type. - - -### gte - -To listen to changes when a column's value in a table is greater than or equal to a client-specified value: - -```js -const channel = supabase - .channel('changes') - .on( - 'postgres_changes', - { - event: 'INSERT', - schema: 'public', - table: 'products', - filter: 'quantity=gte.10', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - - - This filter uses Postgres' `>=` so it works for non-numeric types but make sure to check the - expected behavior of the compared data's type. - - -### in - -To listen to changes when a column's value in a table equals any client-specified values: - -```js -const channel = supabase - .channel('changes') - .on( - 'postgres_changes', - { - event: 'INSERT', - schema: 'public', - table: 'colors', - filter: 'name=in.(red, blue, yellow)', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - - - This filter uses Postgres' `= ANY`. Realtime allows a maximum of 100 values for this filter. - - -## Combination changes - -To listen to different events and schema/tables/filters combinations with the same channel: - -```js -const channel = supabase - .channel('db-changes') - .on( - 'postgres_changes', - { - event: '*', - schema: 'public', - table: 'messages', - filter: 'body=eq.bye', - }, - (payload) => console.log(payload) - ) - .on( - 'postgres_changes', - { - event: 'INSERT', - schema: 'public', - table: 'users', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - -## Full `old` record - -By default, only `new` record changes are sent but if you want to receive the `old` record (previous values) whenever you `UPDATE` or `DELETE` a record, you can set the `replica identity` of your table to `full`: - -```sql -alter table - messages replica identity full; -``` - - - -RLS policies are not applied to `DELETE` statements. When RLS is enabled and `replica identity` is set to `full` on a table, the `old` record contains only the primary key(s). - - - -## Private schemas - -Postgres Changes works out of the box for tables in the `public` schema. You can listen to tables in your private schemas by granting table `SELECT` permissions to the database role found in your access token. You can run a query similar to the following: - -```sql -grant select on "non_private_schema"."some_table" to authenticated; -``` - - - -We strongly encourage you to enable RLS and create policies for tables in private schemas. Otherwise, any role you grant access to will have unfettered read access to the table. - - - -## Custom tokens - -You may choose to sign your own tokens to customize claims that can be checked in your RLS policies. - -Your project JWT secret is found with your [Project API keys](https://app.supabase.com/project/_/settings/api) in your dashboard. - - - Do not expose the `service_role` token on the client because the role is authorized to bypass - row-level security. - - -To use your own JWT with Realtime make sure to set the token after instantiating the Supabase client and before connecting to a Channel. - -```js -const { createClient } = require('@supabase/supabase-js') - -const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_KEY, {}) - -// Set your custom JWT here -supabase.realtime.setAuth('your-custom-jwt') - -const channel = supabase - .channel('db-changes') - .on( - 'postgres_changes', - { - event: '*', - schema: 'public', - table: 'messages', - filter: 'body=eq.bye', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - -### Refreshed tokens - -You will need to refresh tokens on your own, but once generated, you can pass them to Realtime. - -For example, if you're using the `supabase-js` `v2` client then you can pass your token like this: - -```js -// Client setup - -supabase.realtime.setAuth('fresh-token') -``` - -## Limitations - -The current version of Realtime's Postgres Changes feature has some performance limitations to keep in mind. There can be a bottleneck on the database that limits the number of messages streamed to subscribed clients. - -The polling query that fetches the changes is currently single-threaded. If you are frequently changing your database, the polling query may not be able to fetch the changes rapidly enough. The delivery of the changes will be delayed until you will get timeout. Additionally, there is a polling query per subscribed client, which means that each unique pair of `filters` and `JWT token` (logged-in user) affects the performance of the polling query. In other words, RLS and filters can further limit the number of messages that can be streamed to subscribed clients. - -From our testing and observation of the performance of the polling query, we have found that the following limits are safe to use: - -| Database Add-on | Filters | RLS Usage | Concurrent Clients | Records per second per client | Messages per second (total) | Latency p95 (ms) | -| ---------------- | ------- | --------- | ------------------ | ----------------------------- | --------------------------- | ---------------- | -| micro < > medium | 🚫 | 🚫 | 500 | 10 | 5,000 | 257 | -| micro < > medium | 🚫 | 🚫 | 1,000 | 10 | 10,000 | 800 | -| micro < > medium | 🚫 | 🚫 | 5,000 | 2 | 10,000 | 1,120 | -| large and above | 🚫 | 🚫 | 1,000 | 10 | 10,000 | 261 | -| large and above | 🚫 | 🚫 | 5,000 | 2 | 10,000 | 952 | -| large and above | 🚫 | 🚫 | 10,000 | 1 | 10,000 | 949 | -| large and above | 🚫 | 🚫 | 200,000 | 0.04 (1 in 25 seconds) | 8,000 | 15,709 | -| large and above | ✅ | ✅ | 500 | 2 | 1,000 | 262 | -| large and above | ✅ | ✅ | 1,000 | 1 | 1,000 | 431 | -| large and above | ✅ | ✅ | 5,000 | 0.2 (1 in 5 seconds) | 1,000 | 702 | - -If you want to use Realtime's Postgres Changes feature you should be aware of these limitations. And if you are using this feature at scale, you should consider using separate table without RLS and filters for the purpose of streaming changes to subscribed clients. Alternatively, you can use Realtime server-side only and then re-stream the changes to your clients using a Realtime Broadcast. Don't forget to run your own benchmarks to make sure that the performance is acceptable for your use case. - -We are making many improvements to Realtime's Postgres Changes. - -If you are uncertain about the performance of your use case, please reach out using [Support Form](https://supabase.com/dashboard/support/new) and we will be happy to help you. We have a team of engineers that can advise you on the best solution for your use-case. - -## More Realtime Quickstarts - -- [Broadcast Quickstart](/docs/guides/realtime/broadcast) -- [Presence Quickstart](/docs/guides/realtime/presence) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/realtime/presence.mdx b/apps/docs/pages/guides/realtime/presence.mdx deleted file mode 100644 index 311e6aec84950..0000000000000 --- a/apps/docs/pages/guides/realtime/presence.mdx +++ /dev/null @@ -1,275 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import StepHikeCompact from '~/components/StepHikeCompact' - -export const meta = { - title: 'Presence', - subtitle: "Get up and running with Realtime's Presence feature", - breadcrumb: 'Realtime Presence Quickstart', -} - -Presence can be used to share state between clients. Each client maintains their own piece of state within the shared state. - -Presence utilizes an in-memory conflict-free replicated data type (CRDT) to track and synchronize shared state in an eventually consistent manner. It computes the difference between existing state and new state changes and sends the necessary updates to clients via Broadcast. - -When a new client subscribes to a channel, it will immediately receive the channel's latest state in a single message instead of waiting for all other clients to send their individual states. - -Clients are free to come-and-go as they please, and as long as they are all subscribed to the same channel then they will all have the same Presence state as each other. - -The neat thing about Presence is that if a client is suddenly disconnected (for example, they go offline), their state will be automatically removed from the shared state. If you've ever tried to build an “I'm online” feature which handles unexpected disconnects, you'll appreciate how useful this is. - -## Quick start - -Let's explore how to implement Realtime Presence so you can integrate it into your use case. - - - - - - - - Install the Supabase JavaScript client. - - - - - - ```bash - npm install @supabase/supabase-js - ``` - - - - - - - - - - This client will be used to track Presence state as new clients join and leave the channel. - - Go to your Supabase project's [API Settings](https://supabase.com/dashboard/project/_/settings/api) and grab the `URL` and `anon` public API key. - - - - - - ```js - import { - createClient - } from '@supabase/supabase-js' - - const clientA = createClient( - 'https://.supabase.co', - '' - ) - ``` - - - - - - - - - - A channel's topic can be anything except for `'realtime'`. - - - - - - ```js - const channelA = clientA.channel('room-1') - ``` - - - - - - - - - - Listen to the `sync`, `join`, and `leave` events triggered whenever any client joins or leaves the channel or changes their slice of state. - - To begin tracking state, `clientA` calls `channelA.track()`, passing in the desired state to share. Once `clientA` successfully tracks its state, it will automatically trigger its own `sync` and `join` event handlers. - - - - - - ```js - channelA - .on( - 'presence', - { event: 'sync' }, - () => { - const newState = channelA.presenceState() - console.log('sync', newState) - } - ) - .on( - 'presence', - { event: 'join' }, - ({ key, newPresences }) => { - console.log('join', key, newPresences) - } - ) - .on( - 'presence', - { event: 'leave' }, - ({ key, leftPresences }) => { - console.log('leave', key, leftPresences) - } - ) - .subscribe(async (status) => { - if (status === 'SUBSCRIBED') { - const presenceTrackStatus = await channelA.track({ - user: 'user-1', - online_at: new Date().toISOString(), - }) - console.log(presenceTrackStatus) - } - }) - ``` - - - - - - - - - - This client will add to and remove from shared state so other clients can be notified of changes to Presence state. - - - - - - ```js - const clientB = createClient( - 'https://.supabase.co', - '' - ) - ``` - - - - - - - - - - This channel's topic must match `channelA`'s. - - - - - - ```js - const channelB = clientB.channel('room-1') - ``` - - - - - - - - - - Subscribe to channel and add to state. - - This will trigger `clientA`'s `sync` and `join` event handlers. - - - - - - ```js - channelB.subscribe(async (status) => { - if (status === 'SUBSCRIBED') { - const presenceTrackStatus = await channelA.track({ - user: 'user-2', - online_at: new Date().toISOString(), - }) - console.log(presenceTrackStatus) - } - }) - ``` - - - - - - - - - - This will trigger `clientA`'s `sync` and `leave` event handlers. - - - - - - ```js - const untrackPresence = async () => { - const presenceUntrackStatus = await channelB.untrack() - console.log(presenceUntrackStatus) - } - - untrackPresence() - ``` - - - - - - - -## Presence Key - -By default, Presence will generate a unique `UUIDv1` key on the server to track a client channel's state. If you prefer, you can provide a custom key when creating the channel. This key should be unique among clients. - -```js -import { createClient } from '@supabase/supabase-js' - -const channelC = supabase.channel('test', { - config: { - presence: { - key: 'userId-123', - }, - }, -}) -``` - -## Client-Side Rate Limit - -By default the client will rate limit itself at 10 messages per second (1 message every 100 milliseconds). You can customize this when creating the client: - -```js -import { createClient } from '@supabase/supabase-js' - -const supabase = createClient('https://.supabase.co', '', { - realtime: { - params: { - eventsPerSecond: 5, - }, - }, -}) -``` - -By setting `eventsPerSecond` to 5, you can send one message every 200 milliseconds on a per client basis. - -Learn more by visiting the [Quotas](/docs/guides/realtime/quotas) section. - -## More Realtime Quickstarts - -- [Broadcast Quickstart](/docs/guides/realtime/broadcast) -- [Postgres Changes Quickstart](/docs/guides/realtime/postgres-changes) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/realtime/protocol.mdx b/apps/docs/pages/guides/realtime/protocol.mdx deleted file mode 100644 index 3198403f3cb73..0000000000000 --- a/apps/docs/pages/guides/realtime/protocol.mdx +++ /dev/null @@ -1,195 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'protocol', - title: 'Realtime Protocol', - description: 'Understanding Realtime Protocol', -} - -The Realtime Protocol is a set of message formats used for communication over a WebSocket connection between a Realtime client and server. These messages are used to initiate a connection, update access tokens, receive system status updates, and receive real-time updates from the Postgres database. - -## Connection - -In the initial message, the client sends a message specifying the features they want to use (Broadcast, Presence, Postgres Changes). - -```ts -{ - "event": "phx_join", - "topic": string, - "payload": { - "config": { - "broadcast": { - "self": boolean - }, - "presence": { - "key": string - }, - "postgres_changes": [ - { - "event": "*" | "INSERT" | "UPDATE" | "DELETE", - "schema": string, - "table": string, - "filter": string + '=' + "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "in" + '.' + string - } - ] - } - }, - "ref": string -} -``` - - - The `in` filter has the format `COLUMN_NAME=in.(value1,value2,value3)`. However, other filters use - the format `COLUMN_NAME=FILTER_NAME.value`. - - -In response, the server sends the Postgres configuration with a unique ID. With this ID, the client should route incoming changes to the appropriate callback. - -```ts -{ - "event": "phx_reply", - "topic": string, - "payload": { - "response": { - "postgres_changes": [ - { - "id": number, - "event": "*" | "INSERT" | "UPDATE" | "DELETE", - "schema": string, - "table": string, - "filter": string + '=' + "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "in" + '.' + string - } - ] - }, - "status": "ok" | "error" - }, - "ref": string -} -``` - -## System messages - -System message are used to inform a client about the status of the Postgres subscription. The `payload.status` indicates if the subscription successful or not. -The body of the `payload.message` can be "Subscribed to PostgreSQL" or "Subscribing to PostgreSQL failed" with subscription params. - -```ts -{ - "event": "system", - "topic": string, - "payload":{ - "channel": string, - "extension": "postgres_changes", - "message": "Subscribed to PostgreSQL" | "Subscribing to PostgreSQL failed", - "status": "ok" | "error" - }, - "ref": null, -} -``` - -## Heartbeat - -The heartbeat message should be sent every 30 seconds to avoid a connection timeout. - -```ts -{ - "event": "heartbeat", - "topic": "phoenix", - "payload": {}, - "ref": string -} -``` - -## Access Token - -To update the access token, you need to send to the server a message specifying a new token in the `payload.access_token` value. - -```ts -{ - "event": "access_token", - "topic": string, - "payload":{ - "access_token": string - }, - "ref": string -} -``` - -## Postgres CDC message - -Realtime sends a message with the following structure - -```ts -{ - "event": "postgres_changes", - "topic": string, - "payload": { - "data": { - "columns": Array<{name: string, type: string}>, - "commit_timestamp": string, - "errors": null | string, - "old_record": {"id": number | string}, - "record": {[key: string]: boolean | number | string | null}, - "type": "*" | "INSERT" | "UPDATE" | "DELETE", - "schema": string, - "table": string - }, - "ids": Array - }, - "ref": null -} -``` - -## Broadcast message - -Structure of the broadcast event - -```ts -{ - "event": "broadcast", - "topic": string, - "payload": { - "event": string, - "payload": {[key: string]: boolean | number | string | null | undefined}, - "type": "broadcast" - }, - "ref": null -} -``` - -## Presence message - -The Presence events allow clients to monitor the online status of other clients in real-time. - -### State Update - -After joining, the server sends a `presence_state` message to a client with presence information. The payload field contains keys in UUID format, where each key represents a client and its value is a JSON object containing information about that client. - -```ts -{ - "event": "presence_state", - "topic": string, - "payload": { - [key: string]: {metas: Array<{phx_ref: string, name: string, t: float}>} - }, - "ref": null -} -``` - -### Diff Update - -After a change to the presence state, such as a client joining or leaving, the server sends a presence_diff message to update the client's view of the presence state. The payload field contains two keys, `joins` and `leaves`, which represent clients that have joined and left, respectively. The values associated with each key are UUIDs of the clients. - -```ts -{ - "event": "presence_diff", - "topic": string, - "payload": { - "joins": {metas: Array<{phx_ref: string, name: string, t: float}>}, - "leaves": {metas: Array<{phx_ref: string, name: string, t: float}>} - }, - "ref": null -} -``` - -export const Page = ({ children }) => -export default Page diff --git a/apps/docs/pages/guides/realtime/quotas.mdx b/apps/docs/pages/guides/realtime/quotas.mdx deleted file mode 100644 index 8f9ec1e6121f4..0000000000000 --- a/apps/docs/pages/guides/realtime/quotas.mdx +++ /dev/null @@ -1,79 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'quotas', - title: 'Realtime Quotas', - description: 'Understanding Realtime quotas', - sidebar_label: 'Quotas', -} - - - -Upgrade your plan to increase your quotas. Without a spend cap, or on an Enterprise plan, some quotas are still in place to protect budgets. All quotas are configurable per project. [Contact support](https://supabase.com/dashboard/support/new) if you need your quotas increased. Our cluster supports millions of concurrent connections and message throughput for production workloads. - - - -## Quotas by Plan - -| | Free | Pro | Pro (no spend cap) | Team | Enterprise | -| -------------------------------------------------------------------------------------- | ----- | ----- | ------------------ | ------ | ---------- | -| **Concurrent clients** | 200 | 500 | 10,000 | 10,000 | 10,000 | -| **Messages per second** | 100 | 500 | 2,500 | 2,500 | 2,500 | -| **Channel joins per second** | 100 | 500 | 2,500 | 2,500 | 2,500 | -| **Channels per client** | 100 | 100 | 100 | 100 | 100 | -| **Presence keys per object** | 10 | 10 | 10 | 10 | 10 | -| **Presence messages per second** | 20 | 50 | 1,000 | 1,000 | 1,000 | -| **Broadcast payload size KB** | 256 | 3,000 | 3,000 | 3,000 | 3,000 | -| **Postgres change payload size KB ([**read more**](#postgres-changes-payload-quota))** | 1,024 | 1,024 | 1,024 | 1,024 | 1,024 | - -Beyond the Free and Pro plan you can customize your quotas by [contacting support](https://supabase.com/dashboard/support/new). - -## Client-Side Limiting - -Some basic WebSocket message rate limiting is implemented client-side. - -For example, the [multiplayer.dev](https://multiplayer.dev) instantiates the Supabase client with an `eventsPerSecond` parameter. - -## Quota Errors - -When you reach a quota errors can appear in backend logs and messages in the WebSocket connection. - - - -Use the [Realtime Inspector](https://realtime.supabase.com/inspector/new) to reproduce an error and share those connection details with Supabase support. - - - -### Backend Logs - -If your project is being limited by a quota, check your [Realtime logs](https://supabase.com/dashboard/project/_/database/realtime-logs). - -### WebSocket Errors - -- `tenant_events`: Clients will be disconnected if your project is generating too many messages per second. `supabase-js` should reconnect automatically when the message throughput decreases below your plan quota. - - - -An `event` is a WebSocket message delivered to, or sent from a client. - - - -Some quotas can cause a Channel join to be refused. Realtime will reply with one of the following WebSocket messages: - -- `too_many_channels`: Too many channels currently joined for a single client. -- `too_many_connections`: Too many total concurrent connections for a project. -- `too_many_joins`: Too many Channel joins per second. - - - -Use your browser's developer tools to find the WebSocket initiation request and view individual messages. - - - -## Postgres Changes Payload Quota - -When this quota is reached, the `new` and `old` record payloads only include the fields with a value size of less than or equal to 64 bytes. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/realtime/realtime-with-nextjs.mdx b/apps/docs/pages/guides/realtime/realtime-with-nextjs.mdx deleted file mode 100644 index e60afb4f74a91..0000000000000 --- a/apps/docs/pages/guides/realtime/realtime-with-nextjs.mdx +++ /dev/null @@ -1,24 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'realtime-with-nextjs', - title: 'Using Realtime with Next.js', - description: 'Client & Server Components in Next.js with Realtime Updates', - sidebar_label: 'Videos', -} - -In this guide we explore the best ways to receive realtime Postgres changes with your Next.js application. -We'll show both client and serverside updates, and explore the which option is best. - -
    - -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/realtime/subscribing-to-database-changes.mdx b/apps/docs/pages/guides/realtime/subscribing-to-database-changes.mdx deleted file mode 100644 index 1836c91a0b945..0000000000000 --- a/apps/docs/pages/guides/realtime/subscribing-to-database-changes.mdx +++ /dev/null @@ -1,103 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'subscribing-to-database-changes', - title: 'Subscribing to Database Changes', - description: 'Listen to database changes in real-time from your website or application.', - sidebar_label: 'Videos', -} - -Supabase allows you to subscribe to real-time changes on your database from your client application. - -You can listen to database changes using the [Postgres Changes](/docs/guides/realtime/postgres-changes) extension. -The following video shows how you can enable this feature for your tables. - -## Demo - -
    - -
    - -## Setup - -You'll first need to create a `supabase_realtime` publication and add your tables (that you want to subscribe to) to the publication: - -```sql -begin; - --- remove the supabase_realtime publication -drop - publication if exists supabase_realtime; - --- re-create the supabase_realtime publication with no tables -create publication supabase_realtime; - -commit; - --- add a table called 'messages' to the publication --- (update this to match your tables) -alter - publication supabase_realtime add table messages; -``` - -## Streaming inserts - -You can use the `INSERT` event to stream all new rows. - -```js -const { createClient } = require('@supabase/supabase-js') - -const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_KEY) - -const channel = supabase - .channel('schema-db-changes') - .on( - 'postgres_changes', - { - event: 'INSERT', - schema: 'public', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - -## Streaming updates - -You can use the `UPDATE` event to stream all updated rows. - -```js -const { createClient } = require('@supabase/supabase-js') - -const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_KEY) - -const channel = supabase - .channel('schema-db-changes') - .on( - 'postgres_changes', - { - event: 'UPDATE', - schema: 'public', - }, - (payload) => console.log(payload) - ) - .subscribe() -``` - -## More resources - -- Learn more about the [Postgres Changes](/docs/guides/realtime/postgres-changes) extension. -- Client Libraries: - - [JavaScript](/docs/reference/javascript/subscribe) - - [Flutter](/docs/reference/dart/stream) - - [Python](/docs/reference/python/subscribe) - - [C#](/docs/reference/csharp/subscribe) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/resources.mdx b/apps/docs/pages/guides/resources.mdx deleted file mode 100644 index 3e0234456409e..0000000000000 --- a/apps/docs/pages/guides/resources.mdx +++ /dev/null @@ -1,187 +0,0 @@ -import Layout from '~/layouts/DefaultLayout' -import Link from 'next/link' -import { GlassPanel, IconPanel, Button, IconChevronRight } from 'ui' - -export const meta = { - title: 'Resources', - description: 'Resources for getting started building with Supabase.', -} - -
    - -
    - -
    - {resources.map((resource) => { - return ( - - - - {resource.description} - - - - ) - -})} - -
    - -
    - -
    -
    - -### Migrate to Supabase - -
    - -
    - {migrationGuides.map((product) => { - return ( - - - - {product.description} - - - - ) - -})} - -
    - -
    - -
    -
    - -### Postgres Resources - -
    - -
    - {postgres.map((resource) => { - return ( - - - - {resource.description} - - - - ) - -})} - -
    - -
    - -{/* 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/resources/migrating-to-supabase/firebase-auth', - description: 'Move your auth users from a Firebase project to a Supabase project.', - }, - { - title: 'Firestore Data', - icon: '/docs/img/icons/firebase-icon', - href: '/guides/resources/migrating-to-supabase/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/resources/migrating-to-supabase/firebase-storage', - description: 'Convert your Firebase Storage files to Supabase Storage.', - }, - { - title: 'Heroku', - icon: '/docs/img/icons/heroku-icon', - href: '/guides/resources/migrating-to-supabase/heroku', - description: 'Migrate your Heroku Postgres database to Supabase.', - }, - { - title: 'Render', - icon: '/docs/img/icons/render-icon', - href: '/guides/resources/migrating-to-supabase/render', - description: 'Migrate your Render Postgres database to Supabase.', - }, - { - title: 'Amazon RDS', - icon: '/docs/img/icons/aws-rds-icon', - href: '/guides/resources/migrating-to-supabase/amazon-rds', - description: 'Migrate your Amazon RDS database to Supabase.', - }, -] - -export const postgres = [ - { - title: 'Managing Indexes', - hasLightIcon: true, - href: '/guides/database/postgres/indexes', - description: 'Improve query performance using various index types in Postgres.', - }, - { - title: 'Cascade Deletes', - hasLightIcon: true, - href: '/guides/database/postgres/cascade-deletes', - description: 'Understand the types of foreign key constraint deletes.', - }, - { - title: 'Drop all tables in schema', - hasLightIcon: true, - href: '/guides/database/postgres/dropping-all-tables-in-schema', - description: 'Delete all tables in a given schema.', - }, - { - title: 'Select first row per group', - hasLightIcon: true, - href: '/guides/database/postgres/first-row-in-group', - description: 'Retrieve the first row in each distinct group.', - }, - { - title: 'Print PostgreSQL version', - hasLightIcon: true, - href: '/guides/database/postgres/which-version-of-postgres', - description: 'Find out which version of Postgres you are running.', - }, -] - -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 deleted file mode 100644 index 5cded86479bcb..0000000000000 --- a/apps/docs/pages/guides/resources/examples.mdx +++ /dev/null @@ -1,179 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'examples', - title: 'Examples and Resources', - description: 'Examples you can use to get started with Supabase', - video: 'https://www.youtube.com/v/7uKQBl9uZ00', -} - -{/* */} - -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. - -## Featured - -## Build a Twitter Clone with the Next.js App Router and Supabase - -By [Jon Meyers](https://twitter.com/jonmeyers_io) - - - Build a Twitter Clone with the Next.js App Router and Supabase - - -### Supabase Crash Course - -By [Traversy Media](https://www.youtube.com/watch?v=7uKQBl9uZ00). - -
    - -
    - -### Build an App With Supabase and NextJS - -By [@jlengstorf](https://twitter.com/jlengstorf) and [@jonmeyers_io](https://twitter.com/jonmeyers_io). - -
    - -
    - -### Is Supabase Legit - -By [Fireship](https://www.youtube.com/watch?v=WiwfiVdfRIc). - -
    - -
    - -## Official Examples - -### Todo List - -Build a basic Todo List with Supabase and your favorite frontend framework: - -- [Expo Todo List.](https://github.com/supabase/examples/tree/main/supabase-js-v1/todo-list/expo-todo-list) -- [Next.js Todo List.](https://github.com/supabase/supabase/tree/master/examples/todo-list/nextjs-todo-list) -- [React Todo List.](https://github.com/supabase/examples/tree/main/supabase-js-v1/todo-list/react-todo-list) -- [Svelte Todo List.](https://github.com/supabase/supabase/tree/master/examples/todo-list/sveltejs-todo-list) -- [Vue 3 Todo List (Typescript).](https://github.com/supabase/examples/tree/main/supabase-js-v1/todo-list/vue3-ts-todo-list) -- [Angular Todo List.](https://github.com/supabase/examples/tree/main/supabase-js-v1/todo-list/angular-todo-list) -- [Nuxt 3 Todo List.](https://github.com/nuxt-modules/supabase/tree/main/demo) - -### Auth examples - -- [Supabase Auth with vanilla JavaScript.](https://github.com/supabase/examples/tree/main/supabase-js-v1/auth/javascript-auth). Use Supabase without any frontend frameworks. -- [Supabase Auth with Next.js](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-user-management). -- [Supabase Auth with RedwoodJS.](https://redwood-playground-auth.netlify.app/supabase) Try out Supabase authentication in the [RedwoodJS](https://redwoodjs.com) Authentication Playground complete with OAuth support and code samples. - -### Collaborative - -- [Next.js Slack Clone.](https://github.com/supabase/examples/tree/main/supabase-js-v1/slack-clone/nextjs-slack-clone) - -## Community - -### Courses - -- [Build a Twitter Clone with the Next.js App Router and Supabase - free egghead course](https://egghead.io/courses/build-a-twitter-clone-with-the-next-js-app-router-and-supabase-19bebadb) -- Build a FullStack App with Next.js, Supabase & Prisma by [@gdangel0](https://twitter.com/gdangel0): [Free course](https://themodern.dev/courses/build-a-fullstack-app-with-nextjs-supabase-and-prisma-322389284337222224) - -### Libraries - -- D (in development): [GitHub](https://github.com/csharpdf/dupabase) -- Flutter (in development): [GitHub](https://github.com/supabase/supabase-flutter) -- Python (in development): [GitHub](https://github.com/supabase/supabase-py) -- C# (in development): [GitHub](https://github.com/supabase/supabase-csharp) -- Kotlin (in development): [GitHub](https://github.com/supabase-community/supabase-kt) -- `useSupabase`: Supabase React Hooks. [GitHub](https://github.com/gbibeaul/use-supabase) -- `vue-supabase`: Supabase Vue wrapper. [GitHub](https://github.com/supabase/vue-supabase) -- `vue-3-supabase`: Supabase Vue 3 wrapper. [GitHub](https://github.com/DidoMarchet/vue-3-supabase) -- `nuxt-supabase`: Supabase Nuxt wrapper. [GitHub](https://github.com/supabase-community/nuxt-supabase) -- `@nuxtjs/supabase`: Supabase Nuxt 3 module. [GitHub](https://github.com/nuxt-modules/supabase) -- `react-supabase`: Supabase React Hooks. [Docs](https://react-supabase.vercel.app) [GitHub](https://github.com/tmm/react-supabase) -- ` @triniwiz/nativescript-supabase`: Supabase NativeScript. [GitHub](https://github.com/triniwiz/nativescript-plugins/tree/master/packages/nativescript-supabase) - -### Guides - -- Supabase Auth with Redwood. [Docs](https://redwoodjs.com/tutorial/authentication) -- Supabase Auth with Sapper SSR. [Blog](https://dev.to/jakobbouchard/how-to-setup-supabase-auth-with-sapper-ssr-13od) -- Switch from Firebase Auth to Supabase Auth. [Blog](https://msyyn.medium.com/switch-from-firebase-auth-to-supabase-auth-the-open-source-firebase-alternative-509746952b1b) -- Setting up Umami Analytics with Supabase. [Blog](https://dev.to/jakobbouchard/setting-up-umami-with-vercel-and-supabase-3a73) -- Creating New Supabase Users In NextJS. [Blog](https://www.aboutmonica.com/blog/creating-new-supabase-users-in-next-js) -- Creating Protected Routes In NextJS With Supabase. [Blog](https://www.aboutmonica.com/blog/creating-protected-routes-in-next-js-with-supabase) -- Migrate from Google Cloud Storage (GCS) to Supabase Storage [Gist](https://gist.github.com/danalloway/86f79efd5ca336ff7364554ac3104014) -- Subscriptions with Supabase and Stripe Billing [Blog](https://www.sandromaglione.com/2021/04/29/supabase-auth-create-stripe-customer-subscription-supabase-stripe-billing-part-1/) -- Flutter Supabase Authentication [Blog](https://www.sandromaglione.com/2021/04/24/flutter-supabase-authentication/) -- Supabase in 6 minutes [Video](https://www.youtube.com/watch?v=c8DNV9yl0mg) -- Supabase React Auth UI Tutorial [Video](https://youtu.be/6ch1PtIqCUw) -- Supabase React File Upload Tutorial [Video](https://youtu.be/HvOvdD2nX1k) -- Let's build SupaAuth - Build an Authentication System using Supabase, Next.js and Typescript [6-part Blog Series](https://aalam.in/blog/supabase-auth-intro-setup-next) -- In-depth self-hosting guide using Nginx [Blog](https://dev.to/chronsyn/self-hosting-with-supabase-1aii) -- Build an Email and Social Auth for Next JS with Supabase, Tailwind CSS 3.0 and TypeScript [Blog](https://creativedesignsguru.com/next-js-supabase-auth/) -- Link Shortener using Supabase and Ory [3-part Blog Series](https://www.ory.sh/tutorial-url-shortener-supabase-ory-integration-backend/) -- Building a CRUD API with FastAPI and Supabase: A Step-by-Step Guide [Blog](https://blog.theinfosecguy.xyz/building-a-crud-api-with-fastapi-and-supabase-a-step-by-step-guide) - -### Example apps - -- Supabase + Stripe + Next.js. [GitHub](https://github.com/vercel/nextjs-subscription-payments) -- Supabase + Svelte Trello clone. [GitHub](https://github.com/joshnuss/supabase-kanban) -- Supabase + Expo Starter. [GitHub](https://github.com/codingki/react-native-expo-template/tree/master/template-typescript-bottom-tabs-supabase-auth-flow) -- Supabase + Nest.js. [GitHub](https://github.com/hiro1107/nestjs-supabase-auth) -- Supabase + Cloudflare Workers. [GitHub](https://github.com/supabase/examples/tree/main/supabase-js-v1/with-cloudflare-workers) -- Supabase + Cloudflare Workers + Webpack. [GitHub](https://github.com/signalnerve/supabase-workers-proxy) -- Realtime chat app with Supabase + React. [GitHub](https://github.com/shwosner/realtime-chat-supabase-react) -- Repository.surf: GitHub insights dashboard. [GitHub](https://github.com/supabase/repository.surf) -- Supabase + React Native Instagram Clone. [GitHub](https://github.com/NiketanG/instaclone) -- KeepLink: Simple bookmark service with tags and archive. [GitHub](https://github.com/fengkx/keeplink) -- Supabase + Next.js (Next.js Starter Kit) [GitHub](https://github.com/one-aalam/next-starter-kit/tree/auth-supabase) -- Supabase + Svelte (Svelte Starter Kit) [GitHub](https://github.com/one-aalam/svelte-starter-kit) -- Supabase + SolidJS (SolidJS Starter Kit) [GitHub](https://github.com/one-aalam/solid-starter-kit) -- Supabase + Nuxt3 (Nuxt Starter Kit) [GitHub](https://github.com/one-aalam/nuxt-starter-kit) -- Supabase + Remix (Remix Starter Kit) [GitHub](https://github.com/one-aalam/remix-starter-kit) -- Supabase + Angular (Angular Starter Kit) [GitHub](https://github.com/one-aalam/ng-starter-kit) -- Supabase + Nuxt3 + nuxtjs/supabase [Github](https://github.com/nuxt-modules/supabase/tree/main/demo) -- Supabase + Ory Kratos & Ory Oathkeeper [Github](https://github.com/ory/examples/tree/master/kratos-keto-oathkeeper-supabase) -- Supabase + Ory Cloud [Github](https://github.com/ory/examples/tree/master/supabase-ory-cloud) -- Supabase Auth with React Native + Next.js (Monorepo) [Github](https://github.com/mateoguzmana/react-native-next-supabase-auth-monorepo) -- Supabase Auth with Nuxt3 [Github](https://github.com/zackha/supaAuth) - -### Blog Posts - -- Realtime Subscriptions using Vue + Supabase. [Blog](https://dev.to/ftonato/realtime-subscriptions-using-vue-supabase-1e11) -- Creating a microblog using Vue + Supabase. [Blog](https://dev.to/ftonato/creating-a-microblog-using-vue-supabase-31p) -- Track Real-time Page Views. [Blog](https://codebycorey.com/blog/page-views-nextjs-supabase) -- Supabase as a Sentry alternative. [Blog](http://kopi.cloud/blog/2021/sentry-supabase/) -- Using Supabase with Chartbrew. [Blog](https://chartbrew.com/blog/how-to-visualize-your-supabase-data-with-chartbrew/) -- Authentication with Supabase and React. [Blog](https://hyperfoo.io/posts/supabase-authentication-react) -- Supabase Schema Visualizer. [Blog](https://dev.to/zernonia/supabase-schema-visualizer-no-installation-login-49kg) -- Create a real-time UI using Next.js + Supabase. [Blog](https://pablopunk.com/posts/how-to-create-a-real-time-ui-with-nextjs-and-supabase) -- How to add Twitter auth quickly with Supabase to your Next.js site ⚡ [Blog](https://blog.avneesh.tech/how-to-add-twitter-auth-quickly-with-supabase-to-your-nextjs-site) -- Under the hood: Architecture and Technology Stack of Supabase ⚡ [Blog](https://www.workingsoftware.dev/tech-stack-and-architecture-of-supabase/) - -### Podcasts - -- [Software Engineering Daily](https://softwareengineeringdaily.com/2020/10/15/supabase-open-source-firebase-with-paul-copplestone/) -- [Heavy Bit](https://www.heavybit.com/library/podcasts/jamstack-radio/ep-71-open-source-firebase-alternative-with-paul-copplestone-of-supabase/) -- [Log Rocket](https://podrocket.logrocket.com/9) -- [FS Jam](https://fsjam.org/episodes/episode-33-supabase-with-paul-copplestone) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/resources/glossary.mdx b/apps/docs/pages/guides/resources/glossary.mdx deleted file mode 100755 index 44f9c6a266fe5..0000000000000 --- a/apps/docs/pages/guides/resources/glossary.mdx +++ /dev/null @@ -1,123 +0,0 @@ -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 different levels of access, including basic user identification information such as name, email address, and user ID. - -## 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/amazon-rds.mdx b/apps/docs/pages/guides/resources/migrating-to-supabase/amazon-rds.mdx deleted file mode 100644 index 3a2f4315d6552..0000000000000 --- a/apps/docs/pages/guides/resources/migrating-to-supabase/amazon-rds.mdx +++ /dev/null @@ -1,104 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Migrate from Amazon RDS to Supabase', - description: 'Migrate your Amazon RDS MySQL or MS SQL database to Supabase Postgres database.', -} - -This guide aims to exhibit the process of transferring your Amazon RDS database from any of these engines Postgres, MySQL or MS SQL to Supabase's Postgres database. Although Amazon RDS is a favored managed database service provided by AWS, it may not suffice for all use cases. Supabase, on the other hand, provides an excellent free and open source option that encompasses all the necessary backend features to develop a product: a Postgres database, authentication, instant APIs, edge functions, real-time subscriptions, and storage. - -Supabase's core is Postgres, enabling the use of row-level security and providing access to over 40 Postgres extensions. By migrating from Amazon RDS to Supabase, you can leverage Postgres to its fullest potential and acquire all the features you need to complete your project. - -## Retrieve your Amazon RDS database credentials [#retrieve-rds-credentials] - -1. Log in to your [Amazon RDS account](https://aws.amazon.com/rds/). -1. Select the region where your RDS database is located. -1. Navigate to the **Databases** tab. -1. Select the database that you want to migrate. -1. In the **Connectivity & Security** tab, note down the Endpoint and the port number. -1. In the **Configuration** tab, note down the Database name and the Username. -1. If you do not have the password, create a new one and note it down. - -![Copying RDS credentials from AWS Management Console](/docs/img/guides/resources/migrating-to-supabase/amazon-rds/amazon-rds_credentials.png) - -## Retrieve your Supabase Host [#retrieve-supabase-host] - -1. If you're new to Supabase, [create a project](https://supabase.com/dashboard). -1. Go to the [Database settings](https://supabase.com/dashboard/project/_/settings/database) for your project in the Supabase Dashboard. -1. Under **Connection Info**, note your Host (`$SUPABASE_HOST`). -1. Save your password or [reset it](https://supabase.com/dashboard/project/_/settings/database) if you forgot it. - -![Finding Supabase host address](/docs/img/guides/resources/migrating-to-supabase/amazon-rds/supabase_dashboard.png) - -## Migrate the database - -The fastest way to migrate your database is with the Supabase migration tool on -[Google Colab](https://colab.research.google.com/github/mansueli/Supa-Migrate/blob/main/Amazon_RDS_to_Supabase.ipynb). - -Alternatively, you can use [pgloader](https://github.com/dimitri/pgloader), a flexible and powerful data migration tool that supports a wide range of source database engines, including MySQL and MS SQL, and migrates the data to a Postgres database. For databases using the Postgres engine, we recommend using the pg_dump and psql command line tools, which are included in a full PostgreSQL installation. - - - - -1. Select the Dabase Engine from the Source database in the dropdown -1. Set the environment variables (`HOST`, `USER`, `SOURCE_DB`,`PASSWORD`, `SUPABASE_URL`, and `SUPABASE_PASSWORD`) in the Colab notebook. -1. Run the first two steps in [the notebook](https://colab.research.google.com/github/mansueli/Supa-Migrate/blob/main/Amazon_RDS_to_Supabase.ipynb) in order. The first sets engine and installs the necessary files. -1. Run the third step to start the migration. This will take a few minutes. - - - - - Install pgloader. - Create a configuration file (e.g., config.load). - -```sql -load database - from mysql://user:password@host/source_db - into postgres://postgres:password@db.xxxx.supabase.co:6543/postgres -alter schema 'public' owner to 'postgres'; -set wal_buffers = '64MB', max_wal_senders = 0, statement_timeout = 0, work_mem to '2GB'; -``` - -##Run the migration with pgloader - -```bash -pgloader config.load -``` - - - - - Install pgloader. - Create a configuration file (e.g., config.load). - -```sql -LOAD DATABASE - FROM mssql://USER:PASSWORD@HOST/SOURCE_DB - INTO postgres://postgres:password@db.xxxx.supabase.co:6543/postgres -ALTER SCHEMA 'public' OWNER TO 'postgres'; -set wal_buffers = '64MB', max_wal_senders = 0, statement_timeout = 0, work_mem to '2GB'; -``` - -##Run the migration with pgloader - -```bash -pgloader config.load -``` - - - - - - -- If you plan on migrating a database larger than 6 GB, we recommend [contacting support](https://supabase.com/dashboard/support/new) to ensure that you'll have the proper disk size pre-provisioned. You can read more about how the disk is managed on Supabase on the [Database usage](/docs/guides/platform/database-size#disk-management). -- We also recommend upgrading to at least a [Large instance](/docs/guides/platform/compute-add-ons) for the migration (you can downgrade later) to avoid running out of IO-Budget. - - - -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 deleted file mode 100644 index 9b898785f38c7..0000000000000 --- a/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-auth.mdx +++ /dev/null @@ -1,93 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'firebase-auth', - title: 'Firebase Auth Migration', - description: 'Migrate Firebase auth users to a Supabase project.', - sidebar_label: 'Firebase Auth', -} - -Supabase provides several [tools](https://github.com/supabase-community/firebase-to-supabase/tree/main/auth) to help migrate auth users from a Firebase project to a Supabase project. There are two parts to the migration process: - -- `firestoreusers2json` ([TypeScript](https://github.com/supabase-community/firebase-to-supabase/blob/main/auth/firestoreusers2json.ts), [JavaScript](https://github.com/supabase-community/firebase-to-supabase/blob/main/auth/firestoreusers2json.js)) exports users from an existing Firebase project to a `.json` file on your local system. -- `import_users` ([TypeScript](https://github.com/supabase-community/firebase-to-supabase/blob/main/auth/import_users.ts), [JavaScript](https://github.com/supabase-community/firebase-to-supabase/blob/main/auth/import_users.js)) imports users from a saved `.json` file into your Supabase project (inserting those users into the `auth.users` table of your `PostgreSQL` database instance). - -## Set up the migration tool [#set-up-migration-tool] - -1. Clone the [firebase-to-supabase](https://github.com/supabase-community/firebase-to-supabase) repository: - -```bash -git clone https://github.com/supabase-community/firebase-to-supabase.git -``` - -1. In the `/auth` directory, create a file named `supabase-service.json` with the following contents: - -```json -{ - "host": "database.server.com", - "password": "secretpassword", - "user": "postgres", - "database": "postgres", - "port": 5432 -} -``` - -1. Go to the [Database settings](https://supabase.com/dashboard/project/_/settings/database) for your project in the Supabase Dashboard. -1. Under **Connection Info**, copy the Host string and replace the entry in your `supabase-service.json` file. -1. Enter the password you used when you created your Supabase project in the `password` entry in the `supabase-service.json` file. - -## Generate a Firebase private key [#generate-firebase-private-key] - -1. Log in to your [Firebase Console](https://console.firebase.google.com/project) and open your project. -1. Click the gear icon next to **Project Overview** in the sidebar and select **Project Settings**. -1. Click **Service Accounts** and select **Firebase Admin SDK**. -1. Click **Generate new private key**. -1. Rename the downloaded file to `firebase-service.json`. - -## Save your Firebase password hash parameters [#save-firebase-hash-parameters] - -1. Log in to your [Firebase Console](https://console.firebase.google.com/project) and open your project. -1. Select **Authentication** (Build section) in the sidebar. -1. Select **Users** in the top menu. -1. At the top right of the users list, open the menu (3 dots) and click **Password hash parameters**. -1. Copy and save the parameters for `base64_signer_key`, `base64_salt_separator`, `rounds`, and `mem_cost`. - -```text Sample -hash_config { - algorithm: SCRYPT, - base64_signer_key: XXXX/XXX+XXXXXXXXXXXXXXXXX+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==, - base64_salt_separator: Aa==, - rounds: 8, - mem_cost: 14, -} -``` - -## Command line options - -### Dump Firestore users to a JSON file [#dump-firestore-users] - -`node firestoreusers2json.js [] []` - -- `filename.json`: (optional) output filename (defaults to `./users.json`) -- `batchSize`: (optional) number of users to fetch in each batch (defaults to 100) - -### Import JSON users file to Supabase Auth (PostgreSQL: auth.users) [#import-json-users-file] - -`node import_users.js []` - -- `path_to_json_file`: full local path and filename of .json input file (of users) -- `batch_size`: (optional) number of users to process in a batch (defaults to 100) - -## Notes - -For more advanced migrations, including the use of a middleware server component for verifying a user's existing Firebase password and updating that password in your Supabase project the first time a user logs in, see the [firebase-to-supabase repo](https://github.com/supabase-community/firebase-to-supabase/tree/main/auth). - -## Resources - -- [Supabase vs Firebase](https://supabase.com/alternatives/supabase-vs-firebase) -- [Firestore Data Migration](/docs/guides/migrations/firestore-data) -- [Firestore Storage Migration](/docs/guides/migrations/firebase-storage) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 6159663db96de..0000000000000 --- a/apps/docs/pages/guides/resources/migrating-to-supabase/firebase-storage.mdx +++ /dev/null @@ -1,72 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'firebase-storage', - title: 'Firebase Storage Migration', - description: 'Migrate Firebase Storage files to Supabase Storage.', - sidebar_label: 'Firebase Storage', -} - -Supabase provides several [tools](https://github.com/supabase-community/firebase-to-supabase/tree/main/storage) to convert storage files from Firebase Storage to Supabase Storage. Conversion is a two-step process: - -1. Files are downloaded from a Firebase storage bucket to a local filesystem. -2. Files are uploaded from the local filesystem to a Supabase storage bucket. - -## Set up the migration tool [#set-up-migration-tool] - -1. Clone the [firebase-to-supabase](https://github.com/supabase-community/firebase-to-supabase) repository: - -```bash -git clone https://github.com/supabase-community/firebase-to-supabase.git -``` - -1. In the `/storage` directory, rename [supabase-keys-sample.js](https://github.com/supabase-community/firebase-to-supabase/blob/main/storage/supabase-keys-sample.js) to `supabase-keys.js`. -1. Go to your Supabase project's [API settings](https://supabase.com/dashboard/project/_/settings/api) in the Dashboard. -1. Copy the **Project URL** and update the `SUPABASE_URL` value in `supabase-keys.js`. -1. Under **Project API keys**, copy the **service_role** key and update the `SUPABASE_KEY` value in `supabase-keys.js`. - -## Generate a Firebase private key [#generate-firebase-private-key] - -1. Log in to your [Firebase Console](https://console.firebase.google.com/project) and open your project. -1. Click the gear icon next to **Project Overview** in the sidebar and select **Project Settings**. -1. Click **Service Accounts** and select **Firebase Admin SDK**. -1. Click **Generate new private key**. -1. Rename the downloaded file to `firebase-service.json`. - -## Command line options - -### Download Firestore Storage bucket to a local filesystem folder [#download-firestore-storage-bucket] - -`node download.js [] [] [] []` - -- ``: The prefix of the files to download. To process the root bucket, use an empty prefix: "". -- ``: (optional) Name of subfolder for downloaded files. The selected folder is created as a subfolder of the current folder (e.g., `./downloads/`). The default is `downloads`. -- ``: (optional) The default is 100. -- ``: (optional) Stop after processing this many files. For no limit, use `0`. -- ``: (optional) Begin processing at this pageToken. - -To process in batches using multiple command-line executions, you must use the same parameters with a new `` on subsequent calls. Use the token displayed on the last call to continue the process at a given point. - -### Upload files to Supabase Storage bucket [#upload-to-supabase-storage-bucket] - -`node upload.js ` - -- ``: The prefix of the files to download. To process all files, use an empty prefix: "". -- ``: Name of subfolder of files to upload. The selected folder is read as a subfolder of the current folder (e.g., `./downloads/`). The default is `downloads`. -- ``: Name of the bucket to upload to. - - - -If the bucket doesn't exist, it's created as a `non-public` bucket. You must set permissions on this new bucket in the [Supabase Dashboard](https://supabase.com/dashboard/project/_/storage/buckets) before users can download any files. - - - -## Resources - -- [Supabase vs Firebase](https://supabase.com/alternatives/supabase-vs-firebase) -- [Firestore Data Migration](/docs/guides/migrations/firestore-data) -- [Firebase Auth Migration](/docs/guides/migrations/firebase-auth) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/resources/migrating-to-supabase/firestore-data.mdx b/apps/docs/pages/guides/resources/migrating-to-supabase/firestore-data.mdx deleted file mode 100644 index c8d30b87b4067..0000000000000 --- a/apps/docs/pages/guides/resources/migrating-to-supabase/firestore-data.mdx +++ /dev/null @@ -1,216 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -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', -} - -Supabase provides several [tools](https://github.com/supabase-community/firebase-to-supabase/tree/main/firestore) to convert data from a Firebase Firestore database to a Supabase PostgreSQL database. The process copies the entire contents of a single Firestore `collection` to a single PostgreSQL `table`. - -The Firestore `collection` is "flattened" and converted to a table with basic columns of one of the following types: `text`, `numeric`, `boolean`, or `jsonb`. If your structure is more complex, you can write a program to split the newly-created `json` file into multiple, related tables before you import your `json` file(s) to Supabase. - -## Set up the migration tool [#set-up-migration-tool] - -1. Clone the [firebase-to-supabase](https://github.com/supabase-community/firebase-to-supabase) repository: - -```bash -git clone https://github.com/supabase-community/firebase-to-supabase.git -``` - -1. In the `/firestore` directory, create a file named `supabase-service.json` with the following contents: - -```json -{ - "host": "database.server.com", - "password": "secretpassword", - "user": "postgres", - "database": "postgres", - "port": 5432 -} -``` - -1. Go to the [Database settings](https://supabase.com/dashboard/project/_/settings/database) for your project in the Supabase Dashboard. -1. Under **Connection Info**, copy the Host string and replace the entry in your `supabase-service.json` file. -1. Enter the password you used when you created your Supabase project in the `password` entry in the `supabase-service.json` file. - -## Generate a Firebase private key [#generate-firebase-private-key] - -1. Log in to your [Firebase Console](https://console.firebase.google.com/project) and open your project. -1. Click the gear icon next to **Project Overview** in the sidebar and select **Project Settings**. -1. Click **Service Accounts** and select **Firebase Admin SDK**. -1. Click **Generate new private key**. -1. Rename the downloaded file to `firebase-service.json`. - -## Command line options - -### List all Firestore collections - -`node collections.js` - -### Dump Firestore collection to JSON file - -`node firestore2json.js [] []` - -- `batchSize` (optional) defaults to 1000 -- output filename is `.json` -- `limit` (optional) defaults to 0 (no limit) - -#### Customize the JSON file with hooks - -You can customize the way your JSON file is written using a [custom hook](#custom-hooks). A common use for this is to "flatten" the JSON file, or to split nested data into separate, related database tables. For example, you could take a Firestore document that looks like this: - -```json Firestore -[{ "user": "mark", "score": 100, "items": ["hammer", "nail", "glue"] }] -``` - -And split it into two files (one table for users and one table for items): - -```json Users -[{ "user": "mark", "score": 100 }] -``` - -```json Items -[ - { "user": "mark", "item": "hammer" }, - { "user": "mark", "item": "nail" }, - { "user": "mark", "item": "glue" } -] -``` - -### Import JSON file to Supabase (PostgreSQL) [#import-to-supabase] - -`node json2supabase.js [] []` - -- `` The full path of the file you created in the previous step (`Dump Firestore collection to JSON file `), such as `./my_collection.json` -- `[]` (optional) Is one of: - - `none` (default) No primary key is added to the table. - - `smallserial` Creates a key using `(id SMALLSERIAL PRIMARY KEY)` (autoincrementing 2-byte integer). - - `serial` Creates a key using `(id SERIAL PRIMARY KEY)` (autoincrementing 4-byte integer). - - `bigserial` Creates a key using `(id BIGSERIAL PRIMARY KEY)` (autoincrementing 8-byte integer). - - `uuid` Creates a key using `(id UUID PRIMARY KEY DEFAULT gen_random_uuid())` (randomly generated UUID). - - `firestore_id` Creates a key using `(id TEXT PRIMARY KEY)` (uses existing `firestore_id` random text as key). -- `[]` (optional) Name of primary key. Defaults to "id". - -## Custom hooks - -Hooks are used to customize the process of exporting a collection of Firestore documents to JSON. They can be used for: - -- Customizing or modifying keys -- Calculating data -- Flattening nested documents into related SQL tables - -### Write a custom hook - -#### Create a .js file for your collection - -If your Firestore collection is called `users`, create a file called `users.js` in the current folder. - -#### Construct your .js file - -The basic format of a hook file looks like this: - -```js -module.exports = (collectionName, doc, recordCounters, writeRecord) => { - // modify the doc here - return doc -} -``` - -##### Parameters - -- `collectionName`: The name of the collection you are processing. -- `doc`: The current document (JSON object) being processed. -- `recordCounters`: An internal object that keeps track of how many records have been processed in each collection. -- `writeRecord`: This function automatically handles the process of writing data to other JSON files (useful for "flatting" your document into separate JSON files to be written to separate database tables). `writeRecord` takes the following parameters: - - `name`: Name of the JSON file to write to. - - `doc`: The document to write to the file. - - `recordCounters`: The same `recordCounters` object that was passed to this hook (just passes it on). - -### Examples - -#### Add a new (unique) numeric key to a collection - -```js -module.exports = (collectionName, doc, recordCounters, writeRecord) => { - doc.unique_key = recordCounter[collectionName] + 1 - return doc -} -``` - -#### Add a timestamp of when this record was dumped from Firestore - -```js -module.exports = (collectionName, doc, recordCounters, writeRecord) => { - doc.dump_time = new Date().toISOString() - return doc -} -``` - -#### Flatten JSON into separate files - -Flatten the `users` collection into separate files: - -```json -[ - { - "uid": "abc123", - "name": "mark", - "score": 100, - "weapons": ["toothpick", "needle", "rock"] - }, - { - "uid": "xyz789", - "name": "chuck", - "score": 9999999, - "weapons": ["hand", "foot", "head"] - } -] -``` - -The `users.js` hook file: - -```js -module.exports = (collectionName, doc, recordCounters, writeRecord) => { - for (let i = 0; i < doc.weapons.length; i++) { - const weapon = { - uid: doc.uid, - weapon: doc.weapons[i], - } - writeRecord('weapons', weapon, recordCounters) - } - delete doc.weapons // moved to separate file - return doc -} -``` - -The result is two separate JSON files: - -```json users.json -[ - { "uid": "abc123", "name": "mark", "score": 100 }, - { "uid": "xyz789", "name": "chuck", "score": 9999999 } -] -``` - -```json weapons.json -[ - { "uid": "abc123", "weapon": "toothpick" }, - { "uid": "abc123", "weapon": "needle" }, - { "uid": "abc123", "weapon": "rock" }, - { "uid": "xyz789", "weapon": "hand" }, - { "uid": "xyz789", "weapon": "foot" }, - { "uid": "xyz789", "weapon": "head" } -] -``` - -## Resources - -- [Supabase vs Firebase](https://supabase.com/alternatives/supabase-vs-firebase) -- [Firestore Storage Migration](/docs/guides/migrations/firebase-storage) -- [Firebase Auth Migration](/docs/guides/migrations/firebase-auth) - -export const Page = ({ children }) => - -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 deleted file mode 100644 index 930ded5270abb..0000000000000 --- a/apps/docs/pages/guides/resources/migrating-to-supabase/heroku.mdx +++ /dev/null @@ -1,79 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'heroku', - title: 'Migrate from Heroku to Supabase', - description: 'Migrate your Heroku Postgres database to Supabase.', - sidebar_label: 'Heroku', - video: 'https://www.youtube.com/v/xsRhPMphtZ4', -} - -Supabase is one of the best [free alternatives to Heroku Postgres](https://supabase.com/alternatives/supabase-vs-heroku-postgres). This guide shows how to migrate your Heroku Postgres database to Supabase. This migration requires the [pg_dump](https://www.postgresql.org/docs/current/app-pgdump.html) and [psql](https://www.postgresql.org/docs/current/app-psql.html) CLI tools, which are installed automatically as part of the complete PostgreSQL installation package. - -Alternatively, use the [Heroku to Supabase migration tool](https://migrate.supabase.com/) to migrate in just a few clicks. - -## Quick demo - -
    - -
    - -## Retrieve your Heroku database credentials [#retrieve-heroku-credentials] - -1. Log in to your [Heroku account](https://heroku.com) and select the project you want to migrate. -1. Click **Resources** in the menu and select your **Heroku Postgres** database. -1. Click **Settings** in the menu. -1. Click **View Credentials** and save the following information: - - Host (`$HEROKU_HOST`) - - Database (`$HEROKU_DATABASE`) - - User (`$HEROKU_USER`) - - Password (`$HEROKU_PASSWORD`) - -## Retrieve your Supabase Host [#retrieve-supabase-host] - -1. If you're new to Supabase, [create a project](https://supabase.com/dashboard). -1. Go to the [Database settings](https://supabase.com/dashboard/project/_/settings/database) for your project in the Supabase Dashboard. -1. Under **Connection Info**, note your Host (`$SUPABASE_HOST`). - -## Export your Heroku database to a file [#export-heroku-database] - -Use `pg_dump` with your Heroku credentials to export your Heroku database to a file (e.g., `heroku_dump.sql`). - -```bash -pg_dump --clean --if-exists --quote-all-identifiers \ - -h $HEROKU_HOST -U $HEROKU_USER -d $HEROKU_DATABASE \ - --no-owner --no-privileges > heroku_dump.sql -``` - -## Import the database to your Supabase project [#import-database-to-supabase] - -Use `psql` to import the Heroku database file to your Supabase project. - -```bash -psql -h $SUPABASE_HOST -U postgres -f heroku_dump.sql -``` - -## Additional options - -- To only migrate a single database schema, add the `--schema=PATTERN` parameter to your `pg_dump` command. -- To exclude a schema: `--exclude-schema=PATTERN`. -- To only migrate a single table: `--table=PATTERN`. -- To exclude a table: `--exclude-table=PATTERN`. - -Run `pg_dump --help` for a full list of options. - - - -- If you plan on migrating a database larger than 6 GB, we recommend [contacting support](https://supabase.com/dashboard/support/new) to ensure that you'll have the proper disk size pre-provisioned. You can read more about how the disk is managed on Supabase on the [Database usage](/docs/guides/platform/database-size#disk-management). -- We also recommend upgrading to at least a [Large instance](/docs/guides/platform/compute-add-ons) for the migration (you can downgrade later) to avoid running out of IO-Budget. - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/resources/migrating-to-supabase/render.mdx b/apps/docs/pages/guides/resources/migrating-to-supabase/render.mdx deleted file mode 100644 index 2eb6dd79214ed..0000000000000 --- a/apps/docs/pages/guides/resources/migrating-to-supabase/render.mdx +++ /dev/null @@ -1,95 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Migrate from Render to Supabase', - description: 'Migrate your Render Postgres database to Supabase.', -} - -Render is a popular Web Hosting service in the online services category that also has a managed Postgres service. Render has a great developer experience, allowing users to deploy straight from GitHub or GitLab. This is the core of their product and they do it really well. However, when it comes to Postgres databases, it may not be the best option. - -Supabase is one of the best free alternative to Render Postgres. Supabase provide all the backend features developers need to build a product: a Postgres database, authentication, instant APIs, edge functions, realtime subscriptions, and storage. Postgres is the core of Supabase—for example, you can use row-level security and there are more than 40 Postgres extensions available. - -This guide demonstrates how to migrate from Render to Supabase to get the most out of Postgres while gaining access to all the features you need to build a project. - -## Retrieve your Render database credentials [#retrieve-render-credentials] - -1. Log in to your [Render account](https://render.com) and select the project you want to migrate. -1. Click **Dashboard** in the menu and click in your **Postgres** database. -1. Scroll down in the **Info** tab. -1. Click on **PSQL Command** and edit it adding the content after `PSQL_COMMAND=`. - -![Copying PSQL command from Render dashboard](/docs/img/guides/resources/migrating-to-supabase/render/render_dashboard.png) -Example: - -```bash -%env PSQL_COMMAND=PGPASSWORD=RgaMDfTS_password_FTPa7 psql -h dpg-a_server_in.oregon-postgres.render.com -U my_db_pxl0_user my_db_pxl0 -``` - -## Retrieve your Supabase Host [#retrieve-supabase-host] - -1. If you're new to Supabase, [create a project](https://supabase.com/dashboard). -1. Go to the [Database settings](https://supabase.com/dashboard/project/_/settings/database) for your project in the Supabase Dashboard. -1. Under **Connection Info**, note your Host (`$SUPABASE_HOST`). -1. Save your password or [reset it](https://supabase.com/dashboard/project/_/settings/database) if you forgot it. - -![Finding Supabase host address](/docs/img/guides/resources/migrating-to-supabase/render/supabase_dashboard.png) - -## Migrate the database - -The fastest way to migrate your database is with the Supabase migration tool on [Google Colab](https://colab.research.google.com/github/mansueli/Supa-Migrate/blob/main/Migrate_Postgres_Supabase.ipynb). Alternatively, you can use the [pg_dump](https://www.postgresql.org/docs/current/app-pgdump.html) and [psql](https://www.postgresql.org/docs/current/app-psql.html) command line tools, which are included in a full PostgreSQL installation. - - - - -1. Set the environment variables (`PSQL_COMMAND`, `SUPABASE_HOST`, `SUPABASE_PASSWORD`) in the Colab notebook. -1. Run the first two steps in [the notebook](https://colab.research.google.com/github/mansueli/Supa-Migrate/blob/main/Migrate_Postgres_Supabase.ipynb) in order. The first sets the variables and the second installs PSQL and the migration script. -1. Run the third step to start the migration. This will take a few minutes. - - - - -### Export your Render database to a file in console [#export-render-database] - -Use `pg_dump` with your Render credentials to export your Render database to a file (e.g., `render_dump.sql`). - -```bash -pg_dump --clean --if-exists --quote-all-identifiers \ - -h $RENDER_HOST -U $RENDER_USER -d $RENDER_DATABASE \ - --no-owner --no-privileges > render_dump.sql -``` - -### Import the database to your Supabase project [#import-database-to-supabase] - -Use `psql` to import the Render database file to your Supabase project. - -```bash -psql -h $SUPA_URL -U postgres --file render_dump.sql -p 6543 -d postgres -``` - -### Additional options - -- To only migrate a single database schema, add the `--schema=PATTERN` parameter to your `pg_dump` command. -- To exclude a schema: `--exclude-schema=PATTERN`. -- To only migrate a single table: `--table=PATTERN`. -- To exclude a table: `--exclude-table=PATTERN`. - -Run `pg_dump --help` for a full list of options. - - - - - - -- If you plan on migrating a database larger than 6 GB, we recommend [contacting support](https://supabase.com/dashboard/support/new) to ensure that you'll have the proper disk size pre-provisioned. You can read more about how the disk is managed on Supabase on the [Database usage](/docs/guides/platform/database-size#disk-management). -- We also recommend upgrading to at least a [Large instance](/docs/guides/platform/compute-add-ons) for the migration (you can downgrade later) to avoid running out of IO-Budget. - - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/self-hosting.mdx b/apps/docs/pages/guides/self-hosting.mdx deleted file mode 100644 index 1ad426b229b83..0000000000000 --- a/apps/docs/pages/guides/self-hosting.mdx +++ /dev/null @@ -1,179 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Self-Hosting', - description: 'Getting started with self-hosting Supabase.', -} - -There are several ways to use Supabase: - -- [Supabase Cloud](https://supabase.com/dashboard): you don't need to deploy anything. We will manage and scale your infrastructure. -- [Docker](/docs/guides/self-hosting/docker): deploy to your own infrastructure. - -### Community - -There are several community-driven projects to help you deploy Supabase. We encourage you to try them out and contribute back to the community. - -
    - {community.map((x) => ( - - ))} -
    - -export const community = [ - { - name: 'Kubernetes', - description: 'Helm charts to deploy a Supabase on Kubernetes.', - href: 'https://github.com/supabase-community/supabase-kubernetes', - }, - { - name: 'Terraform', - description: 'A community-driven Terraform Provider for Supabase.', - href: 'https://github.com/supabase-community/supabase-terraform', - }, - { - name: 'Traefik', - description: 'A self-hosted Supabase setup with Traefik as a reverse proxy.', - href: 'https://github.com/supabase-community/supabase-traefik', - }, - { - name: 'AWS', - description: 'A CloudFormation template for Supabase.', - href: 'https://github.com/supabase-community/supabase-on-aws', - }, -] - -### Third-party - -The following third-party providers have shown consistent support for the self-hosted version of Supabase:. - -
    - {external.map((x) => ( - - ))} -
    - -export const external = [ - { - name: 'Digital Ocean', - description: 'Deploys using Terraform.', - href: 'https://supabase-on-do.product-docs.pages.dev/developer-center/hosting-supabase-on-digitalocean/', - }, - { - name: 'StackGres', - description: 'Deploys using Kubernetes.', - href: 'https://stackgres.io/blog/running-supabase-on-top-of-stackgres/', - }, -] - -## Architecture - -Supabase is a combination of open source tools, each specifically chosen for Enterprise-readiness. - -If the tools and communities already exist, with an MIT, Apache 2, or equivalent open license, we will use and support that tool. -If the tool doesn't exist, we build and open source it ourselves. - -![Supabase Architecture](/docs/img/supabase-architecture.png) - -- [Kong](https://github.com/Kong/kong) is a cloud-native API gateway. -- [GoTrue](https://github.com/supabase/gotrue) is an SWT based API for managing users and issuing SWT tokens. -- [PostgREST](http://postgrest.org/) is a web server that turns your PostgreSQL database directly into a RESTful API -- [Realtime](https://github.com/supabase/realtime) is an Elixir server that allows you to listen to PostgreSQL inserts, updates, and deletes using websockets. Realtime polls Postgres' built-in replication functionality for database changes, converts changes to JSON, then broadcasts the JSON over websockets to authorized clients. -- [Storage](https://github.com/supabase/storage-api) provides a RESTful interface for managing Files stored in S3, using Postgres to manage permissions. -- [postgres-meta](https://github.com/supabase/postgres-meta) is a RESTful API for managing your Postgres, allowing you to fetch tables, add roles, and run queries, etc. -- [PostgreSQL](https://www.postgresql.org/) is an object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance. - -## Configuration - -Each system has a number of configuration options which can be found in the relevant product documentation. - -- [Postgres](https://hub.docker.com/_/postgres/) -- [PostgREST](https://postgrest.org/en/stable/configuration.html) -- [Realtime](https://github.com/supabase/realtime#server) -- [GoTrue](https://github.com/supabase/gotrue) -- [Storage](https://github.com/supabase/storage-api) -- [Kong](https://docs.konghq.com/gateway/latest/install/docker/) - -## Managing your database - -It is recommended that you decouple your database from the middleware so that you can upgrade the middleware without any downtime. -The "middleware" is everything except Postgres, and it should work with any Postgres provider (such as AWS RDS), or your own Postgres cluster. - -### Extensions - -Supabase requires some Postgres extensions to be enabled by default for the API and Auth system to work. You can find the extensions inside the -[schema migration scripts](https://github.com/supabase/postgres/tree/develop/migrations). These are mounted at `/docker-entrypoint-initdb.d` -to run automatically when starting the database container. - -We recommend installing all extensions into an `extensions` schema. This will keep your API clean, -since all tables in the `public` schema are exposed via the API. - -{/* prettier-ignore */} -```sql -create schema if not exists extensions; -create extension if not exists "uuid-ossp" with schema extensions; -create extension if not exists pgcrypto with schema extensions; -create extension if not exists pgjwt with schema extensions; -``` - -##### `uuid-ossp` - -For UUID functions, required for PostgreSQL `<13`. - -##### `pgcrypto` and `pgjwt` - -For working with JWT and Auth functions. - -### Roles - -Supabase creates several [default roles](/docs/guides/database/postgres-roles) in your Postgres database. To restore defaults at any time you can run the commands inside the [schema initialization scripts](https://github.com/supabase/postgres/tree/develop/migrations/db/init-scripts). Remember to change your [role passwords](/docs/guides/self-hosting/docker#securing-your-setup) before deploying to production environments. - -### Realtime Logs - -Set your database's `log_min_messages` configuration to `fatal` to prevent redundant database logs generated by Realtime. However, you might miss important log messages such as database errors. Configure `log_min_messages` based on your needs. - -## API Keys - -The API Gateway (Kong) uses JWT to authenticate access through to the database. The JWT should correspond to a relevant Postgres Role, -and Supabase is designed to work with 2 roles: an `ANON_KEY` for unauthenticated access and a `SERVICE_KEY` for elevated access. - -Use this tool to generate keys: - - - -## Managing your secrets - -Many components inside Supabase use secure secrets and passwords. These are listed in the self-hosting -[env file](https://github.com/supabase/supabase/blob/master/docker/.env.example), but we strongly recommend using a -secrets manager when deploying to production. Plain text files like dotenv lead to accidental costly leaks. - -Some suggested systems include: - -- [Doppler](https://www.doppler.com/) -- [Key Vault](https://docs.microsoft.com/en-us/azure/key-vault/general/overview) by Azure (Microsoft) -- [Secrets Manager](https://aws.amazon.com/secrets-manager/) by AWS -- [Secrets Manager](https://cloud.google.com/secret-manager) by GCP -- [Vault](https://www.hashicorp.com/products/vault) by Hashicorp - -## Migrating and Upgrading - -If you have decoupled your database from the middleware, then you should be able to redeploy the latest middleware at any time as long as it has no breaking changes. -Supabase is evolving fast, and we'll continue to improve the migration strategy as part of our core offering. - -We realize that database migrations are difficult, and this is one of the problems we plan to make easy for developers. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/self-hosting/analytics/config.mdx b/apps/docs/pages/guides/self-hosting/analytics/config.mdx deleted file mode 100644 index 97dc3bf3a9759..0000000000000 --- a/apps/docs/pages/guides/self-hosting/analytics/config.mdx +++ /dev/null @@ -1,50 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { getAnalyticsConfigV0 } from '~/lib/mdx/getConfig' -import Param from '~/components/Params' -import { serialize } from 'next-mdx-remote/serialize' -import components from '~/components' -import { MDXRemote } from 'next-mdx-remote' - -export const meta = { - title: 'Analytics Self-hosting Config', - description: 'How to configure and deploy Supabase Analytics.', -} - - - -
    -{props.spec.info.tags.map(tag => { - return ( - <> -

    {tag.title}

    -

    {tag.description}

    -
    -
    Parameters
    -
      - {props.spec.parameters.filter(param => param.tags.includes(tag.id)).map((param) => { - return - })} - -
    -
    - - ) - -})} - -
    - -export const Page = ({ children }) => - -export default Page - -export const getStaticProps = async () => { - const spec = getAnalyticsConfigV0() - const descriptionSource = await serialize(spec.info.description) - return { - props: { - descriptionSource, - spec, - }, - } -} diff --git a/apps/docs/pages/guides/self-hosting/auth/config.mdx b/apps/docs/pages/guides/self-hosting/auth/config.mdx deleted file mode 100644 index e62b9746ad96c..0000000000000 --- a/apps/docs/pages/guides/self-hosting/auth/config.mdx +++ /dev/null @@ -1,50 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { getAuthConfigV1 } from '~/lib/mdx/getConfig' -import Param from '~/components/Params' -import { serialize } from 'next-mdx-remote/serialize' -import components from '~/components' -import { MDXRemote } from 'next-mdx-remote' - -export const meta = { - title: 'Auth Self-hosting Config', - description: 'How to configure and deploy Supabase.', -} - - - -
    -{props.spec.info.tags.map(tag => { - return ( - <> -

    {tag.title}

    -

    {tag.description}

    -
    -
    Parameters
    -
      - {props.spec.parameters.filter(param => param.tags.includes(tag.id)).map((param) => { - return - })} - -
    -
    - - ) - -})} - -
    - -export const Page = ({ children }) => - -export default Page - -export const getStaticProps = async () => { - const spec = getAuthConfigV1() - const descriptionSource = await serialize(spec.info.description) - return { - props: { - descriptionSource, - spec, - }, - } -} diff --git a/apps/docs/pages/guides/self-hosting/docker.mdx b/apps/docs/pages/guides/self-hosting/docker.mdx deleted file mode 100644 index e2d9831e3eae3..0000000000000 --- a/apps/docs/pages/guides/self-hosting/docker.mdx +++ /dev/null @@ -1,217 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - title: 'Self-Hosting with Docker', - description: 'Learn how to configure and deploy Supabase with Docker.', - subtitle: 'Learn how to configure and deploy Supabase with Docker.', - tocVideo: 'FqiQKRKsfZE', -} - -Docker is the easiest way to get started with self-hosted Supabase. This guide assumes you are running the command from the machine you intend to host from. - -## Before you begin - -You need the following installed in your system: [Git](https://git-scm.com/downloads) and Docker ([Windows](https://docs.docker.com/desktop/install/windows-install/), [MacOS](https://docs.docker.com/desktop/install/mac-install/), or [Linux](https://docs.docker.com/desktop/install/linux-install/)). - -## Running Supabase - -Follow these steps to start Supabase locally: - -```sh -# Get the code -git clone --depth 1 https://github.com/supabase/supabase - -# Go to the docker folder -cd supabase/docker - -# Copy the fake env vars -cp .env.example .env - -# Pull the latest images -docker compose pull - -# Start the services (in detached mode) -docker compose up -d -``` - -After all the services have started you can see them running in the background: - -```sh -docker compose ps -``` -Please [secure your services](#securing-your-services) as soon as possible using the instructions below. - -### Accessing Supabase Studio - -You can access the Supabase Dashboard through the API gateway on port `8000`. For example: `http://:8000`, or [localhost:8000](http://localhost:8000) if you are running Docker locally. - -You will be prompted for a username and password. By default, the credentials are: - -- Username: `supabase` -- Password: `this_password_is_insecure_and_should_be_updated` - -You should change these credentials as soon as possible using the [instructions](#dashboard-authentication) below. - -### Accessing the APIs - -Each of the APIs are available through the the same API gateway: - -- REST: `http://:8000/rest/v1/` -- Auth: `http://:8000/auth/v1/` -- Storage: `http://:8000/storage/v1/` -- Realtime: `http://:8000/realtime/v1/` - -### Accessing your Edge Functions - -Edge Functions are stored in `volumes/functions`. The default setup has a `hello` Function that you can invoke on `http://:8000/functions/v1/hello`. - -You can add new Functions as `volumes/functions//index.ts`. Restart the `functions` service to pick up the changes: `docker compose restart functions --no-deps` - -### Accessing Postgres - -You can connect to the Postgres database locally on port `5432`. For example, if you have `psql` on your local machine you can run: - -```bash -psql -h localhost -p 5432 -d postgres -U postgres -``` - -The default password is `your-super-secret-and-long-postgres-password`. You should change this as soon as possible using the [instructions below](#update-secrets). By default the database is not accessible from outside the local machine. You can [change this](#exposing-your-postgres-database) by updating the `docker-compose.yml` file. - - -## Securing your services - -While we provided you with some example secrets for getting started, you should NEVER deploy your Supabase setup using the defaults we have provided. Please follow all of the steps in this section to ensure you have a secure setup, and then [restart all services](#restarting-all-services) to pick up the changes. - -### Generate API Keys - -Create a new `JWT_SECRET` and store it securely. - -We can use your JWT Secret to generate new `anon` and `service` API keys using the form below. Update the "JWT Secret" and then run "Generate JWT" once for the `SERVICE_KEY` and once for the `ANON_KEY`: - - - -### Update API Keys - -Replace the values in the `.env` file: - - - `ANON_KEY` - replace with an `anon` key - - `SERVICE_ROLE_KEY` - replace with a `service` key - -You will need to [restart](#restarting-all-services) the services for the changes to take effect. - -### Update Secrets - -Update the `.env` file with your own secrets. In particular, these are required: - -- `POSTGRES_PASSWORD`: the password for the `postgres` role. -- `JWT_SECRET`: used by PostgREST and GoTrue, among others. -- `SITE_URL`: the base URL of your site. -- `SMTP_*`: mail server credentials. You can use any SMTP server. - -You will need to [restart](#restarting-all-services) the services for the changes to take effect. - -### Dashboard Authentication - -The dashboard is protected with Basic Authentication. The default user and password MUST be updated before using Supabase in production. You can update the `./docker/volumes/api/kong.yml` file with your own credentials. For example: - -```yaml docker/volumes/api/kong.yml -basicauth_credentials: -- consumer: DASHBOARD - username: user_one - password: password_one -- consumer: DASHBOARD - username: user_two - password: password_two -``` - -You will need to [restart](#restarting-all-services) the services for the changes to take effect. - -## Restarting all services - -You can restart services to pick up any configuration changes by running: - -```sh -docker compose restart -``` - -Be aware that this will result in downtime while the services are restarting. - -## Stopping all services - -You can stop Supabase by running `docker compose stop` in same directory as your `docker-compose.yml` file. - -## Uninstalling - -You can stop Supabase by running the following in same directory as your `docker-compose.yml` file: - -```sh -# Stop docker and remove volumes: -docker compose down -v - -# Remove Postgres data: -rm -rf volumes/db/data/ -``` - -This will destroy all data in the database and storage volumes, so be careful! - -## Common configuration - -Each system can be [configured](../self-hosting#configuration) independently. Some of the most common configuration options are listed below. - -### Configuring an email server - -You will need to use a production-ready SMTP server for sending emails. You can configure the SMTP server by updating the the following environment variables: - -```sh .env -SMTP_ADMIN_EMAIL= -SMTP_HOST= -SMTP_PORT= -SMTP_USER= -SMTP_PASS= -SMTP_SENDER_NAME= -``` - -We recommend using [AWS SES](https://aws.amazon.com/ses/). It's extremely cheap and reliable. Restart all services to pick up the new configuration. - -### Configuring S3 Storage - -By default all files are stored locally on the server. You can connfigure the Storage service to use S3 by updating the following environment variables: - -```yaml docker-compose.yml - storage: - environment: - STORAGE_BACKEND=s3 - GLOBAL_S3_BUCKET=name-of-your-s3-bucket - REGION=region-of-your-s3-bucket -``` - -You can find all the available options in the [storage repository](https://github.com/supabase/storage-api/blob/master/.env.sample). Restart the `storage` service to pick up the changes: `docker compose restart storage --no-deps` - -### Setting database's `log_min_messages` - -By default, `docker compose` sets the database's `log_min_messages` configuration to `fatal` to prevent redundant logs generated by Realtime. You can configure `log_min_messages` using any of the Postgres [Severity Levels](https://www.postgresql.org/docs/current/runtime-config-logging.html#RUNTIME-CONFIG-SEVERITY-LEVELS). - -### Exposing your Postgres database - -By default, the Postgres database is only accessible locally. If you want to expose it to the outside world, you can update the `docker-compose.yml` file and remove the `127.0.0.1:` prefix from the `ports` section: - -```yaml docker-compose.yml - db: - ports: - - ${POSTGRES_PORT}:${POSTGRES_PORT} -``` - -This is less-secure, so please make sure you are running a firewall in front of your server. - -### File storage backend on macOS - -By default, Storage backend is set to `file`, which is to use local files as the storage backend. For macOS compatibility, you need to choose `VirtioFS` as the Docker container file sharing implementation (in Docker Desktop -> Preferences -> General). - -### Setting up logging with the Analytics server - -Additional configuration is required for self-hosting the Analytics server. For the full setup instructions, see [Self Hosting Analytics](https://supabase.com/docs/reference/self-hosting-analytics/introduction#getting-started). - - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/self-hosting/realtime/config.mdx b/apps/docs/pages/guides/self-hosting/realtime/config.mdx deleted file mode 100644 index d960852fe5df0..0000000000000 --- a/apps/docs/pages/guides/self-hosting/realtime/config.mdx +++ /dev/null @@ -1,52 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { getRealtimeConfigV0 } from '~/lib/mdx/getConfig' -import Param from '~/components/Params' -import { serialize } from 'next-mdx-remote/serialize' -import components from '~/components' -import { MDXRemote } from 'next-mdx-remote' - -export const meta = { - title: 'Realtime Self-hosting Config', - description: 'How to configure and deploy Supabase.', -} - - - -See [this guide](/docs/guides/realtime/bring-your-own-database) if you want to configure your database to work with Realtime. - -
    -{props.spec.info.tags.map(tag => { - return ( - <> -

    {tag.title}

    -

    {tag.description}

    -
    -
    Parameters
    -
      - {props.spec.parameters.filter(param => param.tags.includes(tag.id)).map((param) => { - return - })} - -
    -
    - - ) - -})} - -
    - -export const Page = ({ children }) => - -export default Page - -export const getStaticProps = async () => { - const spec = getRealtimeConfigV0() - const descriptionSource = await serialize(spec.info.description) - return { - props: { - descriptionSource, - spec, - }, - } -} diff --git a/apps/docs/pages/guides/self-hosting/storage/config.mdx b/apps/docs/pages/guides/self-hosting/storage/config.mdx deleted file mode 100644 index 76f04369ad562..0000000000000 --- a/apps/docs/pages/guides/self-hosting/storage/config.mdx +++ /dev/null @@ -1,50 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' -import { getStorageConfigV0 } from '~/lib/mdx/getConfig' -import Param from '~/components/Params' -import { serialize } from 'next-mdx-remote/serialize' -import components from '~/components' -import { MDXRemote } from 'next-mdx-remote' - -export const meta = { - title: 'Storage Self-hosting Config', - description: 'How to configure and deploy Supabase.', -} - - - -
    -{props.spec.info.tags.map(tag => { - return ( - <> -

    {tag.title}

    -

    {tag.description}

    -
    -
    Parameters
    -
      - {props.spec.parameters.filter(param => param.tags.includes(tag.id)).map((param) => { - return - })} - -
    -
    - - ) - -})} - -
    - -export const Page = ({ children }) => - -export default Page - -export const getStaticProps = async () => { - const spec = getStorageConfigV0() - const descriptionSource = await serialize(spec.info.description) - return { - props: { - descriptionSource, - spec, - }, - } -} diff --git a/apps/docs/pages/guides/storage.mdx b/apps/docs/pages/guides/storage.mdx deleted file mode 100644 index dcc8f0ee7d54b..0000000000000 --- a/apps/docs/pages/guides/storage.mdx +++ /dev/null @@ -1,75 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'storage', - title: 'Storage', - description: 'Use Supabase to store and serve files.', - subtitle: 'Use Supabase to store and serve files.', - sidebar_label: 'Overview', -} - -Supabase Storage makes it simple to upload and serve files of any size, providing a robust framework for file access controls. - -## Features - -You can use Supabase Storage to store images, videos, documents, and any other file type. Serve your assets with a global CDN to reduce latency from over 285 cities globally. Supabase Storage includes a built-in image optimizer, so you can resize and compress your media files on the fly. - -## Examples - -Check out all of the Storage [templates and examples](https://github.com/supabase/supabase/tree/master/examples/storage) in our GitHub repository. - -
    - {examples.map((x) => ( - - ))} -
    - -export const examples = [ - { - name: 'Resumable Uploads with Uppy', - description: - 'Use Uppy to upload files to Supabase Storage using the TUS protocol (resumable uploads).', - href: 'https://github.com/supabase/supabase/tree/master/examples/storage/resumable-upload-uppy', - }, -] - -## Resources - -Find the source code and documentation in the Supabase GitHub repository. - -
    - {integrations.map((x) => ( - - ))} -
    - -export const integrations = [ - { - name: 'Supabase Storage API', - description: 'See the OpenAPI Spec for Supabase Storage.', - href: 'https://github.com/supabase/storage-api', - }, - { - name: 'OpenAPI Spec', - description: 'See the Swagger Documentation for Supabase Storage.', - href: 'https://supabase.github.io/storage-api/', - }, -] - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/storage/access-control.mdx b/apps/docs/pages/guides/storage/access-control.mdx deleted file mode 100644 index 61407692596e6..0000000000000 --- a/apps/docs/pages/guides/storage/access-control.mdx +++ /dev/null @@ -1,155 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'storage-access-control', - title: 'Access Control', - description: 'Manage who can access your Supabase Storage files.', - subtitle: 'Manage who can access your Supabase Storage files.', - tocVideo: '4ERX__Y908k', -} - -Supabase Storage is designed to work perfectly with [Postgres Row Level Security](/docs/guides/database/postgres/row-level-security) (RLS). - -You can use RLS to create [Security Access Policies](https://www.postgresql.org/docs/current/sql-createpolicy.html) that are incredibly powerful and flexible, allowing you to restrict access based on your business needs. - -## Policies - -Policies are just SQL, and they're easy once you get the hang of them. For example, here is a Policy that allows public access to any files in a bucket called "my_bucket_id". - -```sql -create policy "Public Access" -on storage.objects -for select -- Allow read access -to anon, authenticated -- Allow access to anonymous and authenticated users -using ( bucket_id = 'my_bucket_id' ); -- Identify the bucket -``` - -## Metadata storage - -Supabase Storage stores metadata in the `objects` and `buckets` table in the storage schema. - -To allow read access to files, the RLS policy must allow users to `SELECT` the `objects` table and for uploading a new object, the RLS policy must grant users access to `INSERT` into the `objects` table and so on. The mapping between the different API calls and the database permissions required is documented in the [Reference docs](/docs/reference/javascript/storage-createbucket). - -## Public and private buckets - -Storage buckets are private by default. For private buckets, you can access objects via the [download](/docs/reference/javascript/storage-from-download) method. This corresponds to `/object/auth/` API endpoint. Alternatively, you can create a publicly shareable URL with an expiry date using the [createSignedUrl](/docs/reference/javascript/storage-from-createsignedurl) method which calls the `/object/sign/` API. - -For public buckets, you can access the assets directly without a token or an Authorisation header. The [getPublicUrl](/docs/reference/javascript/storage-from-getpublicurl) helper method returns the full public URL for an asset. This calls the `/object/public/` API endpoint internally. While no authorization is required for accessing objects in a public bucket, proper [access control](#access-control) is required for other operations like uploading, deleting objects from public buckets as well. Public buckets also tend to have [better performance](/docs/guides/storage-cdn#public-vs-private-buckets). - -The URLs to access storage endpoints are prefixed with /storage/v1. For example, on the hosted Platform they will be: - -https://[project_ref].supabase.co/storage/v1/object/public/[id] - -You can access the storage API directly with the same endpoint. See the API docs for a full list of operations available. - -## Helper functions - -Supabase Storage provides SQL helper functions which you can use in your database queries and RLS policies. - -### `storage.filename()` - -Returns the name of a file. For example, if your file is stored in `public/subfolder/avatar.png` it would return: `'avatar.png'` - -**Usage** - -This example demonstrates how you would allow any user to download a file called `favicon.ico`: - -```sql -create policy "Allow authenticated uploads" -on storage.objects -for select -to public -using ( - storage.filename(name)) = 'favicon.ico' -); -``` - -### `storage.foldername()` - -Returns an array path, with all of the subfolders that a file belongs to. For example, if your file is stored in `public/subfolder/avatar.png` it would return: `[ 'public', 'subfolder' ]` - -**Usage** - -This example demonstrates how you would allow authenticated users to upload files to a folder called `private`: - -```sql -create policy "Allow authenticated uploads" -on storage.objects -for insert -to authenticated -with check ( - storage.foldername(name))[1] = 'private' -); -``` - -### `storage.extension()` - -Returns the extension of a file. For example, if your file is stored in `public/subfolder/avatar.png` it would return: `'png'` - -**Usage** - -This example demonstrates how you would allow restrict uploads to only PNG files inside a bucket called `cats`: - -```sql -create policy "Only allow PNG uploads" -on storage.objects -for insert -to authenticated -with check ( - bucket_id = 'cats' and storage.extension(name) = 'png' -); -``` - -## Usage - -Row Level Security is extremely versatile, since it simply uses SQL to express access rules for your data. You can learn more about RLS in the [Database docs](/docs/guides/database/postgres/row-level-security). - -### Allowing public access to a bucket - -Allow public access to any files in the "public" bucket: - -```sql -create policy "Public Access" -on storage.objects for select -to public -using ( bucket_id = 'public' ); -``` - -### Allowing logged-in access to a bucket - -Allow logged-in access to any files in the "restricted" bucket: - -```sql -create policy "Restricted Access" -on storage.objects for select -to authenticated -using ( bucket_id = 'restricted' ); -``` - -### Allowing individual access to a file - -Allow a user to access their own files: - -```sql -create policy "Individual user Access" -on storage.objects for select -to authenticated -using ( auth.uid() = owner ); -``` - ---- - -{/* Finish with a video. This also appears in the Sidebar via the "tocVideo" metadata */} - -
    - -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/storage/cdn.mdx b/apps/docs/pages/guides/storage/cdn.mdx deleted file mode 100644 index bd4527adee5a3..0000000000000 --- a/apps/docs/pages/guides/storage/cdn.mdx +++ /dev/null @@ -1,71 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'storage-cdn', - title: 'Storage CDN', - description: 'Learn how Supabase Storage caches objects with a CDN.', - sidebar_label: 'CDN', -} - -All assets uploaded to Supabase Storage are cached on a Content Delivery Network (CDN) to improve the latency for users all around the world. CDNs are a geographically distributed set of servers or **nodes** which caches content from an **origin server**. For Supabase Storage, the origin is the storage server running in the [same region as your project](https://supabase.com/dashboard/project/_/settings/general). Aside from performance, CDNs also help with security and availability by mitigating Distributed Denial of Service and other application attacks. - -## Basic CDN - -Our basic CDN caches objects based on the cache time set when uploading objects. - -### Example - -Let's walk through an example of how a CDN helps with performance. - -A new bucket is created for a Supabase project launched in Singapore. All requests to the Supabase Storage API are routed to the CDN first. - -A user from the United States requests an object and is routed to the U.S. CDN. At this point, that CDN node does not have the object in its cache and pings the origin server in Singapore. -![CDN cache miss](/docs/img/cdn-cache-miss.png) - -Another user, also in the United States, requests the same object and is served directly from the CDN cache in the United States instead of routing the request back to Singapore. -![CDN cache hit](/docs/img/cdn-cache-hit.png) - -### Cache duration - -By default, assets are cached both in the CDN and in the user's browser for 1 hour. After this, the CDN nodes ping the storage server to see if an object has been updated. You can modify this cache time when you are [uploading](/docs/reference/javascript/storage-from-upload) or [updating](/docs/reference/javascript/storage-from-update) an object by modifying the `cacheControl` parameter. -If you expect the object to not change at a given URL, setting a longer cache duration is preferable. - -If you need to update the version of the object stored in the CDN, there are various cache-busting techniques you can use. The most common way to do this is to add a version query parameter in the URL. - -For example, you can use a URL like `/storage/v1/object/sign/profile-pictures/cat.jpg?token=eyJh...&version=1` in your applications and set a long cache time of 1 year. - -When you want to update the cat picture, you can increment the version query parameter in the URL. The CDN treats `/storage/v1/object/sign/profile-pictures/cat.jpg?token=eyJh...&version=2` as a new object and pings the origin for the updated version. - -If your asset is updated frequently, we recommend that you re-upload the new asset in a different key, this way you'll always have the latest changes available immediately. - -Note that CDNs might still evict your object from their cache if it has not been requested for a while from a specific region. For example, if no user from United States requests your object, it will be removed from the CDN cache even if you set a very long cache control duration. - -The cache status of a particular request is sent in the `cf-cache-status` header. A cache status of `MISS` indicates that the CDN node did not have the object in its cache and had to ping the origin to get it. A cache status of `HIT` indicates that the object was sent directly from the CDN. - -## Smart CDN Caching - - - Smart CDN caching is automatically enabled for [Pro plan and above](https://supabase.com/pricing). - - -With Smart CDN caching enabled, the asset metadata in your database is synchronized to the edge. This automatically revalidates the cache when the asset is changed or deleted. - -Additionally, the smart CDN has a higher cache hit ratio as the origin server is shielded from asset requests that haven't changed when using different query strings in the URL. - -### Cache duration - -When Smart CDN is enabled, the asset is cached on the CDN for as long as possible. You can still control how long assets are stored in the browser using the [cacheControl](/docs/reference/javascript/storage-from-upload) option when uploading a file. Smart CDN caching works with all types of storage operations including signed URLs. - -When a file is updated or deleted, the CDN cache is automatically invalidated to reflect the change (including transformed images). It can take **up to 60 seconds** for the CDN cache to be invalidated as the asset metadata has to propagate across all the data-centers around the globe. - -When an asset is invalidated at the CDN level, browsers may not update its cache. - -If your asset is updated frequently, we recommend that you re-upload the new asset in a different key, this way you'll always have the latest changes available without waiting the propagation delay. If you expect your asset to be deleted, we recommend setting a low browser TTL value using the `cacheControl` option when using smart CDN caching, the default is 1 hour which generally is a good default. - -## Public vs Private Buckets - -Objects in public buckets do not require any Authorization to access objects. This leads to a better cache hit rate compared to private buckets. For private buckets, permissions for accessing each object is checked on a per user level. For example, if two different users access the same object in a private bucket from the same region, it results in a cache miss for both the users since they might have different security policies attached to them. On the other hand, if two different users access the same object in a public bucket from the same region, it results in a cache hit for the second user. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/storage/image-transformations.mdx b/apps/docs/pages/guides/storage/image-transformations.mdx deleted file mode 100644 index 35ae84b840c75..0000000000000 --- a/apps/docs/pages/guides/storage/image-transformations.mdx +++ /dev/null @@ -1,217 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'storage-image-transformations', - title: 'Storage Image Transformations', - description: 'Transform images with Storage', - subtitle: 'Transform images with Storage', - sidebar_label: 'Image Transformations', - tocVideo: 'dLqSmxX3r7I', -} - -Supabase Storage offers the functionality to transform and resize images dynamically. Any image stored in your buckets can be transformed and optimized for fast delivery. - - - Image Resizing is currently enabled for [Pro plan and above](https://supabase.com/pricing). - - -## Get a public URL for a transformed image - -You can pass a `transform` option to the functions you are currently using to interact with your objects. This returns the public URL that serves the resized image. - -```ts -supabase.storage.from('bucket').getPublicUrl('image.jpg', { - transform: { - width: 500, - height: 600, - }, -}) -``` - -An example URL could look like this: - -`https://project_id.supabase.co/storage/v1/render/image/public/bucket/image.jpg?width=500&height=600` - -## Signing URLs with transformation options - -To share a transformed image for a fixed amount of time, provide the transform options when you create the signed URL: - -```ts -supabase.storage.from('bucket').createSignedUrl('image.jpg', 60000, { - transform: { - width: 200, - height: 200, - }, -}) -``` - -The transformation options are embedded into the token—they cannot be changed once signed. - -## Downloading images - -To download a transformed image, pass the `transform` option to the `download` function. - -```ts -supabase.storage.from('bucket').download('image.jpg', { - transform: { - width: 800, - height: 300, - }, -}) -``` - -## Automatic Image Optimisation (WebP) - -When using the image transformation API we will automatically find the best format supported by the browser and return that to the client, without any code change. For instance, if you use Chrome when viewing a jpeg image and using transformation options, you'll see that the content-type returned is `webp`. - -As a result, this will lower the bandwidth that you send to your users and your application will load much faster. - - - We currently only support WebP. AVIF support will come in the near future - - -**Disabling automatic optimisation:** - -In case you'd like to return the original format of the image and **opt-out** from the automatic image optimization detection, you can pass the `format=origin` parameter when requesting a transformed image, this is also supported in the JavaScript SDK starting from v2.2.0 - -```ts -await storage.from('bucket').download('image.jpeg', { - transform: { - width: 200, - height: 200, - format: 'origin', - }, -}) -``` - -## NextJS Loader - -You can use Supabase Image Transformation to optimise your NextJS images using a custom [Loader](https://nextjs.org/docs/api-reference/next/image#loader-configuration). - -To get started, create a `supabase-image-loader.js` file in your NextJS project which exports a default function: - -```ts -const projectId = '' // your supabase project id - -export default function supabaseLoader({ src, width, quality }) { - return `https://${projectId}.supabase.co/storage/v1/render/image/public/${src}?width=${width}&quality=${ - quality || 75 - }` -} -``` - -In your `nextjs.config.js` file add the following configuration to instruct NextJS to use our custom loader - -```js -module.exports = { - images: { - loader: 'custom', - loaderFile: './supabase-image-loader.js', - }, -} -``` - -At this point you are ready to use the `Image` component provided by NextJS - -```tsx -import Image from 'next/image' - -const MyImage = (props) => { - return Picture of the author -} -``` - -## Transformation options - -We currently support a few transformation options focusing on resizing and cropping images. - -### Resizing - -You can use `width` and `height` parameters to resize an image to a specific dimension. If only one parameter is specified, the image will be resized and cropped, maintaining the aspect ratio. - -### Modes - -You can use different resizing modes to fit your needs, each of them uses a different approach to resize the image: - -Use the `resize` parameter with one of the following values: - -- `cover` : resizes the image while keeping the aspect ratio to fill a given size and crops projecting parts. (default) - -- `contain` : resizes the image while keeping the aspect ratio to fit a given size. - -- `fill` : resizes the image without keeping the aspect ratio. - -Example: - -```ts -supabase.storage.from('bucket').download('image.jpg', { - transform: { - width: 800, - height: 300, - resize: 'contain', // 'cover' | 'fill' - }, -}) -``` - -### Limits - -- Width and height must be an integer value between 1-2500. -- The image size cannot exceed 25MB. -- The image resolution cannot exceed 50MP. - -### Supported Image Formats - -| Format | Extension | Source | Result | -| ------ | --------- | ------ | ------ | -| PNG | `png` | ☑️ | ☑️ | -| JPEG | `jpg` | ☑️ | ☑️ | -| WebP | `webp` | ☑️ | ☑️ | -| AVIF | `avif` | ☑️ | ☑️ | -| GIF | `gif` | ☑️ | ☑️ | -| ICO | `ico` | ☑️ | ☑️ | -| SVG | `svg` | ☑️ | ☑️ | -| HEIC | `heic` | ☑️ | ❌ | -| BMP | `bmp` | ☑️ | ☑️ | -| TIFF | `tiff` | ☑️ | ☑️ | - -## Self Hosting - -Our solution to image resizing and optimisation can be self-hosted as with any other Supabase product. Under the hood we use the awesome [Imgproxy](https://imgproxy.net/) - -#### Imgproxy Configuration: - -Simply deploy an imgproxy container with the following configuration: - -```yaml -imgproxy: - image: darthsim/imgproxy - environment: - - IMGPROXY_ENABLE_WEBP_DETECTION=true - - IMGPROXY_JPEG_PROGRESSIVE=true -``` - -Note: make sure that this service can only be reachable within an internal network and not exposed to the public internet - -#### Storage API Configuration: - -Once [Imgproxy](https://imgproxy.net/) is deployed we need to configure a couple of environment variables in your self-hosted [storage-api](https://github.com/supabase/storage-api) service as follows: - -```shell -ENABLE_IMAGE_TRANSFORMATION=true -IMGPROXY_URL=yourinternalimgproxyurl.internal.com -``` - -{/* Finish with a video. This also appears in the Sidebar via the "tocVideo" metadata */} - -
    - -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/storage/quickstart.mdx b/apps/docs/pages/guides/storage/quickstart.mdx deleted file mode 100644 index c90e36f385d6f..0000000000000 --- a/apps/docs/pages/guides/storage/quickstart.mdx +++ /dev/null @@ -1,240 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'storage-quickstart', - title: 'Storage Quickstart', - description: 'Learn how to use Supabase to store and serve files.', - subtitle: 'Learn how to use Supabase to store and serve files.', - sidebar_label: 'Quickstart', - tocVideo: 'J9mTPY8rIXE', -} - -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-user-management). - -## Concepts - -Supabase Storage consists of Files, Folders, and Buckets. - -### Files - -Files can be any sort of media file. This includes images, GIFs, and videos. It is best practice to store files outside of your database because of their sizes. For security, HTML files are returned as plain text. - -### Folders - -Folders are a way to organize your files (just like on your computer). There is no right or wrong way to organize your files. You can store them in whichever folder structure suits your project. - -### Buckets - -Buckets are distinct containers for files and folders. You can think of them like "super folders". Generally you would create distinct buckets for different Security and Access Rules. For example, you might keep all video files in a "video" bucket, and profile pictures in an "avatar" bucket. - - - -File, Folder, and Bucket names **must follow** [AWS object key naming guidelines](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html) and avoid use of any other characters. - - - -## Create a bucket - -You can create a bucket using the Supabase Dashboard. Since the storage is interoperable with your Postgres database, you can also use SQL or our -client libraries. Here we create a bucket called "avatars": - - - - -1. Go to the [Storage](https://supabase.com/dashboard/project/_/storage/buckets) page in the Dashboard. -2. Click **New Bucket** and enter a name for the bucket. -3. Click **Create Bucket**. - - - - -```sql --- Use Postgres to create a bucket. - -insert into storage.buckets - (id, name) -values - ('avatars', 'avatars'); -``` - - - - -```js -// Use the JS library to create a bucket. - -const { data, error } = await supabase.storage.createBucket('avatars') -``` - -[Reference.](/docs/reference/javascript/storage-createbucket) - - - - -```dart -void main() async { - final supabase = SupabaseClient('supabaseUrl', 'supabaseKey'); - - final storageResponse = await supabase - .storage - .createBucket('avatars'); -} -``` - -[Reference.](https://pub.dev/documentation/storage_client/latest/storage_client/SupabaseStorageClient/createBucket.html) - - - - -## Upload a file - -You can upload a file from the Dashboard, or within a browser using our JS libraries. - - - - -1. Go to the [Storage](https://supabase.com/dashboard/project/_/storage/buckets) page in the Dashboard. -2. Select the bucket you want to upload the file to. -3. Click **Upload File**. -4. Select the file you want to upload. - - - - -```js -const avatarFile = event.target.files[0] -const { data, error } = await supabase.storage - .from('avatars') - .upload('public/avatar1.png', avatarFile) -``` - -[Reference.](/docs/reference/javascript/storage-from-upload) - - - - -```dart -void main() async { - final supabase = SupabaseClient('supabaseUrl', 'supabaseKey'); - - // Create file `example.txt` and upload it in `public` bucket - final file = File('example.txt'); - file.writeAsStringSync('File content'); - final storageResponse = await supabase - .storage - .from('public') - .upload('example.txt', file); -} -``` - -[Reference.](https://pub.dev/documentation/storage_client/latest/storage_client/SupabaseStorageClient/createBucket.html) - - - - -## Download a file - -You can download a file from the Dashboard, or within a browser using our JS libraries. - - - - -1. Go to the [Storage](https://supabase.com/dashboard/project/_/storage/buckets) page in the Dashboard. -2. Select the bucket that contains the file. -3. Select the file that you want to download. -4. Click **Download**. - - - - -```js -// Use the JS library to download a file. - -const { data, error } = await supabase.storage.from('avatars').download('public/avatar1.png') -``` - -[Reference.](/docs/reference/javascript/storage-from-download) - - - - -```dart -void main() async { - final supabase = SupabaseClient('supabaseUrl', 'supabaseKey'); - - final storageResponse = await supabase - .storage - .from('public') - .download('example.txt'); -} -``` - -[Reference.](/docs/reference/dart/storage-from-download) - - - - -## Add security rules - -To restrict access to your files you can use either the Dashboard or SQL. - - - - -1. Go to the [Storage](https://supabase.com/dashboard/project/_/storage/buckets) page in the Dashboard. -2. Click **Policies** in the sidebar. -3. Click **Add Policies** in the `OBJECTS` table to add policies for Files. You can also create policies for Buckets. -4. Choose whether you want the policy to apply to downloads (SELECT), uploads (INSERT), updates (UPDATE), or deletes (DELETE). -5. Give your policy a unique name. -6. Write the policy using SQL. - - - - -```sql --- Use SQL to create a policy. - -create policy "Public Access" - on storage.objects for select - using ( bucket_id = 'public' ); -``` - - - - ---- - -{/* Finish with a video. This also appears in the Sidebar via the "tocVideo" metadata */} - -
    - -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/guides/storage/storage-sample.mdx b/apps/docs/pages/guides/storage/storage-sample.mdx deleted file mode 100644 index 0c0e277b3fc89..0000000000000 --- a/apps/docs/pages/guides/storage/storage-sample.mdx +++ /dev/null @@ -1,11 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'storage-sample', - title: 'Storage Sample Doc', - description: 'Storage Sample Doc', -} - -## Description - -Sample... diff --git a/apps/docs/pages/guides/storage/uploads.mdx b/apps/docs/pages/guides/storage/uploads.mdx deleted file mode 100644 index 63026956118a5..0000000000000 --- a/apps/docs/pages/guides/storage/uploads.mdx +++ /dev/null @@ -1,165 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'storage-uploads', - title: 'Storage Uploads', - description: 'Learn how to upload files to Supabase Storage.', - subtitle: 'Learn how to upload files to Supabase Storage.', - sidebar_label: 'Uploads', -} - -Supabase Storage provides two methods for uploading files: - -- Standard Uploads -- Resumable Uploads - -## Standard Upload - -The standard file upload method is ideal for small files that are not larger than 6MB. - -It uses the traditional `multipart/form-data` format and is simple to implement using the supabase-js SDK. Here's an example of how to upload a file using the standard upload method: - - - You can upload up to 5GB file size using the standard upload method. -
    - For files greater than 6 MB in size, use [TUS Resumable Upload](#resumable-upload) for better - reliability. -
    - -```javascript -import { createClient } from '@supabase/supabase-js' - -// Create Supabase client -const supabase = createClient('your_project_url', 'your_supabase_api_key') - -// Upload file using standard upload -async function uploadFile(file) { - const { data, error } = await supabase.storage.from('bucket_name').upload('file_path', file) - if (error) { - // Handle error - } else { - // Handle success - } -} -``` - -## Resumable Upload - - - Resumable upload is in **Beta**. We are rolling this feature gradually, please contact us if you - want to be prioritized. - - -The Resumable upload method is recommended for uploading large files that may exceed 6MB in size or for scenarios where network stability is a concern or if you simply want to have a progress bar for your uploads. - -Supabase Storage implements the [TUS protocol](https://tus.io/) to enable resumable uploads. TUS stands for The Upload Server and is an open protocol for supporting resumable uploads. The protocol allows the upload process to be resumed from where it left off in case of interruptions. This method can be implemented using the tus-js-client library, or other client-side libraries like [Uppy-js](https://uppy.io/docs/tus/) that support the TUS protocol. - -Here's an example of how to upload a file using `tus-js-client`: - -```javascript -const tus = require('tus-js-client') - -const projectId = '' -const token = '' - -function uploadFile(bucketName, fileName, file) { - return new Promise((resolve, reject) => { - var upload = new tus.Upload(file, { - endpoint: `https://${projectId}.supabase.co/storage/v1/upload/resumable`, - retryDelays: [0, 3000, 5000, 10000, 20000], - headers: { - authorization: `Bearer ${token}`, - 'x-upsert': 'true', // optionally set upsert to true to overwrite existing files - }, - uploadDataDuringCreation: true, - metadata: { - bucketName: bucketName, - objectName: fileName, - contentType: 'image/png', - cacheControl: 3600, - }, - chunkSize: 6 * 1024 * 1024, // NOTE: it must be set to 6MB (for now) do not change it - onError: function (error) { - console.log('Failed because: ' + error) - reject(error) - }, - onProgress: function (bytesUploaded, bytesTotal) { - var percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2) - console.log(bytesUploaded, bytesTotal, percentage + '%') - }, - onSuccess: function () { - // console.log(upload) - console.log('Download %s from %s', upload.file.name, upload.url) - resolve() - }, - }) - - // Check if there are any previous uploads to continue. - return upload.findPreviousUploads().then(function (previousUploads) { - // Found previous uploads so we select the first one. - if (previousUploads.length) { - upload.resumeFromPreviousUpload(previousUploads[0]) - } - - // Start the upload - upload.start() - }) - }) -} -``` - -### Upload URL - -When uploading using the resumable upload endpoint, the TUS server creates a unique URL for each upload, even for multiple uploads to the same path. All chunks will be uploaded to this URL using the `PATCH` method. - -This URL will be valid for **up to 24 hours**. If the upload is not completed within 24 hours, the URL will expire and you'll need to start the upload again. The TUS client library will automatically create a new URL if the previous one expires. - -### Concurrency - -When two or more clients try to upload to the same Upload URL only one of them will succeed. The other clients will receive a `409 Conflict` error. Only 1 client can upload to the same Upload URL at a time which prevents data corruption. - - - We do not yet support checksum validation for the uploaded chunks. This means if a client changes - the file mid way through the upload, the final upload will be an amalgamation of both the files. - This has to be done intentionally by the client and is unlikely to happen in normal circumstances. - - -When two or more clients upload a file to the same path using different upload URLs, the first client to complete the upload will succeed and the other clients will receive a `409 Conflict` error. - -If you provide the `x-upsert` header the last client to complete the upload will succeed instead. - -### UppyJS Example - -You can check a full example using UppyJS [Here](https://github.com/supabase/supabase/tree/master/examples/storage/resumable-upload-uppy) - -Framework integration for UppyJS: - -- [React](https://uppy.io/docs/react/) -- [Svelte](https://uppy.io/docs/svelte/) -- [Vue](https://uppy.io/docs/vue/) -- [Angular](https://uppy.io/docs/angular/) - -## Overwriting Files - -When uploading a file to a path that already exists, the default behavior is to return a `409 Conflict` error. -If you want to overwrite a file on a specific path you can set the `x-upsert` header to `true`. - -We do advise against overwriting files when possible, as the CDN will take sometime to propagate the changes to all the edge nodes leading to stale content. -Uploading a file to a new path is the recommended way to avoid propagation delays and stale content. - -If you want to know more about our CDN, check the [CDN](/docs/guides/storage/cdn) guide. - -## Access Control with RLS Policies - -Both the standard file upload and TUS resumable file upload methods in Supabase Storage support Row-Level Security (RLS) policies. RLS allows you to define fine-grained access control rules to restrict access to files based on user roles, permissions, or other criteria. This ensures that your files are secure and accessible only to authorized users. - -For more information on RLS policies, see the [Storage Access Control](/docs/guides/storage/access-control) guide. - -## Conclusion - -Supabase Storage provides multiple options for uploading files, including standard file upload and TUS resumable file upload, both of which use RLS policies for access control. -Additionally, there are client-side libraries like Uppy-js that make it easy to implement TUS uploads in your application. Choose the upload method that best fits your needs based on file size, network stability, and other requirements. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/handbook/contributing.mdx b/apps/docs/pages/handbook/contributing.mdx deleted file mode 100644 index 8edd779cef3d1..0000000000000 --- a/apps/docs/pages/handbook/contributing.mdx +++ /dev/null @@ -1,32 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'contributing', - title: 'Contributing', - description: 'Want to help?', -} - -## How to contribute - -Supabase has many [open source repos](https://github.com/orgs/supabase/repositories). Some of the more popular ones are: - -- [Supabase](https://github.com/supabase/supabase) - Our Dashboard, Websites, and example apps -- [Supabase-js](https://github.com/supabase/supabase-js) - A clientside library written in Typescript -- [Gotrue](https://github.com/supabase/gotrue) - Our auth server, written in Go -- [Realtime](https://github.com/supabase/realtime) - A server for streaming changes from Postgres, written in Elixir -- [browse all](https://github.com/orgs/supabase/repositories) - -Want to contribute? Why not jump into our GitHub repo and: - -- [Sponsor Supabase](https://github.com/sponsors/supabase). -- [Answer Discussions](https://github.com/supabase/supabase/discussions). -- Submit an issue to one of our [repos](https://github.com/orgs/supabase/repositories) -- Report a performance issue or a part of the documentation that you find confusing. -- Create a pull request in one of our [repos](https://github.com/orgs/supabase/repositories) -- [Translate our Readme](https://github.com/supabase/supabase/issues/1341). -- Try our products and give feedback. -- Spread the word if you like what we are doing. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/handbook/introduction.mdx b/apps/docs/pages/handbook/introduction.mdx deleted file mode 100644 index f6f2fc2c162f0..0000000000000 --- a/apps/docs/pages/handbook/introduction.mdx +++ /dev/null @@ -1,21 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'introduction', - title: 'Supabase Handbook', - description: 'The Supabase public handbook and manifesto', -} - -Supabase is thinking in public. Everything is online, no matter how raw the current state of things. - -This is our public handbook and manifesto. We are completely opensource and this means that you, our users, are also our team members. - ---- - -## Opensource - -Wherever we can we will support existing opensource tools and libraries. - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/index.mdx b/apps/docs/pages/index.mdx deleted file mode 100644 index 77529472c4ecb..0000000000000 --- a/apps/docs/pages/index.mdx +++ /dev/null @@ -1,366 +0,0 @@ -import HomeLayout from '~/layouts/HomeLayout' -import Link from 'next/link' -import { - Button, - GlassPanel, - IconBackground, - IconChevronRight, - IconPanel, - IconPlay, - TextLink, -} from 'ui' -import { LWAnnouncement } from 'ui' - -import HomeMenuIconPicker from '~/components/Navigation/NavigationMenu/HomeMenuIconPicker' - -export const meta = { - title: 'Supabase Documentation', - 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', -} - -
    - -
    - -
    -
    -
    - ## Products -
    - -
    - {products.map((product) => { - return ( - - - } background={true} showIconBg={true} showLink={false}> - {product.description} - - - - ) - })} -
    - -
    - -
    - -
    -
    - {/* - - */} - ## Client Libraries -
    -
    - -
    - -
    - {clientLibraries.map((product) => { - return ( - - - } - background={true} - showIconBg={true} - showLink={false} - > - {product.description} - - - - ) - })} -
    - -
    - -
    - -
    - - ## Migrate to Supabase - -

    - Bring your existing data, auth and storage to Supabase following our migration guides. -

    - - -
    - -
    - {migrationGuides.map((product) => { - return ( - - - - {product.description} - - - - ) - })} -
    - -
    - -
    - -
    - -
    - - ### Additional resources - -
    - -
    - {additionalResources.map((product) => { - return ( - - - } background={false}> - {product.description} - - - - ) - })} -
    - -
    - -
    - -
    - -
    -
    - - - - ### Self-Hosting -
    -

    - Get started with self-hosting Supabase. -

    - -
    - -
    - -
    -
    - {selfHostingOptions.map((product) => { - return ( - - - } background={true} showIconBg={true} showLink={false}> - {product.description} - - - - ) - })} -
    -
    - -
    - -
    - -export const products = [ - { - title: 'Database', - icon: 'database', - hasLightIcon: true, - href: '/guides/database', - description: - 'Supabase provides a full Postgres database for every project with Realtime functionality, database backups, extensions, and more.', - }, - { - title: 'Auth', - icon: '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.', - }, - { - title: 'Storage', - icon: '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: 'AI & Vectors', - icon: 'ai', - hasLightIcon: true, - href: '/guides/ai', - description: 'Use Supabase to store and search embedding vectors.', - }, - { - title: 'Realtime', - icon: '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: 'edge-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 migrationGuides = [ - { - title: 'Firebase Auth', - icon: '/docs/img/icons/firebase-icon', - href: '/guides/resources/migrating-to-supabase/firebase-auth', - }, - { - title: 'Firestore Data', - icon: '/docs/img/icons/firebase-icon', - href: '/guides/resources/migrating-to-supabase/firestore-data', - }, - { - title: 'Firebase Storage', - icon: '/docs/img/icons/firebase-icon', - href: '/guides/resources/migrating-to-supabase/firebase-storage', - }, - { - title: 'Heroku', - icon: '/docs/img/icons/heroku-icon', - href: '/guides/resources/migrating-to-supabase/heroku', - }, - { - title: 'Render', - icon: '/docs/img/icons/render-icon', - href: '/guides/resources/migrating-to-supabase/render', - }, - { - title: 'Amazon RDS', - icon: '/docs/img/icons/aws-rds-icon', - href: '/guides/resources/migrating-to-supabase/amazon-rds', - }, -] - -export const selfHostingOptions = [ - { - title: 'Auth', - icon: 'auth', - href: 'reference/self-hosting-auth/introduction', - }, - { - title: 'Realtime', - icon: 'realtime', - href: 'reference/self-hosting-realtime/introduction', - }, - { - title: 'Storage', - icon: 'storage', - href: 'reference/self-hosting-storage/introduction', - }, - { - title: 'Analytics', - icon: 'analytics', - href: 'reference/self-hosting-analytics/introduction', - }, -] - -export const clientLibraries = [ - { - title: 'Javascript', - icon: 'reference-javascript', - href: 'reference/javascript/introduction', - }, - { - title: 'Flutter', - icon: 'reference-dart', - href: 'reference/dart/introduction', - }, - { - title: 'Python', - icon: 'reference-python', - href: 'reference/python/introduction', - }, - { - title: 'C#', - icon: 'reference-csharp', - href: 'reference/csharp/introduction', - }, - { - title: 'Swift', - icon: 'reference-swift', - href: 'reference/swift/introduction', - }, - { - title: 'Kotlin', - icon: 'reference-kotlin', - href: 'reference/kotlin/introduction', - }, -] - -export const additionalResources = [ - { - title: 'Management API', - description: 'Manage your Supabase projects and organizations.', - icon: 'reference-api', - href: 'reference/api/introduction', - }, - { - title: 'Supabase CLI', - description: 'Use the CLI to develop, manage and deploy your projects.', - icon: 'reference-cli', - href: 'reference/cli/introduction', - }, - { - title: 'Platform Guides', - description: 'Learn more about the tools and services powering Supabase.', - icon: 'platform', - href: 'guides/platform', - }, - { - title: 'Integrations', - description: 'Explore a variety of integrations from Supabase partners.', - icon: 'integrations', - href: 'guides/integrations', - }, -] - -export const Page = ({ children }) => - -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 deleted file mode 100644 index d621ec7ade29f..0000000000000 --- a/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx +++ /dev/null @@ -1,198 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-deep-dive-jwts', - title: 'Part One: JWTs', - description: 'Supabase Auth Deep Dive Part 1 - JWTs', - video: 'https://www.youtube.com/v/v3Exg5YpJvE', -} - -### About - -An introduction to JWTs and how they are used in Supabase Auth - -### Watch - -
    - -
    - -### What are JSON Web Tokens (JWTs)? - -JWTs are JSON objects that are encoded and signed and sent around as a string. They are distributed to users of a service or website, who can later show the JWT to the website or service as proof that they have the right to access certain content. - -What exactly do we mean when we say "encoded" and "signed"? - -Well, the JSON object starts out looking something like this: - -```js -{ - "sub": "0001", - "name": "Sam Vimes", - "iat": 1516239022, - "exp": 1518239022 -} -``` - -`sub` is the "subject", which is usually the UUID of the user. `name` is self-explanatory, and `iat` is the Unix timestamp at which the token was created. Many JWTs will also have an `exp`, which is the date at which the token is set to expire and can no longer be used. These are some of the standard fields you may find in a JWT, but you can pretty much store whatever you want in there, for example: - -```js -{ - "sub": "0002", - "name": "Věra Hrabánková", - "iat": 1516239022, - "exp": 1518239022, - "theme": { - "primary" : "#D80C14", - "secondary" : "#FFFFFF" - } -} -``` - -Just note that the more data you store in your token, the longer the encoded string will be. - -When we want to send the JWT to the user, we first encode the data using an algorithm such as `HS256`. There are many libraries (and several different algorithms) that can be used to do this encoding/decoding, such as [jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken). I made a repl [here](https://replit.com/@awalias/jsonwebtokens#index.js) so you can try it for yourself. The signing is as simple as: - -```js -// from https://replit.com/@awalias/jsonwebtokens#index.js -let token = jwt.sign({ name: 'Sam Vimes' }, 'some-secret') -``` - -And the resulting string will look like this: - -```js -eyJhbGciOiJIUzI1NiJ9 - .eyJzdWIiOiIwMDAxIiwibmFtZSI6IlNhbSBWaW1lcyIsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTE4MjM5MDIyfQ - .zMcHjKlkGhuVsiPIkyAkB2rjXzyzJsMMgpvEGvGtjvA -``` - -You will notice that the string is actually made up of three components, which we'll address one by one: - -The first segment `eyJhbGciOiJIUzI1NiJ9` is known as the "header", and when decoded just tells us which algorithm was used to do the encoding: - -```js -{ - "alg": "HS256" -} -``` - -The second segment `eyJzdWIiOiIwMDAxIiwibmFtZSI6IlNhbSBWaW1lcyIsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTE4MjM5MDIyfQ` contains our original payload: - -```js -{ - "sub": "0001", - "name": "Sam Vimes", - "iat": 1516239022, - "exp": 1518239022 -} -``` - -The last segment `zMcHjKlkGhuVsiPIkyAkB2rjXzyzJsMMgpvEGvGtjvA` is the signature itself, which is the part used by the website or service provider to verify that a token sent by some user is legitimate. It is produced in the first instance by running the cryptographic function HS256 on the following input: - -```js -HMACSHA256( - base64UrlEncode(header) + "." + - base64UrlEncode(payload) - -) -``` - -You can test out minting your own tokens on [https://jwt.io](https://jwt.io). - -It is important to note that anyone who possesses the `jwt_secret` here can create new tokens, and also verify existing ones. More advanced JWT algorithms use two secrets: one for the creation of tokens, and a separate one to verify the validity of signed tokens. - -You might wonder why JWTs are so popular all of a sudden. The answer is that with the mass adoption of microservice architecture, we were in a situation where several distinct microservices (APIs, websites, servers, etc.) want to easily validate that a user is who they say they are, or are in other words a "logged-in" user. Traditional session tokens are no use here, since they would require each microservice to either maintain a record of currently valid session tokens or to query a central database each time a user wants to access a resource in order to check the validity of the session token – very inefficient indeed. JWT-based auth in this sense is decentralized, since anyone with the `jwt_secret` can verify a token without needing access to a centralized database. - -Note: One downside of JWTs is that they are not easily voidable, like session tokens. If a JWT is leaked to a malicious actor, they will be able to redeem it anywhere until the expiry date is reached – unless of course the system owner updates the `jwt_secret` (which will of course invalidate _everyone's_ existing tokens). - -### JWTs in Supabase - -In Supabase we issue JWTs for three different purposes: - -1. `anon key`: This key is used to bypass the Supabase API gateway and can be used in your client-side code. -2. `service role key`: This key has super admin rights and can bypass your Row Level Security. Do not put it in your client-side code. Keep it private. -3. `user specific jwts`: These are tokens we issue to users who log into your project/service/website. It's the modern equivalent of a session token, and can be used by a user to access content or permissions specific to them. - -The first token here, the `anon key` token, is for developers to send along with their API requests whenever they want to interact with their Supabase database. - -Let's say you want to read the names of all the rows in a table `colors`. We would make a request like: - -```bash -curl 'https://xscduanzzfseqszwzhcy.supabase.co/rest/v1/colors?select=name' \ --H "apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxNDIwNTE3NCwiZXhwIjoxOTI5NzgxMTc0fQ.-NBR1WnZyQGpRLdXJfgfpszoZ0EeE6KHatJsDPLIX8c" -``` - -If we put this token into https://jwt.io, we see it decodes to: - -```js -{ - "role": "anon", - "iss": "supabase", - "iat": 1614205174, - "exp": 1929781174 -} -``` - -This JWT is signed by a `jwt_secret` specific to the developer's Supabase token (you can find this secret alongside this encoded "anon key" on your Dashboard under Settings > API page) and is required to get past the Supabase API gateway and access the developer's project. - -The idea with this particular key is that it's safe to put into your client, meaning it's okay if your end users see this key – but _only_ if you first enable Row Level Security, which is the topic of [Part Two](../../learn/auth-deep-dive/auth-row-level-security) in this series. - -The second key, `service role key`, should only ever be used on one of your own servers or environments, and should never be shared with end users. You might use this token to do things like make batch inserts of data. - -The `user access token` is the JWT issued when you call for example: - -```js -supabase.auth.signIn({ - email: 'lao.gimmie@gov.sg', - password: 'They_Live_1988!', -}) -``` - -This token should be passed in addition to the `apikey` header as an `Authorization Bearer` header like: - -```bash -curl 'https://xscduanzzfseqszwzhcy.supabase.co/rest/v1/colors?select=name' \ --H "apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxNDIwNTE3NCwiZXhwIjoxOTI5NzgxMTc0fQ.-NBR1WnZyQGpRLdXJfgfpszoZ0EeE6KHatJsDPLIX8c" \ --H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjE1ODI0Mzg4LCJzdWIiOiIwMzM0NzQ0YS1mMmEyLTRhYmEtOGM4YS02ZTc0OGY2MmExNzIiLCJlbWFpbCI6InNvbWVvbmVAZW1haWwuY29tIiwiYXBwX21ldGFkYXRhIjp7InByb3ZpZGVyIjoiZW1haWwifSwidXNlcl9tZXRhZGF0YSI6bnVsbCwicm9sZSI6ImF1dGhlbnRpY2F0ZWQifQ.I-_oSsJamtinGxniPETBf-ezAUwDW2sY9bJIThvdX9s" -``` - -You'll notice that this token is quite a bit longer, since it contains information specific to the user such as: - -```js -{ - "aud": "authenticated", - "exp": 1615824388, - "sub": "0334744a-f2a2-4aba-8c8a-6e748f62a172", - "email": "d.l.solove@gmail.com", - "app_metadata": { - "provider": "email" - }, - "user_metadata": null, - "role": "authenticated" -} -``` - -Now that you understand what JWTs are and where they're used in Supabase, you can explore how to use them in combination with Row Level Security to start restricting access to certain tables, rows, and columns in your Postgres database: [Part Two: Row Level Security](../../learn/auth-deep-dive/auth-row-level-security) - -### Resources - -- JWT debugger: https://jwt.io/ - -### Next steps - -{/* */} - -- [Part Two: Row Level Security](../../learn/auth-deep-dive/auth-row-level-security) -- [Part Three: Policies](../../learn/auth-deep-dive/auth-policies) -- [Part Four: GoTrue](../../learn/auth-deep-dive/auth-gotrue) -- [Part Five: Google Oauth](../../learn/auth-deep-dive/auth-google-oauth) -- Sign up for Supabase: [supabase.com/dashboard](https://supabase.com/dashboard) - -export const Page = ({ children }) => - -export default Page 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 deleted file mode 100644 index b9f7f2836f979..0000000000000 --- a/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx +++ /dev/null @@ -1,111 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-google-oauth', - title: 'Part Five: Google Oauth', - description: 'Supabase Deep Dive Part 5: Google OAuth Provider', - video: 'https://www.youtube.com/v/_XM9ziOzWk4', -} - -### About - -How to add Google OAuth Logins to your Supabase Application. - -### Watch - -
    - -
    - -### Logging in with external OAuth providers - -Connecting social logins such as Google, GitHub, or Facebook couldn't be easier. In this guide we'll walk you through the process of connecting Google, but the process is basically the same for all of the providers which includes: azure, bitbucket, github, gitlab, facebook, and google. - -First you'll need to create a google project inside their [cloud console](https://console.cloud.google.com/home/dashboard), in other providers they may refer to this as an "app" and is usually available on the company's developer portal. - -![Create a new Google Project inside cloud console](/docs/img/auth-5-1.png) - -Once you have a project, type "OAuth" into the search bar and open up "OAuth Consent Screen" - -![Open the OAuth consent screen](/docs/img/auth-5-2.png) - -Select 'External' and proceed to fill out the rest of the form fields - -![Select External on the OAuth form](/docs/img/auth-5-3.png) - -Next open up Credentials page on the left - -![Open up Credentials page](/docs/img/auth-5-4.png) - -And click to create a new set of credentials, select OAuth client ID as the option - -![Create new oauth client id credentials](/docs/img/auth-5-5.png) - -Now choose Web Application (assuming you're creating a web app) and in the Authorized redirect URI section you need to add: `https://.supabase.co/auth/v1/callback`. You can find your Supabase URL in Settings > API inside the Supabase dashboard. - -![Add your redirect URI](/docs/img/auth-5-6.png) - -Now you can grab the client ID and secret from the popup, and insert them into the google section inside the Supabase dashboard in Auth > Settings: - -![take client id and secret](/docs/img/auth-5-7.png) - -![insert client id and secret into supabase dashboard in auth > auth](/docs/img/auth-5-8.png) - -Hit save. Now you should be able to navigate in the browser to: - -``` -https://.supabase.co/auth/v1/authorize?provider=google -``` - -And log in to your service using any google or gmail account. - -You can additionally add a query parameter `redirect_to=` to the end of the URL for example: - -``` -https://.supabase.co/auth/v1/authorize?provider=google&redirect_to=http://localhost:3000/welcome -``` - -But make sure any URL you enter here is on the same host as the site url that you have entered on the Auth > Settings page on the Supabase dashboard. (There is additional functionality coming soon, where you'll be able to add additional URLs to the allow list). - -If you want to redirect the user to a specific page in your website or app after a successful authentication. - -You also have the option of requesting additional scopes from the oauth provider. Let's say for example you want the ability to send emails on behalf of the user's gmail account. You can do this by adding the query parameter `scopes`, like: - -``` -https://.supabase.co/auth/v1/authorize?provider=google&https://www.googleapis.com/auth/gmail.send -``` - -Alternatively, if you're using the `supabase-js` client library, you can call the [`signInWithOAuth()` method](/docs/reference/javascript/auth-signinwithoauth): - -```js -const { data, error } = await supabase.auth.signInWithOAuth({ provider: 'google' }) -``` - -Note however that your app will usually have to be verified by Google before you can request advanced scopes such as this. - -The only thing left to implement is the UI, but if you prefer to use something pre-built, we have a handy [Auth Widget](https://github.com/supabase/ui/#using-supabase-ui-auth), where you can enable/disable whichever auth providers you want to support. - -For any support please get in touch at beta at [supabase.com](https://supabase.com) or for feature requests open an issue in the [backend](https://github.com/supabase/gotrue) or [frontend](https://github.com/supabase/gotrue-js) repos. - -### Resources - -- [JWT debugger](https://jwt.io) -- [Supabase Auth API Reference](/docs/reference/javascript/auth-api) - -### Next steps - -- 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 Four: GoTrue](../../learn/auth-deep-dive/auth-gotrue) - {/* */} -- Sign up for Supabase: [supabase.com/dashboard](https://supabase.com/dashboard) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-gotrue.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-gotrue.mdx deleted file mode 100644 index 85d22733009fc..0000000000000 --- a/apps/docs/pages/learn/auth-deep-dive/auth-gotrue.mdx +++ /dev/null @@ -1,85 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-gotrue', - title: 'Part Four: GoTrue', - description: 'Supabase Deep Dive Part 4: Gotrue Overview', -} - -### About - -How to restrict table access to authenticated users, row level policies, and email domain based access. - -### Watch - -
    - -
    - -### Gotrue Server - -Gotrue is an auth API server written in Go by the Netlify team, find the Supabase fork here: https://github.com/supabase/gotrue. The list of available API endpoints is available [here](https://github.com/supabase/gotrue#endpoints). - -When you deploy a new Supabase project, we deploy a new instance of this server alongside your database, and also inject your database with the required `auth` schema. - -It makes it super easy to, for example, send magic link emails which your users can use to login: - -```bash -# replace with your own project reference -# and SUPABASE_KEY with your anon api key -curl -X POST 'https://.supabase.co/auth/v1/magiclink' \ --H "apikey: SUPABASE_KEY" \ --H "Content-Type: application/json" \ --d '{ - "email": "someone@email.com" -}' -``` - -Gotrue is responsible for issuing access tokens for your users, sends confirmation, magic-link, and password recovery emails (by default we send these from a Supabase SMTP server, but you can easily plug in your own inside the dashboard at Project Settings > Auth) and also transacting with third party OAuth providers to get basic user data. - -The community even recently built in the functionality to request custom OAuth scopes, if your users need to interact more closely with the provider. See the scopes parameter here: [https://github.com/supabase/gotrue#get-authorize](https://github.com/supabase/gotrue#get-authorize). - -So let's say you want to send emails on behalf of a user via gmail, you might request the gmail.send scope by directing them to: - -``` -https://sjvwsaokcugktsdaxxze.supabase.co/auth/v1/authorize?provider=google&https://www.googleapis.com/auth/gmail.send -``` - -You'll have to make sure your google app is verified of course in order to request these advanced scopes. - -[Gotrue-js](https://github.com/supabase/gotrue-js) (and also [gotrue-csharp](https://github.com/supabase/gotrue-csharp), [gotrue-py](https://github.com/j0/gotrue-py), [gotrue-kt](https://github.com/supabase/gotrue-kt), and [gotrue-dart](https://github.com/supabase/gotrue-dart)) are all wrappers around the gotrue API endpoints, and make for easier session management inside your client. - -But all the functionality of gotrue-js is also available in supabase-js, which uses gotrue-js internally when you do things like: - -```jsx -const { user, session, error } = await supabase.auth.signIn({ - email: 'example@email.com', - password: 'example-password', -}) -``` - -If you want to request a feature, or contribute to the project directly, just head to https://github.com/supabase/gotrue and open some issues/PRs, we're always open to help. - -In the next guide we'll be looking at how to setup external OAuth providers: Watch [Part Five: Google Oauth](../../learn/auth-deep-dive/auth-google-oauth) - -### Resources - -- JWT debugger: https://jwt.io​ - -### Next steps - -- 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: [supabase.com/dashboard](https://supabase.com/dashboard) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx deleted file mode 100644 index b75e75aa2d0b7..0000000000000 --- a/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx +++ /dev/null @@ -1,190 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-policies', - title: 'Part Three: Policies', - description: 'Supabase Auth Deep Dive Part 3: User Based Access Policies', - video: 'https://www.youtube.com/v/0LvCOlELs5U', -} - -### About - -How to restrict table access to authenticated users, row level policies, and email domain based access. - -### Watch - -
    - -
    - -### User based row level policies - -Now that we know how to restrict access to tables based on JWT roles, we can combine this with user management to give us much more control over what data your users can read to and write from your database. - -We'll start with how user sessions work in Supabase, and later move on to writing user-centric policies. - -Let's say we're signing a user up to our service for the first time. The typical way to do this is by invoking the following method in supabase-js: - -```jsx -// see full api reference here: /docs/reference/javascript/auth-signup -supabase.auth.signUp({ email, password }) -``` - -By default this will send a confirmation email to the user. When the user clicks the link in the email, they will be redirected to your site (you need to provide your site url in Auth > Settings on the dashboard. By default this is http://localhost:3000) and the full URL including query params will look something like this: - -``` -http://localhost:3000/#access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjE2NDI5MDY0LCJzdWIiOiI1YTQzNjVlNy03YzdkLTRlYWYtYThlZS05ZWM5NDMyOTE3Y2EiLCJlbWFpbCI6ImFudEBzdXBhYmFzZS5pbyIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6ImVtYWlsIn0sInVzZXJfbWV0YWRhdGEiOnt9LCJyb2xlIjoiYXV0aGVudGljYXRlZCJ9.4IFzn4eymqUNYYo2AHLxNRL8m08G93Qcg3_fblGqDjo&expires_in=3600&refresh_token=RuioJv2eLV05lgH5AlJwTw&token_type=bearer&type=signup -``` - -Let's break this up so that it's easier to read: - -```jsx -// the base url - whatever you set in the Auth Settings in supabase.com/dashboard dashboard -http://localhost:3000/ - -// note we use the '#' (fragment) instead of '?' query param -// the access token is a JWT issued to the user -#access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjE2NDI5MDY0LCJzdWIiOiI1YTQzNjVlNy03YzdkLTRlYWYtYThlZS05ZWM5NDMyOTE3Y2EiLCJlbWFpbCI6ImFudEBzdXBhYmFzZS5pbyIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6ImVtYWlsIn0sInVzZXJfbWV0YWRhdGEiOnt9LCJyb2xlIjoiYXV0aGVudGljYXRlZCJ9.4IFzn4eymqUNYYo2AHLxNRL8m08G93Qcg3_fblGqDjo - -// valid for 60 minutes by default -&expires_in=3600 - -// use to get a new access_token before 60 minutes expires -&refresh_token=RuioJv2eLV05lgH5AlJwTw - -// can use as the Authorization: Bearer header in requests to your API -&token_type=bearer - -// why was this token issued? was it a signup, login, password reset, or magic link? -&type=signup -``` - -If we put the access_token into [https://jwt.io](https://jwt.io) we'll see it decodes to: - -```jsx -{ - "aud": "authenticated", - "exp": 1616429064, - "sub": "5a4365e7-7c7d-4eaf-a8ee-9ec9432917ca", - "email": "ant@supabase.io", - "app_metadata": { - "provider": "email" - }, - "user_metadata": {}, - "role": "authenticated" -} -``` - -The `authenticated` role is special in Supabase, it tells the API that this is an authenticated user and will know to compare the JWT against any policies you've added to the requested resource (table or row). - -The `sub` claim is usually what we use to match the JWT to rows in your database, since by default it is the unique identifier of the user in the `auth.users` table (as a side note - it's generally not recommended to alter the `auth` schema in any way in your Supabase database since the Auth API relies on it to function correctly). - -For the curious, try heading to the SQL editor and querying: - -```sql -select * from auth.users; -``` - -If supabase-js is loaded on your site (in this case http://localhost:3000) it automatically plucks the `access_token` out of the URL and initiates a session. You can retrieve the [session](/docs/reference/javascript/auth-getsession) to see if there is a valid session: - -```jsx -console.log(supabase.auth.getSession()) -``` - -Now that we can use methods to issue JWTs to users, we want to start fetching resources specific to that user. So let's make some. Go to the SQL editor and run: - -```sql -create table my_scores ( - name text, - score int, - user_id uuid not null -); - -ALTER TABLE my_scores ENABLE ROW LEVEL SECURITY; - -insert into my_scores(name, score, user_id) -values - ('Paul', 100, '5a4365e7-7c7d-4eaf-a8ee-9ec9432917ca'), - ('Paul', 200, '5a4365e7-7c7d-4eaf-a8ee-9ec9432917ca'), - ('Leto', 50, '9ec94326-2e2d-2ea2-22e3-3a535a4365e7'); - --- use UUIDs from the auth.users table if you want to try it --- for yourself -``` - -Now we'll write our policy, again in SQL, but note it's also possible to add via the dashboard in Auth > Policies: - -```sql -CREATE POLICY user_update_own_scores ON my_scores - FOR ALL - USING (auth.uid() = user_id); -``` - -Now, assuming you have an active session in your javascript/supabase-js environment you can do: - -```jsx -supabase.from('my_scores').select('*').then(console.log) -``` - -and you should only receive scores belonging to the current logged in user. Alternatively you can use Bash like: - -```bash -curl 'https://sjvwsaokcugktsdaxxze.supabase.co/rest/v1/my_scores?select=*' \ --H "apikey: " \ --H "Authorization: Bearer " -``` - -Note that the `anon key` (or `service role key`) is always needed to get past the API gateway. This can be passed in the `apikey` header or in a query param named `apikey`. It is passed automatically in supabase-js as long as you used it to instantiate the client. - -There are some more notes here on how to structure your schema to best integrate with the `auth.users` table. - -Once you get the hang of policies you can start to get a little bit fancy. Let's say I work at Blizzard and I only want Blizzard staff members to be able to update people's high scores, I can write something like: - -```sql -create policy "Only Blizzard staff can update leaderboard" - on my_scores - for update using ( - right(auth.jwt() ->> 'email', 13) = '@blizzard.com' - ); -``` - -Supabase comes with two built-in helper functions: `auth.uid()` and `auth.jwt()`. - -To create your own functions, navigate to the SQL editor and create a a new query. - -```sql -create or replace function user_agent() -returns text -language sql -as $$ - select nullif(current_setting('request.headers', true)::json->>'user-agent', '')::text; -$$; -``` - -See the full PostgreSQL policy docs here: [https://www.postgresql.org/docs/12/sql-createpolicy.html](https://www.postgresql.org/docs/12/sql-createpolicy.html) - -You can get as creative as you like with these policies. - -### Resources - -- JWT debugger: https://jwt.io​ -- PostgeSQL Policies: https://www.postgresql.org/docs/12/sql-createpolicy.html -- PostgREST Row Level Security: https://postgrest.org/en/v7.0.0/auth.html - -### Next steps - -- 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: [supabase.com/dashboard](https://supabase.com/dashboard) - -export const Page = ({ children }) => - -export default Page 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 deleted file mode 100644 index 81424abf45f39..0000000000000 --- a/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx +++ /dev/null @@ -1,135 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'auth-row-level-security', - title: 'Part Two: Row Level Security', - description: 'Supabase Auth Deep Dive Part Two - Row Level Security', - video: 'https://www.youtube.com/v/qY_iQ10IUhs', -} - -### About - -Learn how to restrict access to your database tables by enabling Row Level Security and writing Postgres Policies in the Supabase Dashboard. - -### Watch - -
    - -
    - -### Securing Your Tables - -In Supabase, you can access your data directly from the client (often the web browser), you do this by passing your Supabase URL and Anon key to supabase-js like so: - -```js -const supabase = createClient( - 'https://qwertyuiop.supabase.co', - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c' -) -``` - -This raises an interesting question however: "if my anon key is in the client, then can't someone read my javascript and steal my key?", the answer is yes. And this is where Postgres policies come in. - -Using Postgres's "Row-Level-Security" policies, we can set rules on what data the anon key is allowed or not allowed to access by default. - -We can say for example that the anon key should only be able to read from a particular table, but not write, update, nor delete. - -And these rules can be as complex as we want. We could say that the anon key can only delete rows which were inserted on a Thursday afternoon between 4 and 6pm, and where the id column is an even number. Pretty strange, but it shows the power of policies. - -Let's say we create a leaderboard table. We want people on our website to be able to read the leaderboard, but not write, update, or delete from it. We start by defining our table in SQL and adding some dummy data: - -```sql -create table leaderboard ( - name text, - score int -); - -insert into leaderboard - (name, score) -values - ('Paul', 100), - ('Leto', 50), - ('Chani', 200); -``` - -Now let's set up a client to read the data, I've created a repl here to show a living example: [https://replit.com/@awalias/supabase-leaderboard-demo#index.js](https://replit.com/@awalias/supabase-leaderboard-demo#index.js). If you copy the snippet you can plug in your own Supabase URL and anon key. - -You can see that it's possible to freely read from and write to the table by using: - -```js -// Writing -let { data, error } = await supabase.from('leaderboard').insert({ name: 'Bob', score: 99999 }) - -// Reading -let { data, error } = await supabase - .from('leaderboard') - .select('name, score') - .order('score', { ascending: false }) -``` - -Now let's restrict access. We'll start by fully restricting the table. We can do this in the SQL editor by making a query: - -```sql -ALTER TABLE leaderboard ENABLE ROW LEVEL SECURITY; -``` - -or via the Supabase Dashboard, by navigating to Auth > Policies, and clicking the red padlock on the leaderboard table, so that it turns white. - -![Enable row level security in Supabase](/docs/img/auth-deep-dive-2.png) - -You'll notice that reading will return no rows and writing will now fail with an error like: - -```jsx -{ - hint: null, - details: null, - code: '42501', - message: 'new row violates row-level security policy for table "leaderboard"' -} -``` - -Now we need to add a policy to enable reading of the table, for everyone who sends the anon key (JWT) in the `Authorization: Bearer` header. - -In SQL this can be done with: - -```sql -CREATE POLICY anon_read_leaderboard ON leaderboard - FOR SELECT - TO 'anon' - USING (true); -``` - -`anon_read_leaderboard` here is just a name that you choose for your policy. `leaderboard` is the table name. `FOR SELECT` says that we only want this policy to apply for reads (or rather "selects" in SQL). `TO` means that this policy will only apply to the `anon` Postgres role. And finally the rule itself is `true'`, which means it will _allow_ any `selects` to the `anon` user. - -If you'd prefer to use the dashboard to add your policy you can do so by clicking "Add Policy" in the Policies tab and making a policy like this: - -![Add a read only policy in Supabase](/docs/img/auth-deep-dive-2-2.png) - -You should now be able to read from your leaderboard, but will still not be able to write, update, or delete from it, which is exactly what we wanted! - -A quick reminder that you can always use your `service_role` API key to bypass these row level security policies. But be extra careful that you don't leak this key by including it in the client. This can be useful if you're building internal admin tools, or if you need to bulk insert or delete data via the API. - -In the next guide we will look at using Policies in combination with User Accounts, so that you can restrict access to data on a User by User basis: Watch [Part Three: Policies](../../learn/auth-deep-dive/auth-policies) - -### Resources - -- JWT debugger: https://jwt.io/ -- RESTED: https://github.com/RESTEDClient/RESTED - -### 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) -- Sign up for Supabase: [supabase.com/dashboard](https://supabase.com/dashboard) - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/reference/analytics/[...slug].tsx b/apps/docs/pages/reference/analytics/[...slug].tsx deleted file mode 100644 index 3fcf010110ff6..0000000000000 --- a/apps/docs/pages/reference/analytics/[...slug].tsx +++ /dev/null @@ -1,167 +0,0 @@ -import specFile from '~/../../spec/transforms/analytics_v0_openapi_deparsed.json' assert { type: 'json' } -import { gen_v3, enrichedOperation } from '~/lib/refGenerator/helpers' -import { Tabs, CodeBlock } from 'ui' - -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/analytics/config.tsx b/apps/docs/pages/reference/analytics/config.tsx deleted file mode 100644 index ed0c0dc07a6a2..0000000000000 --- a/apps/docs/pages/reference/analytics/config.tsx +++ /dev/null @@ -1,114 +0,0 @@ -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' - -import specFile from '~/../../spec/analytics_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 = ['analytics'] - - const pages = [...introPages] - - // Grab custom markdown intro page files - const allMarkdownDocs = await Promise.all( - pages.map(async (x: any, i) => { - const pathName = `docs/ref/analytics/${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/api/[...slug].tsx b/apps/docs/pages/reference/api/[...slug].tsx deleted file mode 100644 index 1850b2bc2b92c..0000000000000 --- a/apps/docs/pages/reference/api/[...slug].tsx +++ /dev/null @@ -1,24 +0,0 @@ -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) -const libraryPath = '/api' - -export default function Config(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/auth/[...slug].tsx b/apps/docs/pages/reference/auth/[...slug].tsx deleted file mode 100644 index 68603c86b076c..0000000000000 --- a/apps/docs/pages/reference/auth/[...slug].tsx +++ /dev/null @@ -1,167 +0,0 @@ -import { CodeBlock, Tabs } from 'ui' -import specFile from '~/../../spec/transforms/auth_v1_openapi_deparsed.json' assert { type: 'json' } -import { gen_v3 } from '~/lib/refGenerator/helpers' - -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 deleted file mode 100644 index 41b9437f1484a..0000000000000 --- a/apps/docs/pages/reference/auth/config.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import specFile from '~/../../spec/gotrue_v1_config.yaml' assert { type: 'yml' } -import { Parameter } from '~/lib/refGenerator/refTypes' -import ReactMarkdown from 'react-markdown' -import Head from 'next/head' - -// Parameters are grouped on the page by tag -const TAGS = ['general'] - -export default function Config() { - return ( - <> - - Auth config - -
    -
    -
    -

    {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 deleted file mode 100644 index 77aeb32c11030..0000000000000 --- a/apps/docs/pages/reference/cli/[...slug].tsx +++ /dev/null @@ -1,23 +0,0 @@ -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) -const libraryPath = '/cli' - -export default function CliRef(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/csharp/[...slug].tsx b/apps/docs/pages/reference/csharp/[...slug].tsx deleted file mode 100644 index 7663a67ca867d..0000000000000 --- a/apps/docs/pages/reference/csharp/[...slug].tsx +++ /dev/null @@ -1,21 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import spec from '~/../../spec/supabase_csharp_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) -const libraryPath = '/csharp' - -export default function CSharpReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx b/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx deleted file mode 100644 index 4aa2010fc26f5..0000000000000 --- a/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx +++ /dev/null @@ -1,44 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -import spec from '~/../../spec/supabase_csharp_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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/csharp' - -export default function CSharpReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/csharp/v0/[...slug].tsx b/apps/docs/pages/reference/csharp/v0/[...slug].tsx deleted file mode 100644 index c55c751c354d4..0000000000000 --- a/apps/docs/pages/reference/csharp/v0/[...slug].tsx +++ /dev/null @@ -1,21 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import spec from '~/../../spec/supabase_csharp_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) -const libraryPath = '/csharp/v0' - -export default function CSharpReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx deleted file mode 100644 index 3777e16ec70f2..0000000000000 --- a/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx +++ /dev/null @@ -1,43 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -import spec from '~/../../spec/supabase_csharp_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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/csharp/v0' - -export default function JSReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/dart/[...slug].tsx b/apps/docs/pages/reference/dart/[...slug].tsx deleted file mode 100644 index fb39f9d64ccbd..0000000000000 --- a/apps/docs/pages/reference/dart/[...slug].tsx +++ /dev/null @@ -1,21 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -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) -const libraryPath = '/dart' - -export default function DartReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/dart/crawlers/[...slug].tsx b/apps/docs/pages/reference/dart/crawlers/[...slug].tsx deleted file mode 100644 index 21c5d52b18ae7..0000000000000 --- a/apps/docs/pages/reference/dart/crawlers/[...slug].tsx +++ /dev/null @@ -1,44 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/dart' - -export default function DartReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.slug === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/dart/v0/[...slug].tsx b/apps/docs/pages/reference/dart/v0/[...slug].tsx deleted file mode 100644 index 86af70c75c8ea..0000000000000 --- a/apps/docs/pages/reference/dart/v0/[...slug].tsx +++ /dev/null @@ -1,29 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -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) -const libraryPath = '/dart/v0' - -export default function JSReference(props) { - return ( - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx deleted file mode 100644 index f43ccb6a73292..0000000000000 --- a/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx +++ /dev/null @@ -1,43 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/dart/v0' - -export default function DartReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.slug === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/index.mdx b/apps/docs/pages/reference/index.mdx deleted file mode 100644 index f6eeec0d70a70..0000000000000 --- a/apps/docs/pages/reference/index.mdx +++ /dev/null @@ -1,79 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { - id: 'reference', - title: 'Reference Documentation', - sidebar_label: 'Reference Documentation', - hide_table_of_contents: true, -} - -Reference documentation for the official Supabase client libraries, APIs, and tools. - -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    - -
    -
    - -## Self-hosting - -Reference documentation for self-hosting Supabase features. - -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    - -export const Page = ({ children }) => - -export default Page diff --git a/apps/docs/pages/reference/javascript/[...slug].tsx b/apps/docs/pages/reference/javascript/[...slug].tsx deleted file mode 100644 index f8cba67d8b9c6..0000000000000 --- a/apps/docs/pages/reference/javascript/[...slug].tsx +++ /dev/null @@ -1,30 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -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' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/javascript' - -export default function JSReference(props) { - return ( - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx b/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx deleted file mode 100644 index 15bc700d40f4e..0000000000000 --- a/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx +++ /dev/null @@ -1,44 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/javascript' - -export default function JSReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.slug === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/javascript/v1/[...slug].tsx b/apps/docs/pages/reference/javascript/v1/[...slug].tsx deleted file mode 100644 index 3fb14627bfe41..0000000000000 --- a/apps/docs/pages/reference/javascript/v1/[...slug].tsx +++ /dev/null @@ -1,31 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v1/combined.json' -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) -const libraryPath = '/javascript/v1' - -export default function JSReference(props) { - return ( - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx b/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx deleted file mode 100644 index 37fb218f80483..0000000000000 --- a/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx +++ /dev/null @@ -1,44 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/javascript/v1' - -export default function JSReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.slug === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/kotlin/[...slug].tsx b/apps/docs/pages/reference/kotlin/[...slug].tsx deleted file mode 100644 index dfce2170a7b9f..0000000000000 --- a/apps/docs/pages/reference/kotlin/[...slug].tsx +++ /dev/null @@ -1,21 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import spec from '~/../../spec/supabase_kt_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) -const libraryPath = '/kotlin' - -export default function KotlinReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/kotlin/crawlers/[...slug].tsx b/apps/docs/pages/reference/kotlin/crawlers/[...slug].tsx deleted file mode 100644 index e6a69bf155fb1..0000000000000 --- a/apps/docs/pages/reference/kotlin/crawlers/[...slug].tsx +++ /dev/null @@ -1,44 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -import spec from '~/../../spec/supabase_kt_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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/kotlin' - -export default function KotlinReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/kotlin/v0/[...slug].tsx b/apps/docs/pages/reference/kotlin/v0/[...slug].tsx deleted file mode 100644 index 81ec54b2efefa..0000000000000 --- a/apps/docs/pages/reference/kotlin/v0/[...slug].tsx +++ /dev/null @@ -1,21 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import spec from '~/../../spec/supabase_kt_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) -const libraryPath = '/kotlin/v0' - -export default function KotlinReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/kotlin/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/kotlin/v0/crawlers/[...slug].tsx deleted file mode 100644 index 0bb3a187cc3ac..0000000000000 --- a/apps/docs/pages/reference/kotlin/v0/crawlers/[...slug].tsx +++ /dev/null @@ -1,43 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -import spec from '~/../../spec/supabase_kt_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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/kotlin/v0' - -export default function KotlinReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/python/[...slug].tsx b/apps/docs/pages/reference/python/[...slug].tsx deleted file mode 100644 index 708880602dc66..0000000000000 --- a/apps/docs/pages/reference/python/[...slug].tsx +++ /dev/null @@ -1,30 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -import spec from '~/../../spec/supabase_py_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' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/python' - -export default function PyReference(props) { - return ( - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/python/crawlers/[...slug].tsx b/apps/docs/pages/reference/python/crawlers/[...slug].tsx deleted file mode 100644 index 9c1062483db00..0000000000000 --- a/apps/docs/pages/reference/python/crawlers/[...slug].tsx +++ /dev/null @@ -1,44 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -import spec from '~/../../spec/supabase_py_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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/python' - -export default function PyReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/realtime/config.tsx b/apps/docs/pages/reference/realtime/config.tsx deleted file mode 100644 index aab317af44dea..0000000000000 --- a/apps/docs/pages/reference/realtime/config.tsx +++ /dev/null @@ -1,114 +0,0 @@ -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' - -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-analytics/[...slug].tsx b/apps/docs/pages/reference/self-hosting-analytics/[...slug].tsx deleted file mode 100644 index cafb0359aacc0..0000000000000 --- a/apps/docs/pages/reference/self-hosting-analytics/[...slug].tsx +++ /dev/null @@ -1,25 +0,0 @@ -import analyticsSpec from '~/../../spec/transforms/analytics_v0_openapi_deparsed.json' assert { type: 'json' } -import selfHostingAnalyticsCommonSections from '~/../../spec/common-self-hosting-analytics-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(selfHostingAnalyticsCommonSections) -const libraryPath = '/self-hosting-analytics' - -// @ts-ignore -const spec = gen_v3(analyticsSpec, 'wat', { apiUrl: 'apiv0' }) - -export default function SelfHostAnalyticsReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/self-hosting-auth/[...slug].tsx b/apps/docs/pages/reference/self-hosting-auth/[...slug].tsx deleted file mode 100644 index c2c58cd7dbe2c..0000000000000 --- a/apps/docs/pages/reference/self-hosting-auth/[...slug].tsx +++ /dev/null @@ -1,25 +0,0 @@ -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) -const libraryPath = '/self-hosting-auth' - -// @ts-ignore -const spec = gen_v3(authSpec, 'wat', { apiUrl: 'apiv0' }) - -export default function SelfHostAuthReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/self-hosting-functions/[...slug].tsx b/apps/docs/pages/reference/self-hosting-functions/[...slug].tsx deleted file mode 100644 index 97e10d09a185e..0000000000000 --- a/apps/docs/pages/reference/self-hosting-functions/[...slug].tsx +++ /dev/null @@ -1,22 +0,0 @@ -import selfHostingFunctionsCommonSections from '~/../../spec/common-self-hosting-functions-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(selfHostingFunctionsCommonSections) -const libraryPath = '/self-hosting-functions' - -export default function SelfHostFunctionsReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/self-hosting-realtime/[...slug].tsx b/apps/docs/pages/reference/self-hosting-realtime/[...slug].tsx deleted file mode 100644 index fbfec623fd2a0..0000000000000 --- a/apps/docs/pages/reference/self-hosting-realtime/[...slug].tsx +++ /dev/null @@ -1,21 +0,0 @@ -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' - -const sections = flattenSections(selfHostingRealtimeCommonSections) -const libraryPath = '/self-hosting-realtime' - -export default function SelfHostRealtimeReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/self-hosting-storage/[...slug].tsx b/apps/docs/pages/reference/self-hosting-storage/[...slug].tsx deleted file mode 100644 index 6db23fa3a3388..0000000000000 --- a/apps/docs/pages/reference/self-hosting-storage/[...slug].tsx +++ /dev/null @@ -1,25 +0,0 @@ -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) -const libraryPath = '/self-hosting-storage' - -// @ts-ignore -const spec = gen_v3(storageSpec, 'wat', { apiUrl: 'apiv0' }) - -export default function SelfHostStorageReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/storage/[...slug].tsx b/apps/docs/pages/reference/storage/[...slug].tsx deleted file mode 100644 index bfd42d2719a60..0000000000000 --- a/apps/docs/pages/reference/storage/[...slug].tsx +++ /dev/null @@ -1,161 +0,0 @@ -import { CodeBlock, Tabs } from 'ui' -import specFile from '~/../../spec/transforms/storage_v0_openapi_deparsed.json' assert { type: 'json' } -import { gen_v3 } from '~/lib/refGenerator/helpers' - -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 deleted file mode 100644 index 94dee5d9e5583..0000000000000 --- a/apps/docs/pages/reference/storage/config.tsx +++ /dev/null @@ -1,68 +0,0 @@ -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/reference/swift/[...slug].tsx b/apps/docs/pages/reference/swift/[...slug].tsx deleted file mode 100644 index c084744e8ab8a..0000000000000 --- a/apps/docs/pages/reference/swift/[...slug].tsx +++ /dev/null @@ -1,21 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import spec from '~/../../spec/supabase_swift_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) -const libraryPath = '/swift' - -export default function SwiftReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/swift/crawlers/[...slug].tsx b/apps/docs/pages/reference/swift/crawlers/[...slug].tsx deleted file mode 100644 index 4c848be8b09d5..0000000000000 --- a/apps/docs/pages/reference/swift/crawlers/[...slug].tsx +++ /dev/null @@ -1,44 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -import spec from '~/../../spec/supabase_swift_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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/swift' - -export default function SwiftReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/swift/v0/[...slug].tsx b/apps/docs/pages/reference/swift/v0/[...slug].tsx deleted file mode 100644 index 4abf2725ad924..0000000000000 --- a/apps/docs/pages/reference/swift/v0/[...slug].tsx +++ /dev/null @@ -1,21 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import spec from '~/../../spec/supabase_swift_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) -const libraryPath = '/swift/v0' - -export default function SwiftReference(props) { - return -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/pages/reference/swift/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/swift/v0/crawlers/[...slug].tsx deleted file mode 100644 index d2172b6e739ad..0000000000000 --- a/apps/docs/pages/reference/swift/v0/crawlers/[...slug].tsx +++ /dev/null @@ -1,43 +0,0 @@ -import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' -import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' -import spec from '~/../../spec/supabase_swift_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' -import RefSEO from '~/components/reference/RefSEO' - -const sections = flattenSections(clientLibsCommonSections) -const libraryPath = '/swift/v0' - -export default function SwiftReference(props) { - const router = useRouter() - const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) - - const pageTitle = filteredSection[0]?.title - ? `${filteredSection[0]?.title} | Supabase` - : 'Supabase' - return ( - <> - - - - - ) -} - -export async function getStaticProps() { - return handleRefStaticProps(sections, libraryPath) -} - -export async function getStaticPaths() { - return handleRefGetStaticPaths(sections) -} diff --git a/apps/docs/postcss.config.js b/apps/docs/postcss.config.js deleted file mode 100644 index 29c447cb54b69..0000000000000 --- a/apps/docs/postcss.config.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('config/postcss.config') diff --git a/apps/docs/public/.well-known/security.txt b/apps/docs/public/.well-known/security.txt deleted file mode 100644 index 9b50057f0c729..0000000000000 --- a/apps/docs/public/.well-known/security.txt +++ /dev/null @@ -1,39 +0,0 @@ -Contact: security@supabase.io -Canonical: https://supabase.com/.well-known/security.txt - - -At Supabase, we consider the security of our systems a top priority. But no matter how much effort we put into system security, there can still be vulnerabilities present. - -If you discover a vulnerability, we would like to know about it so we can take steps to address it as quickly as possible. We would like to ask you to help us better protect our clients and our systems. - -Out of scope vulnerabilities: - -- Clickjacking on pages with no sensitive actions. -- Unauthenticated/logout/login CSRF. -- Attacks requiring MITM or physical access to a user's device. -- Any activity that could lead to the disruption of our service (DoS). -- Content spoofing and text injection issues without showing an attack vector/without being able to modify HTML/CSS. -- Email spoofing -- Missing DNSSEC, CAA, CSP headers -- Lack of Secure or HTTP only flag on non-sensitive cookies -- Deadlinks -- User enumeration - -Please do the following: - -- E-mail your findings to security@supabase.io. -- Do not run automated scanners on our infrastructure or dashboard. If you wish to do this, contact us and we will set up a sandbox for you. -- Do not take advantage of the vulnerability or problem you have discovered, for example by downloading more data than necessary to demonstrate the vulnerability or deleting or modifying other people's data, -- Do not reveal the problem to others until it has been resolved, -- Do not use attacks on physical security, social engineering, distributed denial of service, spam or applications of third parties, and -- Do provide sufficient information to reproduce the problem, so we will be able to resolve it as quickly as possible. Usually, the IP address or the URL of the affected system and a description of the vulnerability will be sufficient, but complex vulnerabilities may require further explanation. - -What we promise: - -- We will respond to your report within 3 business days with our evaluation of the report and an expected resolution date, -- If you have followed the instructions above, we will not take any legal action against you in regard to the report, -- We will handle your report with strict confidentiality, and not pass on your personal details to third parties without your permission, -- We will keep you informed of the progress towards resolving the problem, -- In the public information concerning the problem reported, we will give your name as the discoverer of the problem (unless you desire otherwise), and - -We strive to resolve all problems as quickly as possible, and we would like to play an active role in the ultimate publication on the problem after it is resolved. diff --git a/apps/docs/public/archive/supabase-dark-lw8.svg b/apps/docs/public/archive/supabase-dark-lw8.svg deleted file mode 100644 index 020bdceabf4c9..0000000000000 --- a/apps/docs/public/archive/supabase-dark-lw8.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/archive/supabase-light-lw8.svg b/apps/docs/public/archive/supabase-light-lw8.svg deleted file mode 100644 index 7640c30020cb8..0000000000000 --- a/apps/docs/public/archive/supabase-light-lw8.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/favicon/android-chrome-192x192.png b/apps/docs/public/favicon/android-chrome-192x192.png deleted file mode 100644 index c0ac2bb1cdbac..0000000000000 Binary files a/apps/docs/public/favicon/android-chrome-192x192.png and /dev/null differ diff --git a/apps/docs/public/favicon/android-chrome-512x512.png b/apps/docs/public/favicon/android-chrome-512x512.png deleted file mode 100644 index 1bdeaa23bb899..0000000000000 Binary files a/apps/docs/public/favicon/android-chrome-512x512.png and /dev/null differ diff --git a/apps/docs/public/favicon/android-icon-144x144.png b/apps/docs/public/favicon/android-icon-144x144.png deleted file mode 100644 index 4aa46d4d25d14..0000000000000 Binary files a/apps/docs/public/favicon/android-icon-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/android-icon-192x192.png b/apps/docs/public/favicon/android-icon-192x192.png deleted file mode 100644 index 7583d2035e348..0000000000000 Binary files a/apps/docs/public/favicon/android-icon-192x192.png and /dev/null differ diff --git a/apps/docs/public/favicon/android-icon-36x36.png b/apps/docs/public/favicon/android-icon-36x36.png deleted file mode 100644 index 5e4eabec411ba..0000000000000 Binary files a/apps/docs/public/favicon/android-icon-36x36.png and /dev/null differ diff --git a/apps/docs/public/favicon/android-icon-48x48.png b/apps/docs/public/favicon/android-icon-48x48.png deleted file mode 100644 index f8d8a7d9c05ac..0000000000000 Binary files a/apps/docs/public/favicon/android-icon-48x48.png and /dev/null differ diff --git a/apps/docs/public/favicon/android-icon-72x72.png b/apps/docs/public/favicon/android-icon-72x72.png deleted file mode 100644 index e4418058cef5f..0000000000000 Binary files a/apps/docs/public/favicon/android-icon-72x72.png and /dev/null differ diff --git a/apps/docs/public/favicon/android-icon-96x96.png b/apps/docs/public/favicon/android-icon-96x96.png deleted file mode 100644 index 0f1351f3670ee..0000000000000 Binary files a/apps/docs/public/favicon/android-icon-96x96.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon-114x114.png b/apps/docs/public/favicon/apple-icon-114x114.png deleted file mode 100644 index 4aa46d4d25d14..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon-114x114.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon-120x120.png b/apps/docs/public/favicon/apple-icon-120x120.png deleted file mode 100644 index d2b0e50ef41fc..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon-120x120.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon-144x144.png b/apps/docs/public/favicon/apple-icon-144x144.png deleted file mode 100644 index 00a5d8b51800f..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon-152x152.png b/apps/docs/public/favicon/apple-icon-152x152.png deleted file mode 100644 index 310532c4648a5..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon-152x152.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon-180x180.png b/apps/docs/public/favicon/apple-icon-180x180.png deleted file mode 100644 index 2a80dbc2f684e..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon-180x180.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon-57x57.png b/apps/docs/public/favicon/apple-icon-57x57.png deleted file mode 100644 index e7b08eb605f67..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon-57x57.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon-60x60.png b/apps/docs/public/favicon/apple-icon-60x60.png deleted file mode 100644 index 0615675e8098a..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon-60x60.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon-72x72.png b/apps/docs/public/favicon/apple-icon-72x72.png deleted file mode 100644 index e4418058cef5f..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon-72x72.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon-76x76.png b/apps/docs/public/favicon/apple-icon-76x76.png deleted file mode 100644 index 9a76327f94bed..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon-76x76.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon-precomposed.png b/apps/docs/public/favicon/apple-icon-precomposed.png deleted file mode 100644 index 7583d2035e348..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon-precomposed.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-icon.png b/apps/docs/public/favicon/apple-icon.png deleted file mode 100644 index 7583d2035e348..0000000000000 Binary files a/apps/docs/public/favicon/apple-icon.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-114x114.png b/apps/docs/public/favicon/apple-touch-icon-114x114.png deleted file mode 100644 index 4aa46d4d25d14..0000000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-114x114.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-120x120.png b/apps/docs/public/favicon/apple-touch-icon-120x120.png deleted file mode 100644 index d2b0e50ef41fc..0000000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-120x120.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-144x144.png b/apps/docs/public/favicon/apple-touch-icon-144x144.png deleted file mode 100644 index 00a5d8b51800f..0000000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-152x152.png b/apps/docs/public/favicon/apple-touch-icon-152x152.png deleted file mode 100644 index 310532c4648a5..0000000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-152x152.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-57x57.png b/apps/docs/public/favicon/apple-touch-icon-57x57.png deleted file mode 100644 index 1314e02c74486..0000000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-57x57.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-60x60.png b/apps/docs/public/favicon/apple-touch-icon-60x60.png deleted file mode 100644 index 0615675e8098a..0000000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-60x60.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-72x72.png b/apps/docs/public/favicon/apple-touch-icon-72x72.png deleted file mode 100644 index e4418058cef5f..0000000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-72x72.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-76x76.png b/apps/docs/public/favicon/apple-touch-icon-76x76.png deleted file mode 100644 index 9a76327f94bed..0000000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-76x76.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/android-chrome-192x192.png b/apps/docs/public/favicon/archive/lw7/android-chrome-192x192.png deleted file mode 100644 index f0a2817a744e0..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/android-chrome-192x192.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/android-chrome-512x512.png b/apps/docs/public/favicon/archive/lw7/android-chrome-512x512.png deleted file mode 100644 index 1c658733e6ecc..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/android-chrome-512x512.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-114x114.png b/apps/docs/public/favicon/archive/lw7/apple-touch-icon-114x114.png deleted file mode 100644 index d2ee4b9e139b2..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-114x114.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-120x120.png b/apps/docs/public/favicon/archive/lw7/apple-touch-icon-120x120.png deleted file mode 100644 index 5bd0e4963a182..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-120x120.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-144x144.png b/apps/docs/public/favicon/archive/lw7/apple-touch-icon-144x144.png deleted file mode 100644 index c73891c985d9b..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-152x152.png b/apps/docs/public/favicon/archive/lw7/apple-touch-icon-152x152.png deleted file mode 100644 index 65f90a02357a0..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-152x152.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-57x57.png b/apps/docs/public/favicon/archive/lw7/apple-touch-icon-57x57.png deleted file mode 100644 index bfa1628afb577..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-57x57.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-60x60.png b/apps/docs/public/favicon/archive/lw7/apple-touch-icon-60x60.png deleted file mode 100644 index 15c5dca800530..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-60x60.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-72x72.png b/apps/docs/public/favicon/archive/lw7/apple-touch-icon-72x72.png deleted file mode 100644 index fb0c4fb3663b0..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-72x72.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-76x76.png b/apps/docs/public/favicon/archive/lw7/apple-touch-icon-76x76.png deleted file mode 100644 index 7d950f0862e86..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/apple-touch-icon-76x76.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/favicon-128.png b/apps/docs/public/favicon/archive/lw7/favicon-128.png deleted file mode 100644 index 2206096f21ba8..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/favicon-128.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/favicon-16x16.png b/apps/docs/public/favicon/archive/lw7/favicon-16x16.png deleted file mode 100644 index 2e07b15e1066b..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/favicon-16x16.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/favicon-196x196.png b/apps/docs/public/favicon/archive/lw7/favicon-196x196.png deleted file mode 100644 index d10fc7e36d92f..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/favicon-196x196.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/favicon-32x32.png b/apps/docs/public/favicon/archive/lw7/favicon-32x32.png deleted file mode 100644 index 4101a08499b9b..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/favicon-32x32.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/favicon-96x96.png b/apps/docs/public/favicon/archive/lw7/favicon-96x96.png deleted file mode 100644 index b23072a2c0252..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/favicon-96x96.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/favicon.ico b/apps/docs/public/favicon/archive/lw7/favicon.ico deleted file mode 100644 index 51b9988fdcb38..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/favicon.ico and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/mstile-144x144.png b/apps/docs/public/favicon/archive/lw7/mstile-144x144.png deleted file mode 100644 index c73891c985d9b..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/mstile-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/mstile-150x150.png b/apps/docs/public/favicon/archive/lw7/mstile-150x150.png deleted file mode 100644 index bd10ae0a5df93..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/mstile-150x150.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/mstile-310x150.png b/apps/docs/public/favicon/archive/lw7/mstile-310x150.png deleted file mode 100644 index fb4d58022df13..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/mstile-310x150.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/mstile-310x310.png b/apps/docs/public/favicon/archive/lw7/mstile-310x310.png deleted file mode 100644 index 0adc45ea0ac58..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/mstile-310x310.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw7/mstile-70x70.png b/apps/docs/public/favicon/archive/lw7/mstile-70x70.png deleted file mode 100644 index 2206096f21ba8..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw7/mstile-70x70.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/android-icon-144x144.png b/apps/docs/public/favicon/archive/lw8/android-icon-144x144.png deleted file mode 100644 index e34cdc489bf81..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/android-icon-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/android-icon-192x192.png b/apps/docs/public/favicon/archive/lw8/android-icon-192x192.png deleted file mode 100644 index 3779f7008a488..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/android-icon-192x192.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/android-icon-36x36.png b/apps/docs/public/favicon/archive/lw8/android-icon-36x36.png deleted file mode 100644 index 620f828d76760..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/android-icon-36x36.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/android-icon-48x48.png b/apps/docs/public/favicon/archive/lw8/android-icon-48x48.png deleted file mode 100644 index 0918c9d5a5f61..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/android-icon-48x48.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/android-icon-72x72.png b/apps/docs/public/favicon/archive/lw8/android-icon-72x72.png deleted file mode 100644 index 83dfc47bd2189..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/android-icon-72x72.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/android-icon-96x96.png b/apps/docs/public/favicon/archive/lw8/android-icon-96x96.png deleted file mode 100644 index 5f1fda3408601..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/android-icon-96x96.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon-114x114.png b/apps/docs/public/favicon/archive/lw8/apple-icon-114x114.png deleted file mode 100644 index f32fa5c91e5ed..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon-114x114.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon-120x120.png b/apps/docs/public/favicon/archive/lw8/apple-icon-120x120.png deleted file mode 100644 index f740816a8891b..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon-120x120.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon-144x144.png b/apps/docs/public/favicon/archive/lw8/apple-icon-144x144.png deleted file mode 100644 index e34cdc489bf81..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon-152x152.png b/apps/docs/public/favicon/archive/lw8/apple-icon-152x152.png deleted file mode 100644 index 07dbf228a9a49..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon-152x152.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon-180x180.png b/apps/docs/public/favicon/archive/lw8/apple-icon-180x180.png deleted file mode 100644 index bf1bfbf7f005e..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon-180x180.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon-57x57.png b/apps/docs/public/favicon/archive/lw8/apple-icon-57x57.png deleted file mode 100644 index e24842ebed2dc..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon-57x57.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon-60x60.png b/apps/docs/public/favicon/archive/lw8/apple-icon-60x60.png deleted file mode 100644 index 7075a8eb8c5f8..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon-60x60.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon-72x72.png b/apps/docs/public/favicon/archive/lw8/apple-icon-72x72.png deleted file mode 100644 index 83dfc47bd2189..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon-72x72.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon-76x76.png b/apps/docs/public/favicon/archive/lw8/apple-icon-76x76.png deleted file mode 100644 index 283e804eee7c6..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon-76x76.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon-precomposed.png b/apps/docs/public/favicon/archive/lw8/apple-icon-precomposed.png deleted file mode 100644 index 7d55e102305d9..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon-precomposed.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/apple-icon.png b/apps/docs/public/favicon/archive/lw8/apple-icon.png deleted file mode 100644 index 7d55e102305d9..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/apple-icon.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/favicon-16x16.png b/apps/docs/public/favicon/archive/lw8/favicon-16x16.png deleted file mode 100644 index 9dc90100bf3a0..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/favicon-16x16.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/favicon-32x32.png b/apps/docs/public/favicon/archive/lw8/favicon-32x32.png deleted file mode 100644 index b8fd7965f93fe..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/favicon-32x32.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/favicon-96x96.png b/apps/docs/public/favicon/archive/lw8/favicon-96x96.png deleted file mode 100644 index 408eebc96d7fe..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/favicon-96x96.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/favicon.ico b/apps/docs/public/favicon/archive/lw8/favicon.ico deleted file mode 100644 index 97615df1d2d84..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/favicon.ico and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/ms-icon-144x144.png b/apps/docs/public/favicon/archive/lw8/ms-icon-144x144.png deleted file mode 100644 index bcbff0884b11d..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/ms-icon-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/ms-icon-150x150.png b/apps/docs/public/favicon/archive/lw8/ms-icon-150x150.png deleted file mode 100644 index c61ccd6bc0288..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/ms-icon-150x150.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/ms-icon-310x310.png b/apps/docs/public/favicon/archive/lw8/ms-icon-310x310.png deleted file mode 100644 index 474d2d508f49a..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/ms-icon-310x310.png and /dev/null differ diff --git a/apps/docs/public/favicon/archive/lw8/ms-icon-70x70.png b/apps/docs/public/favicon/archive/lw8/ms-icon-70x70.png deleted file mode 100644 index c0f3a66542c19..0000000000000 Binary files a/apps/docs/public/favicon/archive/lw8/ms-icon-70x70.png and /dev/null differ diff --git a/apps/docs/public/favicon/browserconfig.xml b/apps/docs/public/favicon/browserconfig.xml deleted file mode 100644 index c554148223007..0000000000000 --- a/apps/docs/public/favicon/browserconfig.xml +++ /dev/null @@ -1,2 +0,0 @@ - -#ffffff \ No newline at end of file diff --git a/apps/docs/public/favicon/favicon-128.png b/apps/docs/public/favicon/favicon-128.png deleted file mode 100644 index d5dca345802bb..0000000000000 Binary files a/apps/docs/public/favicon/favicon-128.png and /dev/null differ diff --git a/apps/docs/public/favicon/favicon-16x16.png b/apps/docs/public/favicon/favicon-16x16.png deleted file mode 100644 index fa07282ee8dae..0000000000000 Binary files a/apps/docs/public/favicon/favicon-16x16.png and /dev/null differ diff --git a/apps/docs/public/favicon/favicon-196x196.png b/apps/docs/public/favicon/favicon-196x196.png deleted file mode 100644 index adb05b4345395..0000000000000 Binary files a/apps/docs/public/favicon/favicon-196x196.png and /dev/null differ diff --git a/apps/docs/public/favicon/favicon-32x32.png b/apps/docs/public/favicon/favicon-32x32.png deleted file mode 100644 index 7fa29c547a657..0000000000000 Binary files a/apps/docs/public/favicon/favicon-32x32.png and /dev/null differ diff --git a/apps/docs/public/favicon/favicon-96x96.png b/apps/docs/public/favicon/favicon-96x96.png deleted file mode 100644 index 0f1351f3670ee..0000000000000 Binary files a/apps/docs/public/favicon/favicon-96x96.png and /dev/null differ diff --git a/apps/docs/public/favicon/favicon.ico b/apps/docs/public/favicon/favicon.ico deleted file mode 100644 index 5c4d1dcc5cf13..0000000000000 Binary files a/apps/docs/public/favicon/favicon.ico and /dev/null differ diff --git a/apps/docs/public/favicon/manifest.json b/apps/docs/public/favicon/manifest.json deleted file mode 100644 index 3b557aab8c689..0000000000000 --- a/apps/docs/public/favicon/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "App", - "icons": [ - { - "src": "/android-icon-36x36.png", - "sizes": "36x36", - "type": "image/png", - "density": "0.75" - }, - { - "src": "/android-icon-48x48.png", - "sizes": "48x48", - "type": "image/png", - "density": "1.0" - }, - { - "src": "/android-icon-72x72.png", - "sizes": "72x72", - "type": "image/png", - "density": "1.5" - }, - { - "src": "/android-icon-96x96.png", - "sizes": "96x96", - "type": "image/png", - "density": "2.0" - }, - { - "src": "/android-icon-144x144.png", - "sizes": "144x144", - "type": "image/png", - "density": "3.0" - }, - { - "src": "/android-icon-192x192.png", - "sizes": "192x192", - "type": "image/png", - "density": "4.0" - } - ] -} diff --git a/apps/docs/public/favicon/ms-icon-144x144.png b/apps/docs/public/favicon/ms-icon-144x144.png deleted file mode 100644 index 00a5d8b51800f..0000000000000 Binary files a/apps/docs/public/favicon/ms-icon-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/ms-icon-150x150.png b/apps/docs/public/favicon/ms-icon-150x150.png deleted file mode 100644 index 4de1d9b1cc18a..0000000000000 Binary files a/apps/docs/public/favicon/ms-icon-150x150.png and /dev/null differ diff --git a/apps/docs/public/favicon/ms-icon-310x310.png b/apps/docs/public/favicon/ms-icon-310x310.png deleted file mode 100644 index 7ea95ae09c073..0000000000000 Binary files a/apps/docs/public/favicon/ms-icon-310x310.png and /dev/null differ diff --git a/apps/docs/public/favicon/ms-icon-70x70.png b/apps/docs/public/favicon/ms-icon-70x70.png deleted file mode 100644 index 48f6391fcdc77..0000000000000 Binary files a/apps/docs/public/favicon/ms-icon-70x70.png and /dev/null differ diff --git a/apps/docs/public/favicon/mstile-144x144.png b/apps/docs/public/favicon/mstile-144x144.png deleted file mode 100644 index 00a5d8b51800f..0000000000000 Binary files a/apps/docs/public/favicon/mstile-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/mstile-150x150.png b/apps/docs/public/favicon/mstile-150x150.png deleted file mode 100644 index 4de1d9b1cc18a..0000000000000 Binary files a/apps/docs/public/favicon/mstile-150x150.png and /dev/null differ diff --git a/apps/docs/public/favicon/mstile-310x150.png b/apps/docs/public/favicon/mstile-310x150.png deleted file mode 100644 index b1121df62aa0a..0000000000000 Binary files a/apps/docs/public/favicon/mstile-310x150.png and /dev/null differ diff --git a/apps/docs/public/favicon/mstile-310x310.png b/apps/docs/public/favicon/mstile-310x310.png deleted file mode 100644 index 7ea95ae09c073..0000000000000 Binary files a/apps/docs/public/favicon/mstile-310x310.png and /dev/null differ diff --git a/apps/docs/public/favicon/mstile-70x70.png b/apps/docs/public/favicon/mstile-70x70.png deleted file mode 100644 index d5dca345802bb..0000000000000 Binary files a/apps/docs/public/favicon/mstile-70x70.png and /dev/null differ diff --git a/apps/docs/public/favicon/site.webmanifest b/apps/docs/public/favicon/site.webmanifest deleted file mode 100644 index c72ae95e89d40..0000000000000 --- a/apps/docs/public/favicon/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Supabase", - "short_name": "Supabase", - "icons": [ - { - "src": "/favicon/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/favicon/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#000000", - "background_color": "#000000", - "display": "standalone" -} diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt deleted file mode 100644 index b3e0a1be0f822..0000000000000 --- a/apps/docs/public/humans.txt +++ /dev/null @@ -1,88 +0,0 @@ -TEAM - -Supabase is 100% remote. - -Alaister Young -Amy Q -Andrew Smith -Angelico de los Reyes -Ant Wilson -Ariuna K -Beng Eu -Bo Lu -Bobbie Soedirgo -Chandana Anumula -Chase Granberry -Chris Copplestone -Chris Gwilliams -Dave Wilson -Div Arora -Divit D -Egor Romanov -Fabrizio Fenoglio -Francesco Sansalvadore -Greg Richardson -Haydn Maley -Hieu Pham -Inian P -Isaiah Hamilton -Jess Shears -Joel Lee -Jon M -Jonny Summers-Muir -Joshen Lim -Kang Ming Tay -Karlo Ison -Kevin Brolly -Kevin Grüneberg -Lakshmipathi G -Laura C -Leo T -Long Hoang -Margarita Sandomirskaia -Marijana Šimag -Mark Burggraf -Michel Pelletier -Mickael Hebert -Monica El Khoury -Nikita Kotlyarov -Oli R -Pamela Chia -Paul Cioanca -Paul Copplestone -Pavel Borisov -Qiao Han -Raminder Singh -Ramiro Nuñez Dosio -Rodrigo Martins Mansueli -Rory Wilding -Sreyas Udayavarman -Stanislav M -Steve Chavez -Stojan Dimitrovski -Terry Sutton -Thor Schaeff -Tyler Shukert -TzeYiing L -Wen Bo Xie -Yuri Santana -____________ - -JOBS - -If you are interested in working with us check out the open roles here: https://supabase.com/careers - -___________ - - -TECHNOLOGIES - -Supabase would not be possible without the work of some other amazing open source contributors. - -- Postgres - https://www.postgresql.org/docs/devel/git.html -- PostgREST - https://github.com/PostgREST -- Kong - https://github.com/kong/ -- Next.js - https://nextjs.org/ -- Tailwind CSS - https://tailwindcss.com/ -- Phoenix - https://www.phoenixframework.org/ -- GoTrue - https://github.com/netlify/gotrue diff --git a/apps/docs/public/img/add-contributor.png b/apps/docs/public/img/add-contributor.png deleted file mode 100644 index a366dc8441114..0000000000000 Binary files a/apps/docs/public/img/add-contributor.png and /dev/null differ diff --git a/apps/docs/public/img/ai/chatgpt-plugins/ask-chatgpt.png b/apps/docs/public/img/ai/chatgpt-plugins/ask-chatgpt.png deleted file mode 100644 index c936d71b68aa7..0000000000000 Binary files a/apps/docs/public/img/ai/chatgpt-plugins/ask-chatgpt.png and /dev/null differ diff --git a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-change-model.png b/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-change-model.png deleted file mode 100644 index 5151367c2919d..0000000000000 Binary files a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-change-model.png and /dev/null differ diff --git a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-local-plugin.png b/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-local-plugin.png deleted file mode 100644 index 7b9a3158130d7..0000000000000 Binary files a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-local-plugin.png and /dev/null differ diff --git a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugin-scheme--dark.png b/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugin-scheme--dark.png deleted file mode 100644 index 261b95b3d28b9..0000000000000 Binary files a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugin-scheme--dark.png and /dev/null differ diff --git a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugin-scheme--light.png b/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugin-scheme--light.png deleted file mode 100644 index a6e7490ffeb1a..0000000000000 Binary files a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugin-scheme--light.png and /dev/null differ diff --git a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugin-store.png b/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugin-store.png deleted file mode 100644 index ecff2df51d408..0000000000000 Binary files a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugin-store.png and /dev/null differ diff --git a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugins-support-postgres.jpeg b/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugins-support-postgres.jpeg deleted file mode 100644 index 535a886b22b50..0000000000000 Binary files a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-plugins-support-postgres.jpeg and /dev/null differ diff --git a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-query.png b/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-query.png deleted file mode 100644 index 08b8553d6d9eb..0000000000000 Binary files a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-query.png and /dev/null differ diff --git a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-reply.png b/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-reply.png deleted file mode 100644 index d3b34a61028c0..0000000000000 Binary files a/apps/docs/public/img/ai/chatgpt-plugins/chatgpt-reply.png and /dev/null differ diff --git a/apps/docs/public/img/ai/chatgpt-plugins/openai-secret-keys.png b/apps/docs/public/img/ai/chatgpt-plugins/openai-secret-keys.png deleted file mode 100644 index e0f2e6e0247e6..0000000000000 Binary files a/apps/docs/public/img/ai/chatgpt-plugins/openai-secret-keys.png and /dev/null differ diff --git a/apps/docs/public/img/ai/colab-badge.svg b/apps/docs/public/img/ai/colab-badge.svg deleted file mode 100644 index e5830d5332975..0000000000000 --- a/apps/docs/public/img/ai/colab-badge.svg +++ /dev/null @@ -1 +0,0 @@ - Open in ColabOpen in Colab diff --git a/apps/docs/public/img/ai/going-prod/lists-count--dark.png b/apps/docs/public/img/ai/going-prod/lists-count--dark.png deleted file mode 100644 index 919b56b4a8cc3..0000000000000 Binary files a/apps/docs/public/img/ai/going-prod/lists-count--dark.png and /dev/null differ diff --git a/apps/docs/public/img/ai/going-prod/lists-count--light.png b/apps/docs/public/img/ai/going-prod/lists-count--light.png deleted file mode 100644 index f40a98500fcb6..0000000000000 Binary files a/apps/docs/public/img/ai/going-prod/lists-count--light.png and /dev/null differ diff --git a/apps/docs/public/img/ai/going-prod/size-to-rps--dark.png b/apps/docs/public/img/ai/going-prod/size-to-rps--dark.png deleted file mode 100644 index 69ab4d76f5164..0000000000000 Binary files a/apps/docs/public/img/ai/going-prod/size-to-rps--dark.png and /dev/null differ diff --git a/apps/docs/public/img/ai/going-prod/size-to-rps--light.png b/apps/docs/public/img/ai/going-prod/size-to-rps--light.png deleted file mode 100644 index b4aaf58e257f6..0000000000000 Binary files a/apps/docs/public/img/ai/going-prod/size-to-rps--light.png and /dev/null differ diff --git a/apps/docs/public/img/ai/google-colab/colab-documents.png b/apps/docs/public/img/ai/google-colab/colab-documents.png deleted file mode 100644 index 95f995ea9714b..0000000000000 Binary files a/apps/docs/public/img/ai/google-colab/colab-documents.png and /dev/null differ diff --git a/apps/docs/public/img/ai/google-colab/colab-new.png b/apps/docs/public/img/ai/google-colab/colab-new.png deleted file mode 100644 index 19d7c09ecdaad..0000000000000 Binary files a/apps/docs/public/img/ai/google-colab/colab-new.png and /dev/null differ diff --git a/apps/docs/public/img/ai/google-colab/colab-results.png b/apps/docs/public/img/ai/google-colab/colab-results.png deleted file mode 100644 index 6fc50dc581899..0000000000000 Binary files a/apps/docs/public/img/ai/google-colab/colab-results.png and /dev/null differ diff --git a/apps/docs/public/img/ai/google-colab/install-vecs.png b/apps/docs/public/img/ai/google-colab/install-vecs.png deleted file mode 100644 index 0126e0e2fa060..0000000000000 Binary files a/apps/docs/public/img/ai/google-colab/install-vecs.png and /dev/null differ diff --git a/apps/docs/public/img/ai/headless-search/headless.png b/apps/docs/public/img/ai/headless-search/headless.png deleted file mode 100644 index f9cbdc0457da1..0000000000000 Binary files a/apps/docs/public/img/ai/headless-search/headless.png and /dev/null differ diff --git a/apps/docs/public/img/ai/hugging-face/llama-sunglasses-example.png b/apps/docs/public/img/ai/hugging-face/llama-sunglasses-example.png deleted file mode 100644 index 6fd4ff5563801..0000000000000 Binary files a/apps/docs/public/img/ai/hugging-face/llama-sunglasses-example.png and /dev/null differ diff --git a/apps/docs/public/img/ai/instance-type/lists-for-1m--dark.png b/apps/docs/public/img/ai/instance-type/lists-for-1m--dark.png deleted file mode 100644 index 713ae4f4459cb..0000000000000 Binary files a/apps/docs/public/img/ai/instance-type/lists-for-1m--dark.png and /dev/null differ diff --git a/apps/docs/public/img/ai/instance-type/lists-for-1m--light.png b/apps/docs/public/img/ai/instance-type/lists-for-1m--light.png deleted file mode 100644 index 2035617093395..0000000000000 Binary files a/apps/docs/public/img/ai/instance-type/lists-for-1m--light.png and /dev/null differ diff --git a/apps/docs/public/img/ai/instance-type/vecs-benchmark--dark.png b/apps/docs/public/img/ai/instance-type/vecs-benchmark--dark.png deleted file mode 100644 index 04f6b44a3cd5a..0000000000000 Binary files a/apps/docs/public/img/ai/instance-type/vecs-benchmark--dark.png and /dev/null differ diff --git a/apps/docs/public/img/ai/instance-type/vecs-benchmark--light.png b/apps/docs/public/img/ai/instance-type/vecs-benchmark--light.png deleted file mode 100644 index 692f3fd065bde..0000000000000 Binary files a/apps/docs/public/img/ai/instance-type/vecs-benchmark--light.png and /dev/null differ diff --git a/apps/docs/public/img/ai/scaling/engineering-for-scale--multi-database--dark.png b/apps/docs/public/img/ai/scaling/engineering-for-scale--multi-database--dark.png deleted file mode 100644 index 95015ff6887db..0000000000000 Binary files a/apps/docs/public/img/ai/scaling/engineering-for-scale--multi-database--dark.png and /dev/null differ diff --git a/apps/docs/public/img/ai/scaling/engineering-for-scale--multi-database--light.png b/apps/docs/public/img/ai/scaling/engineering-for-scale--multi-database--light.png deleted file mode 100644 index 6c04d613605b2..0000000000000 Binary files a/apps/docs/public/img/ai/scaling/engineering-for-scale--multi-database--light.png and /dev/null differ diff --git a/apps/docs/public/img/ai/scaling/engineering-for-scale--single-database--dark.png b/apps/docs/public/img/ai/scaling/engineering-for-scale--single-database--dark.png deleted file mode 100644 index f129af6086ce6..0000000000000 Binary files a/apps/docs/public/img/ai/scaling/engineering-for-scale--single-database--dark.png and /dev/null differ diff --git a/apps/docs/public/img/ai/scaling/engineering-for-scale--single-database--light.png b/apps/docs/public/img/ai/scaling/engineering-for-scale--single-database--light.png deleted file mode 100644 index 3904dc55df727..0000000000000 Binary files a/apps/docs/public/img/ai/scaling/engineering-for-scale--single-database--light.png and /dev/null differ diff --git a/apps/docs/public/img/ai/scaling/engineering-for-scale--with-secondaries--dark.png b/apps/docs/public/img/ai/scaling/engineering-for-scale--with-secondaries--dark.png deleted file mode 100644 index 13ec1f62caf85..0000000000000 Binary files a/apps/docs/public/img/ai/scaling/engineering-for-scale--with-secondaries--dark.png and /dev/null differ diff --git a/apps/docs/public/img/ai/scaling/engineering-for-scale--with-secondaries--light.png b/apps/docs/public/img/ai/scaling/engineering-for-scale--with-secondaries--light.png deleted file mode 100644 index 0fbb415fdb52b..0000000000000 Binary files a/apps/docs/public/img/ai/scaling/engineering-for-scale--with-secondaries--light.png and /dev/null differ diff --git a/apps/docs/public/img/ai/scaling/multi-database.png b/apps/docs/public/img/ai/scaling/multi-database.png deleted file mode 100644 index 7593bc443fd1b..0000000000000 Binary files a/apps/docs/public/img/ai/scaling/multi-database.png and /dev/null differ diff --git a/apps/docs/public/img/ai/scaling/single-database.png b/apps/docs/public/img/ai/scaling/single-database.png deleted file mode 100644 index d48fed75d9c06..0000000000000 Binary files a/apps/docs/public/img/ai/scaling/single-database.png and /dev/null differ diff --git a/apps/docs/public/img/ai/scaling/with-secondaries.png b/apps/docs/public/img/ai/scaling/with-secondaries.png deleted file mode 100644 index 50c3798f7c6ed..0000000000000 Binary files a/apps/docs/public/img/ai/scaling/with-secondaries.png and /dev/null differ diff --git a/apps/docs/public/img/ai/vector-similarity.png b/apps/docs/public/img/ai/vector-similarity.png deleted file mode 100644 index b2282e76f1e11..0000000000000 Binary files a/apps/docs/public/img/ai/vector-similarity.png and /dev/null differ diff --git a/apps/docs/public/img/auth-5-1.png b/apps/docs/public/img/auth-5-1.png deleted file mode 100644 index e90534de2d6a0..0000000000000 Binary files a/apps/docs/public/img/auth-5-1.png and /dev/null differ diff --git a/apps/docs/public/img/auth-5-2.png b/apps/docs/public/img/auth-5-2.png deleted file mode 100644 index 125dbb44a2c13..0000000000000 Binary files a/apps/docs/public/img/auth-5-2.png and /dev/null differ diff --git a/apps/docs/public/img/auth-5-3.png b/apps/docs/public/img/auth-5-3.png deleted file mode 100644 index 143e520df0d3f..0000000000000 Binary files a/apps/docs/public/img/auth-5-3.png and /dev/null differ diff --git a/apps/docs/public/img/auth-5-4.png b/apps/docs/public/img/auth-5-4.png deleted file mode 100644 index 767dadd0c7843..0000000000000 Binary files a/apps/docs/public/img/auth-5-4.png and /dev/null differ diff --git a/apps/docs/public/img/auth-5-5.png b/apps/docs/public/img/auth-5-5.png deleted file mode 100644 index feb332dbe6b3f..0000000000000 Binary files a/apps/docs/public/img/auth-5-5.png and /dev/null differ diff --git a/apps/docs/public/img/auth-5-6.png b/apps/docs/public/img/auth-5-6.png deleted file mode 100644 index c90310a4c068c..0000000000000 Binary files a/apps/docs/public/img/auth-5-6.png and /dev/null differ diff --git a/apps/docs/public/img/auth-5-7.png b/apps/docs/public/img/auth-5-7.png deleted file mode 100644 index a3f259be06ee0..0000000000000 Binary files a/apps/docs/public/img/auth-5-7.png and /dev/null differ diff --git a/apps/docs/public/img/auth-5-8.png b/apps/docs/public/img/auth-5-8.png deleted file mode 100644 index a114192d35815..0000000000000 Binary files a/apps/docs/public/img/auth-5-8.png and /dev/null differ diff --git a/apps/docs/public/img/auth-deep-dive-2-2.png b/apps/docs/public/img/auth-deep-dive-2-2.png deleted file mode 100644 index 0a42cd56c4fb0..0000000000000 Binary files a/apps/docs/public/img/auth-deep-dive-2-2.png and /dev/null differ diff --git a/apps/docs/public/img/auth-deep-dive-2.png b/apps/docs/public/img/auth-deep-dive-2.png deleted file mode 100644 index a874d05491e9c..0000000000000 Binary files a/apps/docs/public/img/auth-deep-dive-2.png and /dev/null differ diff --git a/apps/docs/public/img/b-tree-example.png b/apps/docs/public/img/b-tree-example.png deleted file mode 100644 index b9274c9e43d82..0000000000000 Binary files a/apps/docs/public/img/b-tree-example.png and /dev/null differ diff --git a/apps/docs/public/img/backups-daily-confirmation-modal.png b/apps/docs/public/img/backups-daily-confirmation-modal.png deleted file mode 100644 index e340cb7d738e4..0000000000000 Binary files a/apps/docs/public/img/backups-daily-confirmation-modal.png and /dev/null differ diff --git a/apps/docs/public/img/backups-daily-dashboard.png b/apps/docs/public/img/backups-daily-dashboard.png deleted file mode 100644 index b6f3b03d443f2..0000000000000 Binary files a/apps/docs/public/img/backups-daily-dashboard.png and /dev/null differ diff --git a/apps/docs/public/img/backups-pitr-calendar-view.png b/apps/docs/public/img/backups-pitr-calendar-view.png deleted file mode 100644 index 1a4b585b515a9..0000000000000 Binary files a/apps/docs/public/img/backups-pitr-calendar-view.png and /dev/null differ diff --git a/apps/docs/public/img/backups-pitr-confirmation-modal.png b/apps/docs/public/img/backups-pitr-confirmation-modal.png deleted file mode 100644 index a365164ef1458..0000000000000 Binary files a/apps/docs/public/img/backups-pitr-confirmation-modal.png and /dev/null differ diff --git a/apps/docs/public/img/backups-pitr-dashboard.png b/apps/docs/public/img/backups-pitr-dashboard.png deleted file mode 100644 index 4d68ad5f27f24..0000000000000 Binary files a/apps/docs/public/img/backups-pitr-dashboard.png and /dev/null differ diff --git a/apps/docs/public/img/blog/auth-audit.png b/apps/docs/public/img/blog/auth-audit.png deleted file mode 100644 index 29a2f3a51ce4e..0000000000000 Binary files a/apps/docs/public/img/blog/auth-audit.png and /dev/null differ diff --git a/apps/docs/public/img/blog/auth-azure-and-facebook.png b/apps/docs/public/img/blog/auth-azure-and-facebook.png deleted file mode 100644 index 560fb160a49a8..0000000000000 Binary files a/apps/docs/public/img/blog/auth-azure-and-facebook.png and /dev/null differ diff --git a/apps/docs/public/img/blog/auth-widget.png b/apps/docs/public/img/blog/auth-widget.png deleted file mode 100644 index 64ebd80d30127..0000000000000 Binary files a/apps/docs/public/img/blog/auth-widget.png and /dev/null differ diff --git a/apps/docs/public/img/blog/core-web-vitals.png b/apps/docs/public/img/blog/core-web-vitals.png deleted file mode 100644 index 748e1d63c16f6..0000000000000 Binary files a/apps/docs/public/img/blog/core-web-vitals.png and /dev/null differ diff --git a/apps/docs/public/img/blog/countries.gif b/apps/docs/public/img/blog/countries.gif deleted file mode 100644 index 7ccbcec3d5596..0000000000000 Binary files a/apps/docs/public/img/blog/countries.gif and /dev/null differ diff --git a/apps/docs/public/img/blog/dec-beta.png b/apps/docs/public/img/blog/dec-beta.png deleted file mode 100644 index 9afabe75f7e91..0000000000000 Binary files a/apps/docs/public/img/blog/dec-beta.png and /dev/null differ diff --git a/apps/docs/public/img/blog/dec-starcount.png b/apps/docs/public/img/blog/dec-starcount.png deleted file mode 100644 index c1cc76efa4cd6..0000000000000 Binary files a/apps/docs/public/img/blog/dec-starcount.png and /dev/null differ diff --git a/apps/docs/public/img/blog/feb/auth-redirect.png b/apps/docs/public/img/blog/feb/auth-redirect.png deleted file mode 100644 index 79fa813650325..0000000000000 Binary files a/apps/docs/public/img/blog/feb/auth-redirect.png and /dev/null differ diff --git a/apps/docs/public/img/blog/feb/autocomplete.mp4 b/apps/docs/public/img/blog/feb/autocomplete.mp4 deleted file mode 100644 index 73a4802dcccbb..0000000000000 Binary files a/apps/docs/public/img/blog/feb/autocomplete.mp4 and /dev/null differ diff --git a/apps/docs/public/img/blog/feb/docs-resources.png b/apps/docs/public/img/blog/feb/docs-resources.png deleted file mode 100644 index ef093486cc0d1..0000000000000 Binary files a/apps/docs/public/img/blog/feb/docs-resources.png and /dev/null differ diff --git a/apps/docs/public/img/blog/feb/github-stars-feb-2021.png b/apps/docs/public/img/blog/feb/github-stars-feb-2021.png deleted file mode 100644 index a8b707b004d7e..0000000000000 Binary files a/apps/docs/public/img/blog/feb/github-stars-feb-2021.png and /dev/null differ diff --git a/apps/docs/public/img/blog/feb/manage-replication.png b/apps/docs/public/img/blog/feb/manage-replication.png deleted file mode 100644 index 1649b0a1ce101..0000000000000 Binary files a/apps/docs/public/img/blog/feb/manage-replication.png and /dev/null differ diff --git a/apps/docs/public/img/blog/feb/new-region-south-africa.png b/apps/docs/public/img/blog/feb/new-region-south-africa.png deleted file mode 100644 index 03daa4e48a6a4..0000000000000 Binary files a/apps/docs/public/img/blog/feb/new-region-south-africa.png and /dev/null differ diff --git a/apps/docs/public/img/blog/feb/sidebar-sql.png b/apps/docs/public/img/blog/feb/sidebar-sql.png deleted file mode 100644 index 9bf465178d7c1..0000000000000 Binary files a/apps/docs/public/img/blog/feb/sidebar-sql.png and /dev/null differ diff --git a/apps/docs/public/img/blog/feb/sidebar-tables.png b/apps/docs/public/img/blog/feb/sidebar-tables.png deleted file mode 100644 index d62ad7ebd614b..0000000000000 Binary files a/apps/docs/public/img/blog/feb/sidebar-tables.png and /dev/null differ diff --git a/apps/docs/public/img/blog/feb/supabase-stencil.png b/apps/docs/public/img/blog/feb/supabase-stencil.png deleted file mode 100644 index 3358b61716753..0000000000000 Binary files a/apps/docs/public/img/blog/feb/supabase-stencil.png and /dev/null differ diff --git a/apps/docs/public/img/blog/feb/supabase-storage.png b/apps/docs/public/img/blog/feb/supabase-storage.png deleted file mode 100644 index 52dce2f47b4f3..0000000000000 Binary files a/apps/docs/public/img/blog/feb/supabase-storage.png and /dev/null differ diff --git a/apps/docs/public/img/blog/jan-21-starcount.png b/apps/docs/public/img/blog/jan-21-starcount.png deleted file mode 100644 index 86cf0c10b2f55..0000000000000 Binary files a/apps/docs/public/img/blog/jan-21-starcount.png and /dev/null differ diff --git a/apps/docs/public/img/blog/nextjs-tree-analyzer.png b/apps/docs/public/img/blog/nextjs-tree-analyzer.png deleted file mode 100644 index d6f95674bd5dc..0000000000000 Binary files a/apps/docs/public/img/blog/nextjs-tree-analyzer.png and /dev/null differ diff --git a/apps/docs/public/img/blog/npm-dependencies.png b/apps/docs/public/img/blog/npm-dependencies.png deleted file mode 100644 index 853b6c8ab8ca8..0000000000000 Binary files a/apps/docs/public/img/blog/npm-dependencies.png and /dev/null differ diff --git a/apps/docs/public/img/blog/policies-email.png b/apps/docs/public/img/blog/policies-email.png deleted file mode 100644 index 2a6aafd6be695..0000000000000 Binary files a/apps/docs/public/img/blog/policies-email.png and /dev/null differ diff --git a/apps/docs/public/img/blog/postgres-count.png b/apps/docs/public/img/blog/postgres-count.png deleted file mode 100644 index d61591f074a48..0000000000000 Binary files a/apps/docs/public/img/blog/postgres-count.png and /dev/null differ diff --git a/apps/docs/public/img/blog/react-server-components-supabase.png b/apps/docs/public/img/blog/react-server-components-supabase.png deleted file mode 100644 index f32424fbe5061..0000000000000 Binary files a/apps/docs/public/img/blog/react-server-components-supabase.png and /dev/null differ diff --git a/apps/docs/public/img/blog/regions-london-sydney.png b/apps/docs/public/img/blog/regions-london-sydney.png deleted file mode 100644 index 51d458e4583dc..0000000000000 Binary files a/apps/docs/public/img/blog/regions-london-sydney.png and /dev/null differ diff --git a/apps/docs/public/img/blog/sentry-results.png b/apps/docs/public/img/blog/sentry-results.png deleted file mode 100644 index d154faf6be864..0000000000000 Binary files a/apps/docs/public/img/blog/sentry-results.png and /dev/null differ diff --git a/apps/docs/public/img/blog/supabase-auth-series.png b/apps/docs/public/img/blog/supabase-auth-series.png deleted file mode 100644 index f5e34f7926854..0000000000000 Binary files a/apps/docs/public/img/blog/supabase-auth-series.png and /dev/null differ diff --git a/apps/docs/public/img/blog/supabase-extensions.png b/apps/docs/public/img/blog/supabase-extensions.png deleted file mode 100644 index 413ea2b8f20f7..0000000000000 Binary files a/apps/docs/public/img/blog/supabase-extensions.png and /dev/null differ diff --git a/apps/docs/public/img/blog/supabase-postgres-cron.png b/apps/docs/public/img/blog/supabase-postgres-cron.png deleted file mode 100644 index e006bf00de568..0000000000000 Binary files a/apps/docs/public/img/blog/supabase-postgres-cron.png and /dev/null differ diff --git a/apps/docs/public/img/blog/website-hook.jpeg b/apps/docs/public/img/blog/website-hook.jpeg deleted file mode 100644 index 0cf412b6c0a50..0000000000000 Binary files a/apps/docs/public/img/blog/website-hook.jpeg and /dev/null differ diff --git a/apps/docs/public/img/cards/dark.png b/apps/docs/public/img/cards/dark.png deleted file mode 100644 index 6a34d3a47941d..0000000000000 Binary files a/apps/docs/public/img/cards/dark.png and /dev/null differ diff --git a/apps/docs/public/img/cards/dark.svg b/apps/docs/public/img/cards/dark.svg deleted file mode 100644 index 4f791cb6cc972..0000000000000 --- a/apps/docs/public/img/cards/dark.svg +++ /dev/null @@ -1,475 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/cards/sample-card-header-2.svg b/apps/docs/public/img/cards/sample-card-header-2.svg deleted file mode 100644 index 3c4269e74cfb5..0000000000000 --- a/apps/docs/public/img/cards/sample-card-header-2.svg +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/cards/sample-card-header-3.svg b/apps/docs/public/img/cards/sample-card-header-3.svg deleted file mode 100644 index 1eb4bffa5c62a..0000000000000 --- a/apps/docs/public/img/cards/sample-card-header-3.svg +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/cards/sample-card-header-4.svg b/apps/docs/public/img/cards/sample-card-header-4.svg deleted file mode 100644 index 80a2c8933e7c8..0000000000000 --- a/apps/docs/public/img/cards/sample-card-header-4.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/cards/sample-card-header.svg b/apps/docs/public/img/cards/sample-card-header.svg deleted file mode 100644 index 39cc30ca3df35..0000000000000 --- a/apps/docs/public/img/cards/sample-card-header.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/cards/tutorials-small.svg b/apps/docs/public/img/cards/tutorials-small.svg deleted file mode 100644 index 7b7ed6fbf88ce..0000000000000 --- a/apps/docs/public/img/cards/tutorials-small.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/cdn-cache-hit.png b/apps/docs/public/img/cdn-cache-hit.png deleted file mode 100644 index 799d1fac9a756..0000000000000 Binary files a/apps/docs/public/img/cdn-cache-hit.png and /dev/null differ diff --git a/apps/docs/public/img/cdn-cache-miss.png b/apps/docs/public/img/cdn-cache-miss.png deleted file mode 100644 index 5fed8dcadbc15..0000000000000 Binary files a/apps/docs/public/img/cdn-cache-miss.png and /dev/null differ diff --git a/apps/docs/public/img/check.svg b/apps/docs/public/img/check.svg deleted file mode 100644 index c708bd28f7aee..0000000000000 --- a/apps/docs/public/img/check.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/docs/public/img/clippy-dark.png b/apps/docs/public/img/clippy-dark.png deleted file mode 100644 index be142ffbe5e3e..0000000000000 Binary files a/apps/docs/public/img/clippy-dark.png and /dev/null differ diff --git a/apps/docs/public/img/clippy.png b/apps/docs/public/img/clippy.png deleted file mode 100644 index 5acb1b6e1d322..0000000000000 Binary files a/apps/docs/public/img/clippy.png and /dev/null differ diff --git a/apps/docs/public/img/community-august.png b/apps/docs/public/img/community-august.png deleted file mode 100644 index ee62c54230c94..0000000000000 Binary files a/apps/docs/public/img/community-august.png and /dev/null differ diff --git a/apps/docs/public/img/custom-docs.png b/apps/docs/public/img/custom-docs.png deleted file mode 100644 index 65b688effa630..0000000000000 Binary files a/apps/docs/public/img/custom-docs.png and /dev/null differ diff --git a/apps/docs/public/img/database/partitions-dark.png b/apps/docs/public/img/database/partitions-dark.png deleted file mode 100644 index 56c0fa50ed405..0000000000000 Binary files a/apps/docs/public/img/database/partitions-dark.png and /dev/null differ diff --git a/apps/docs/public/img/database/partitions-light.png b/apps/docs/public/img/database/partitions-light.png deleted file mode 100644 index 4e1da41b0c527..0000000000000 Binary files a/apps/docs/public/img/database/partitions-light.png and /dev/null differ diff --git a/apps/docs/public/img/deeplink-setting.png b/apps/docs/public/img/deeplink-setting.png deleted file mode 100644 index b34ff0a13b89c..0000000000000 Binary files a/apps/docs/public/img/deeplink-setting.png and /dev/null differ diff --git a/apps/docs/public/img/delete-users.gif b/apps/docs/public/img/delete-users.gif deleted file mode 100644 index 08eb2491e767d..0000000000000 Binary files a/apps/docs/public/img/delete-users.gif and /dev/null differ diff --git a/apps/docs/public/img/digital-ocean-emails-errors.png b/apps/docs/public/img/digital-ocean-emails-errors.png deleted file mode 100644 index aec2f7a5d828d..0000000000000 Binary files a/apps/docs/public/img/digital-ocean-emails-errors.png and /dev/null differ diff --git a/apps/docs/public/img/docker-supabase.png b/apps/docs/public/img/docker-supabase.png deleted file mode 100644 index 54d7be8856f93..0000000000000 Binary files a/apps/docs/public/img/docker-supabase.png and /dev/null differ diff --git a/apps/docs/public/img/edit-contributors.png b/apps/docs/public/img/edit-contributors.png deleted file mode 100644 index 7b17aab0b8446..0000000000000 Binary files a/apps/docs/public/img/edit-contributors.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-apple/apple-developer-portal.png b/apps/docs/public/img/guides/auth-apple/apple-developer-portal.png deleted file mode 100644 index 85309c4dc6d7d..0000000000000 Binary files a/apps/docs/public/img/guides/auth-apple/apple-developer-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-azure/azure-client-id.png b/apps/docs/public/img/guides/auth-azure/azure-client-id.png deleted file mode 100644 index f5a10632f4a48..0000000000000 Binary files a/apps/docs/public/img/guides/auth-azure/azure-client-id.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-azure/azure-client-secret.png b/apps/docs/public/img/guides/auth-azure/azure-client-secret.png deleted file mode 100644 index 3057ca3ad2cd2..0000000000000 Binary files a/apps/docs/public/img/guides/auth-azure/azure-client-secret.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-azure/azure-register-app.png b/apps/docs/public/img/guides/auth-azure/azure-register-app.png deleted file mode 100644 index d6550aa70f3b8..0000000000000 Binary files a/apps/docs/public/img/guides/auth-azure/azure-register-app.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-azure/azure-tenant-url.png b/apps/docs/public/img/guides/auth-azure/azure-tenant-url.png deleted file mode 100644 index 7a0501531481d..0000000000000 Binary files a/apps/docs/public/img/guides/auth-azure/azure-tenant-url.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-bitbucket/bitbucket-portal.png b/apps/docs/public/img/guides/auth-bitbucket/bitbucket-portal.png deleted file mode 100644 index ebf0a58155f2c..0000000000000 Binary files a/apps/docs/public/img/guides/auth-bitbucket/bitbucket-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-captcha/cloudflare_settings.png b/apps/docs/public/img/guides/auth-captcha/cloudflare_settings.png deleted file mode 100644 index d3387436240f0..0000000000000 Binary files a/apps/docs/public/img/guides/auth-captcha/cloudflare_settings.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-captcha/site_secret_settings.png b/apps/docs/public/img/guides/auth-captcha/site_secret_settings.png deleted file mode 100644 index bcba8182c9138..0000000000000 Binary files a/apps/docs/public/img/guides/auth-captcha/site_secret_settings.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-captcha/sitekey_settings.png b/apps/docs/public/img/guides/auth-captcha/sitekey_settings.png deleted file mode 100644 index 194762726e0f7..0000000000000 Binary files a/apps/docs/public/img/guides/auth-captcha/sitekey_settings.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-captcha/sites_dashboard.png b/apps/docs/public/img/guides/auth-captcha/sites_dashboard.png deleted file mode 100644 index 20a07cb1e2ef2..0000000000000 Binary files a/apps/docs/public/img/guides/auth-captcha/sites_dashboard.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-captcha/supabase_auth_general_settings.png b/apps/docs/public/img/guides/auth-captcha/supabase_auth_general_settings.png deleted file mode 100644 index 9a2a2a65e34c9..0000000000000 Binary files a/apps/docs/public/img/guides/auth-captcha/supabase_auth_general_settings.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-discord/discord-developer-portal.png b/apps/docs/public/img/guides/auth-discord/discord-developer-portal.png deleted file mode 100644 index 1ab51cd4014a7..0000000000000 Binary files a/apps/docs/public/img/guides/auth-discord/discord-developer-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-discord/discord-portal.png b/apps/docs/public/img/guides/auth-discord/discord-portal.png deleted file mode 100644 index 6bd35cdf308e4..0000000000000 Binary files a/apps/docs/public/img/guides/auth-discord/discord-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-facebook/facebook-portal.png b/apps/docs/public/img/guides/auth-facebook/facebook-portal.png deleted file mode 100644 index 906ea2a4349c6..0000000000000 Binary files a/apps/docs/public/img/guides/auth-facebook/facebook-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-figma/figma_app_credentials.png b/apps/docs/public/img/guides/auth-figma/figma_app_credentials.png deleted file mode 100755 index e4d582ab9fb30..0000000000000 Binary files a/apps/docs/public/img/guides/auth-figma/figma_app_credentials.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-figma/figma_create_app.png b/apps/docs/public/img/guides/auth-figma/figma_create_app.png deleted file mode 100755 index 7caeb2c0057dc..0000000000000 Binary files a/apps/docs/public/img/guides/auth-figma/figma_create_app.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-figma/figma_developers_page.png b/apps/docs/public/img/guides/auth-figma/figma_developers_page.png deleted file mode 100755 index 8ceee422d79bd..0000000000000 Binary files a/apps/docs/public/img/guides/auth-figma/figma_developers_page.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-github/github-portal.png b/apps/docs/public/img/guides/auth-github/github-portal.png deleted file mode 100644 index e987ecf54acaa..0000000000000 Binary files a/apps/docs/public/img/guides/auth-github/github-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-gitlab/gitlab-portal.png b/apps/docs/public/img/guides/auth-gitlab/gitlab-portal.png deleted file mode 100644 index 90c70078a3cdb..0000000000000 Binary files a/apps/docs/public/img/guides/auth-gitlab/gitlab-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-google/google-portal.png b/apps/docs/public/img/guides/auth-google/google-portal.png deleted file mode 100644 index 1745dbef320e1..0000000000000 Binary files a/apps/docs/public/img/guides/auth-google/google-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-kakao/kakao-developers-consent-items-set.png b/apps/docs/public/img/guides/auth-kakao/kakao-developers-consent-items-set.png deleted file mode 100644 index b59c461698434..0000000000000 Binary files a/apps/docs/public/img/guides/auth-kakao/kakao-developers-consent-items-set.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-kakao/kakao-developers-page.png b/apps/docs/public/img/guides/auth-kakao/kakao-developers-page.png deleted file mode 100644 index 81d30550eb687..0000000000000 Binary files a/apps/docs/public/img/guides/auth-kakao/kakao-developers-page.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-keycloak/keycloak-add-client.png b/apps/docs/public/img/guides/auth-keycloak/keycloak-add-client.png deleted file mode 100644 index 3da23de52c5ee..0000000000000 Binary files a/apps/docs/public/img/guides/auth-keycloak/keycloak-add-client.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-keycloak/keycloak-client-id.png b/apps/docs/public/img/guides/auth-keycloak/keycloak-client-id.png deleted file mode 100644 index 6c73eff60328b..0000000000000 Binary files a/apps/docs/public/img/guides/auth-keycloak/keycloak-client-id.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-keycloak/keycloak-client-secret.png b/apps/docs/public/img/guides/auth-keycloak/keycloak-client-secret.png deleted file mode 100644 index 743040fd9d56c..0000000000000 Binary files a/apps/docs/public/img/guides/auth-keycloak/keycloak-client-secret.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-keycloak/keycloak-create-realm.png b/apps/docs/public/img/guides/auth-keycloak/keycloak-create-realm.png deleted file mode 100644 index 0317db60b0b0c..0000000000000 Binary files a/apps/docs/public/img/guides/auth-keycloak/keycloak-create-realm.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-keycloak/keycloak-openid-endpoint-config.png b/apps/docs/public/img/guides/auth-keycloak/keycloak-openid-endpoint-config.png deleted file mode 100644 index 0b3a4f98c2cff..0000000000000 Binary files a/apps/docs/public/img/guides/auth-keycloak/keycloak-openid-endpoint-config.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-keycloak/keycloak-redirect-uri.png b/apps/docs/public/img/guides/auth-keycloak/keycloak-redirect-uri.png deleted file mode 100644 index ce8a9612752bd..0000000000000 Binary files a/apps/docs/public/img/guides/auth-keycloak/keycloak-redirect-uri.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-linkedin/linkedin_developers_page.png b/apps/docs/public/img/guides/auth-linkedin/linkedin_developers_page.png deleted file mode 100644 index fe73084e81107..0000000000000 Binary files a/apps/docs/public/img/guides/auth-linkedin/linkedin_developers_page.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-managing-user-data/export_users.png b/apps/docs/public/img/guides/auth-managing-user-data/export_users.png deleted file mode 100644 index 2db47fee5e9f4..0000000000000 Binary files a/apps/docs/public/img/guides/auth-managing-user-data/export_users.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-messagebird/1.png b/apps/docs/public/img/guides/auth-messagebird/1.png deleted file mode 100644 index 0ff2ea855f2c1..0000000000000 Binary files a/apps/docs/public/img/guides/auth-messagebird/1.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-messagebird/2.png b/apps/docs/public/img/guides/auth-messagebird/2.png deleted file mode 100644 index de9c145949956..0000000000000 Binary files a/apps/docs/public/img/guides/auth-messagebird/2.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-messagebird/3.png b/apps/docs/public/img/guides/auth-messagebird/3.png deleted file mode 100644 index d46c759873a71..0000000000000 Binary files a/apps/docs/public/img/guides/auth-messagebird/3.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-notion/notion-creds.png b/apps/docs/public/img/guides/auth-notion/notion-creds.png deleted file mode 100644 index d677290bad805..0000000000000 Binary files a/apps/docs/public/img/guides/auth-notion/notion-creds.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-notion/notion-developer.png b/apps/docs/public/img/guides/auth-notion/notion-developer.png deleted file mode 100644 index 5be5f04d046c7..0000000000000 Binary files a/apps/docs/public/img/guides/auth-notion/notion-developer.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-notion/notion-redirect-uri.png b/apps/docs/public/img/guides/auth-notion/notion-redirect-uri.png deleted file mode 100644 index 172c186f9a840..0000000000000 Binary files a/apps/docs/public/img/guides/auth-notion/notion-redirect-uri.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-notion/notion.png b/apps/docs/public/img/guides/auth-notion/notion.png deleted file mode 100644 index 49c3a7a2d5813..0000000000000 Binary files a/apps/docs/public/img/guides/auth-notion/notion.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-slack/slack-portal.png b/apps/docs/public/img/guides/auth-slack/slack-portal.png deleted file mode 100644 index 88e07529b264b..0000000000000 Binary files a/apps/docs/public/img/guides/auth-slack/slack-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-smtp/smtp.png b/apps/docs/public/img/guides/auth-smtp/smtp.png deleted file mode 100644 index b111b86608912..0000000000000 Binary files a/apps/docs/public/img/guides/auth-smtp/smtp.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-spotify/spotify-portal.png b/apps/docs/public/img/guides/auth-spotify/spotify-portal.png deleted file mode 100644 index 9a13fa2625ba6..0000000000000 Binary files a/apps/docs/public/img/guides/auth-spotify/spotify-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twilio/1.png b/apps/docs/public/img/guides/auth-twilio/1.png deleted file mode 100644 index 3ebec13155671..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twilio/1.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twilio/2.png b/apps/docs/public/img/guides/auth-twilio/2.png deleted file mode 100644 index 79ffac71b0f3a..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twilio/2.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twilio/3.png b/apps/docs/public/img/guides/auth-twilio/3.png deleted file mode 100644 index 9982be7802e92..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twilio/3.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twilio/4.png b/apps/docs/public/img/guides/auth-twilio/4.png deleted file mode 100644 index b02543e92bed1..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twilio/4.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twilio/5.png b/apps/docs/public/img/guides/auth-twilio/5.png deleted file mode 100644 index e8eed1373a217..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twilio/5.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twilio/6.png b/apps/docs/public/img/guides/auth-twilio/6.png deleted file mode 100644 index b43126c84301b..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twilio/6.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twilio/7.png b/apps/docs/public/img/guides/auth-twilio/7.png deleted file mode 100644 index 16fbadafa01b3..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twilio/7.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twilio/8.png b/apps/docs/public/img/guides/auth-twilio/8.png deleted file mode 100644 index 049621e4534ff..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twilio/8.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twilio/9.png b/apps/docs/public/img/guides/auth-twilio/9.png deleted file mode 100644 index 7bec780f67b8f..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twilio/9.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twitch/twitch-applications-list.png b/apps/docs/public/img/guides/auth-twitch/twitch-applications-list.png deleted file mode 100644 index 686220454ee8c..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twitch/twitch-applications-list.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twitch/twitch-console.png b/apps/docs/public/img/guides/auth-twitch/twitch-console.png deleted file mode 100644 index 9687a369564d4..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twitch/twitch-console.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twitch/twitch-developer-page.png b/apps/docs/public/img/guides/auth-twitch/twitch-developer-page.png deleted file mode 100644 index 4c7ff19fb0ff0..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twitch/twitch-developer-page.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twitch/twitch-get-keys.png b/apps/docs/public/img/guides/auth-twitch/twitch-get-keys.png deleted file mode 100644 index cd34db5ac9e54..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twitch/twitch-get-keys.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twitch/twitch-register-your-application.png b/apps/docs/public/img/guides/auth-twitch/twitch-register-your-application.png deleted file mode 100644 index da715d8d28d95..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twitch/twitch-register-your-application.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-twitter/twitter-portal.png b/apps/docs/public/img/guides/auth-twitter/twitter-portal.png deleted file mode 100644 index 7c399e170c2a7..0000000000000 Binary files a/apps/docs/public/img/guides/auth-twitter/twitter-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-workos/workos-clientid-redirect-uri.png b/apps/docs/public/img/guides/auth-workos/workos-clientid-redirect-uri.png deleted file mode 100644 index 131d0471042c5..0000000000000 Binary files a/apps/docs/public/img/guides/auth-workos/workos-clientid-redirect-uri.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-workos/workos-create-organization.png b/apps/docs/public/img/guides/auth-workos/workos-create-organization.png deleted file mode 100644 index 4f9d7798de515..0000000000000 Binary files a/apps/docs/public/img/guides/auth-workos/workos-create-organization.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-workos/workos-secret-key.png b/apps/docs/public/img/guides/auth-workos/workos-secret-key.png deleted file mode 100644 index 9c2df99be532a..0000000000000 Binary files a/apps/docs/public/img/guides/auth-workos/workos-secret-key.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-workos/workos-setup-identity-provider.png b/apps/docs/public/img/guides/auth-workos/workos-setup-identity-provider.png deleted file mode 100644 index de464f443c20e..0000000000000 Binary files a/apps/docs/public/img/guides/auth-workos/workos-setup-identity-provider.png and /dev/null differ diff --git a/apps/docs/public/img/guides/auth-zoom/zoom-portal.png b/apps/docs/public/img/guides/auth-zoom/zoom-portal.png deleted file mode 100644 index 4630dcc646571..0000000000000 Binary files a/apps/docs/public/img/guides/auth-zoom/zoom-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/ci-main.png b/apps/docs/public/img/guides/cli/ci-main.png deleted file mode 100644 index c3e6f3ca026bc..0000000000000 Binary files a/apps/docs/public/img/guides/cli/ci-main.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/ci-pr.png b/apps/docs/public/img/guides/cli/ci-pr.png deleted file mode 100644 index 57a551fa507ff..0000000000000 Binary files a/apps/docs/public/img/guides/cli/ci-pr.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/ci-release.png b/apps/docs/public/img/guides/cli/ci-release.png deleted file mode 100644 index b8c83a6fbb95e..0000000000000 Binary files a/apps/docs/public/img/guides/cli/ci-release.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/ci-test.png b/apps/docs/public/img/guides/cli/ci-test.png deleted file mode 100644 index 8c5001bb673eb..0000000000000 Binary files a/apps/docs/public/img/guides/cli/ci-test.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/cicd-github.png b/apps/docs/public/img/guides/cli/cicd-github.png deleted file mode 100644 index 01577b445255d..0000000000000 Binary files a/apps/docs/public/img/guides/cli/cicd-github.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/deploy.png b/apps/docs/public/img/guides/cli/deploy.png deleted file mode 100644 index c865f0c857133..0000000000000 Binary files a/apps/docs/public/img/guides/cli/deploy.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/diff-auto.png b/apps/docs/public/img/guides/cli/diff-auto.png deleted file mode 100644 index 9043cb5d9ef3e..0000000000000 Binary files a/apps/docs/public/img/guides/cli/diff-auto.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/diff-manual.png b/apps/docs/public/img/guides/cli/diff-manual.png deleted file mode 100644 index 23034da04c0ff..0000000000000 Binary files a/apps/docs/public/img/guides/cli/diff-manual.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/local-studio.png b/apps/docs/public/img/guides/cli/local-studio.png deleted file mode 100644 index 563c5cbef58d4..0000000000000 Binary files a/apps/docs/public/img/guides/cli/local-studio.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/rebase.png b/apps/docs/public/img/guides/cli/rebase.png deleted file mode 100644 index 09a9dd16ea3aa..0000000000000 Binary files a/apps/docs/public/img/guides/cli/rebase.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/snaplet-example-schema.png b/apps/docs/public/img/guides/cli/snaplet-example-schema.png deleted file mode 100644 index dab45e505a478..0000000000000 Binary files a/apps/docs/public/img/guides/cli/snaplet-example-schema.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/sql-definitions.png b/apps/docs/public/img/guides/cli/sql-definitions.png deleted file mode 100644 index 5a654bf5d04ab..0000000000000 Binary files a/apps/docs/public/img/guides/cli/sql-definitions.png and /dev/null differ diff --git a/apps/docs/public/img/guides/cli/workflow.png b/apps/docs/public/img/guides/cli/workflow.png deleted file mode 100644 index f23f1c219058c..0000000000000 Binary files a/apps/docs/public/img/guides/cli/workflow.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/add-pg-server-conn-info.png b/apps/docs/public/img/guides/database/add-pg-server-conn-info.png deleted file mode 100644 index 1198e74ee662c..0000000000000 Binary files a/apps/docs/public/img/guides/database/add-pg-server-conn-info.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/add-ssl-config-parameter.png b/apps/docs/public/img/guides/database/add-ssl-config-parameter.png deleted file mode 100644 index dcd63aa8126b2..0000000000000 Binary files a/apps/docs/public/img/guides/database/add-ssl-config-parameter.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/connection-info-cert.png b/apps/docs/public/img/guides/database/connection-info-cert.png deleted file mode 100644 index 5a58facd50aad..0000000000000 Binary files a/apps/docs/public/img/guides/database/connection-info-cert.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/connection-pool.png b/apps/docs/public/img/guides/database/connection-pool.png deleted file mode 100644 index c1206da969507..0000000000000 Binary files a/apps/docs/public/img/guides/database/connection-pool.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/extensions/postgis/map.png b/apps/docs/public/img/guides/database/extensions/postgis/map.png deleted file mode 100644 index ef368146ad6f0..0000000000000 Binary files a/apps/docs/public/img/guides/database/extensions/postgis/map.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/foreign-keys.png b/apps/docs/public/img/guides/database/foreign-keys.png deleted file mode 100644 index 1025e6e5ee265..0000000000000 Binary files a/apps/docs/public/img/guides/database/foreign-keys.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/name-pg-server.png b/apps/docs/public/img/guides/database/name-pg-server.png deleted file mode 100644 index 1f4f9af35068e..0000000000000 Binary files a/apps/docs/public/img/guides/database/name-pg-server.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/og-vault.png b/apps/docs/public/img/guides/database/og-vault.png deleted file mode 100644 index 71ff756fef81b..0000000000000 Binary files a/apps/docs/public/img/guides/database/og-vault.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/register-server-pgAdmin.png b/apps/docs/public/img/guides/database/register-server-pgAdmin.png deleted file mode 100644 index eab30bc364137..0000000000000 Binary files a/apps/docs/public/img/guides/database/register-server-pgAdmin.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/schema-tables.png b/apps/docs/public/img/guides/database/schema-tables.png deleted file mode 100644 index 6bb2316aa97f7..0000000000000 Binary files a/apps/docs/public/img/guides/database/schema-tables.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/tables-columns.png b/apps/docs/public/img/guides/database/tables-columns.png deleted file mode 100644 index d4d3ab03d3d16..0000000000000 Binary files a/apps/docs/public/img/guides/database/tables-columns.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/vault-decrypted-data.png b/apps/docs/public/img/guides/database/vault-decrypted-data.png deleted file mode 100644 index e802f9d1ef34e..0000000000000 Binary files a/apps/docs/public/img/guides/database/vault-decrypted-data.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/vault-encrypted-data.png b/apps/docs/public/img/guides/database/vault-encrypted-data.png deleted file mode 100644 index 631536c56fa09..0000000000000 Binary files a/apps/docs/public/img/guides/database/vault-encrypted-data.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/vault-encrypting-columns.png b/apps/docs/public/img/guides/database/vault-encrypting-columns.png deleted file mode 100644 index 2a2c487eaa716..0000000000000 Binary files a/apps/docs/public/img/guides/database/vault-encrypting-columns.png and /dev/null differ diff --git a/apps/docs/public/img/guides/database/vault-hello-compressed.mp4 b/apps/docs/public/img/guides/database/vault-hello-compressed.mp4 deleted file mode 100644 index 4839558643579..0000000000000 Binary files a/apps/docs/public/img/guides/database/vault-hello-compressed.mp4 and /dev/null differ diff --git a/apps/docs/public/img/guides/functions/function-logs.png b/apps/docs/public/img/guides/functions/function-logs.png deleted file mode 100644 index 1689ddc736420..0000000000000 Binary files a/apps/docs/public/img/guides/functions/function-logs.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/appsmith/bind-query-appsmith-07.png b/apps/docs/public/img/guides/integrations/appsmith/bind-query-appsmith-07.png deleted file mode 100644 index 296e1d4bda3be..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/appsmith/bind-query-appsmith-07.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/appsmith/connect-supabase-datasource-05.png b/apps/docs/public/img/guides/integrations/appsmith/connect-supabase-datasource-05.png deleted file mode 100644 index dabb2b6ad3327..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/appsmith/connect-supabase-datasource-05.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/appsmith/create-datasource-appsmith-04.png b/apps/docs/public/img/guides/integrations/appsmith/create-datasource-appsmith-04.png deleted file mode 100644 index 04f72cb896f40..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/appsmith/create-datasource-appsmith-04.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/appsmith/create-project-supabase-01.png b/apps/docs/public/img/guides/integrations/appsmith/create-project-supabase-01.png deleted file mode 100644 index aebd9cb180727..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/appsmith/create-project-supabase-01.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/appsmith/create-query-appsmith-09.png b/apps/docs/public/img/guides/integrations/appsmith/create-query-appsmith-09.png deleted file mode 100644 index 96d9989f99e5f..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/appsmith/create-query-appsmith-09.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/appsmith/create-table-supabase-02.png b/apps/docs/public/img/guides/integrations/appsmith/create-table-supabase-02.png deleted file mode 100644 index d9e87ae879977..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/appsmith/create-table-supabase-02.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/appsmith/modal-appsmith-08.png b/apps/docs/public/img/guides/integrations/appsmith/modal-appsmith-08.png deleted file mode 100644 index 18397732e6012..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/appsmith/modal-appsmith-08.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/appsmith/project-settings-supabase-03.png b/apps/docs/public/img/guides/integrations/appsmith/project-settings-supabase-03.png deleted file mode 100644 index 1c428f0982959..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/appsmith/project-settings-supabase-03.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/appsmith/property-pane-appsmith-06.png b/apps/docs/public/img/guides/integrations/appsmith/property-pane-appsmith-06.png deleted file mode 100644 index 69fe6f2df3fed..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/appsmith/property-pane-appsmith-06.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/33kqP4K.png b/apps/docs/public/img/guides/integrations/auth0/33kqP4K.png deleted file mode 100644 index 1158cb6fa240a..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/33kqP4K.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/ANU4Wez.png b/apps/docs/public/img/guides/integrations/auth0/ANU4Wez.png deleted file mode 100644 index 33c0704aec479..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/ANU4Wez.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/GdXS013.png b/apps/docs/public/img/guides/integrations/auth0/GdXS013.png deleted file mode 100644 index a5ee5ef69a9aa..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/GdXS013.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/IYzHxeW.png b/apps/docs/public/img/guides/integrations/auth0/IYzHxeW.png deleted file mode 100644 index ec2a54f78410a..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/IYzHxeW.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/M7XyhHe.png b/apps/docs/public/img/guides/integrations/auth0/M7XyhHe.png deleted file mode 100644 index 694f54ff79dd6..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/M7XyhHe.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/XgEMwnN.png b/apps/docs/public/img/guides/integrations/auth0/XgEMwnN.png deleted file mode 100644 index 2a85f0c3af106..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/XgEMwnN.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/YdBKRy6.png b/apps/docs/public/img/guides/integrations/auth0/YdBKRy6.png deleted file mode 100644 index 979720ce868a2..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/YdBKRy6.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/dLOvhdq-1.png b/apps/docs/public/img/guides/integrations/auth0/dLOvhdq-1.png deleted file mode 100644 index baa9fdc232613..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/dLOvhdq-1.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/dLOvhdq.png b/apps/docs/public/img/guides/integrations/auth0/dLOvhdq.png deleted file mode 100644 index baa9fdc232613..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/dLOvhdq.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/iSA3E0J.png b/apps/docs/public/img/guides/integrations/auth0/iSA3E0J.png deleted file mode 100644 index 666ad012ac7d5..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/iSA3E0J.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/mEhHAWC.png b/apps/docs/public/img/guides/integrations/auth0/mEhHAWC.png deleted file mode 100644 index e8aca555121d9..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/mEhHAWC.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/o07FaoV.png b/apps/docs/public/img/guides/integrations/auth0/o07FaoV.png deleted file mode 100644 index 4aabb218006ce..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/o07FaoV.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/qnmJEU7.png b/apps/docs/public/img/guides/integrations/auth0/qnmJEU7.png deleted file mode 100644 index d6daf31eecd56..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/qnmJEU7.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/r1GAfLo.png b/apps/docs/public/img/guides/integrations/auth0/r1GAfLo.png deleted file mode 100644 index 2bfe6a9c68bd3..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/r1GAfLo.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/tPu4Tt8.png b/apps/docs/public/img/guides/integrations/auth0/tPu4Tt8.png deleted file mode 100644 index ffb2f78b6a8c5..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/tPu4Tt8.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/tbvd0Uj.png b/apps/docs/public/img/guides/integrations/auth0/tbvd0Uj.png deleted file mode 100644 index 0f323f1b4f98c..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/tbvd0Uj.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/wuWz3am.png b/apps/docs/public/img/guides/integrations/auth0/wuWz3am.png deleted file mode 100644 index c506f369373cf..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/wuWz3am.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/auth0/xLRL7S7.png b/apps/docs/public/img/guides/integrations/auth0/xLRL7S7.png deleted file mode 100644 index 53527c9b3d805..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/auth0/xLRL7S7.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/bracket/001_supabase_dashboard.png b/apps/docs/public/img/guides/integrations/bracket/001_supabase_dashboard.png deleted file mode 100644 index b7bf43fb179c9..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/bracket/001_supabase_dashboard.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/bracket/002_bracket_choose_new_source.png b/apps/docs/public/img/guides/integrations/bracket/002_bracket_choose_new_source.png deleted file mode 100644 index 8a6be33692ed9..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/bracket/002_bracket_choose_new_source.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/bracket/003_bracket_connect_postgres.png b/apps/docs/public/img/guides/integrations/bracket/003_bracket_connect_postgres.png deleted file mode 100644 index ca20af0ea4fa2..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/bracket/003_bracket_connect_postgres.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/bracket/004_select_postgres_data.png b/apps/docs/public/img/guides/integrations/bracket/004_select_postgres_data.png deleted file mode 100644 index 324f34acca761..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/bracket/004_select_postgres_data.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/bracket/005_map_fields.png b/apps/docs/public/img/guides/integrations/bracket/005_map_fields.png deleted file mode 100644 index 43efabf0e2951..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/bracket/005_map_fields.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/bracket/006_sync_overview.png b/apps/docs/public/img/guides/integrations/bracket/006_sync_overview.png deleted file mode 100644 index 3287e0d4ae846..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/bracket/006_sync_overview.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/clerk/01_supabase-template.png b/apps/docs/public/img/guides/integrations/clerk/01_supabase-template.png deleted file mode 100644 index 8e24da1ee7014..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/clerk/01_supabase-template.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/clerk/02_jwt-claims.png b/apps/docs/public/img/guides/integrations/clerk/02_jwt-claims.png deleted file mode 100644 index ba75bba236ebd..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/clerk/02_jwt-claims.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/clerk/03_jwt-secret.png b/apps/docs/public/img/guides/integrations/clerk/03_jwt-secret.png deleted file mode 100644 index 268914f83ebbb..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/clerk/03_jwt-secret.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/clerk/04_signing-key.png b/apps/docs/public/img/guides/integrations/clerk/04_signing-key.png deleted file mode 100644 index 07d8dac6fab74..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/clerk/04_signing-key.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/clerk/05_clerk-frontend-api.png b/apps/docs/public/img/guides/integrations/clerk/05_clerk-frontend-api.png deleted file mode 100644 index deadc3d2481e1..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/clerk/05_clerk-frontend-api.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/clerk/06_supabase-keys.png b/apps/docs/public/img/guides/integrations/clerk/06_supabase-keys.png deleted file mode 100644 index 24ea87d2a56c5..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/clerk/06_supabase-keys.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/clerk/07_requesting-user-id.png b/apps/docs/public/img/guides/integrations/clerk/07_requesting-user-id.png deleted file mode 100644 index c08defa6cf8a3..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/clerk/07_requesting-user-id.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/cloudflare-integration/2.png b/apps/docs/public/img/guides/integrations/cloudflare-integration/2.png deleted file mode 100644 index 4348e50874232..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/cloudflare-integration/2.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/cloudflare-integration/3.png b/apps/docs/public/img/guides/integrations/cloudflare-integration/3.png deleted file mode 100644 index 2a6db2dc1045b..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/cloudflare-integration/3.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/cloudflare-integration/4.png b/apps/docs/public/img/guides/integrations/cloudflare-integration/4.png deleted file mode 100644 index d1aba0bb70630..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/cloudflare-integration/4.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/cloudflare-integration/5.png b/apps/docs/public/img/guides/integrations/cloudflare-integration/5.png deleted file mode 100644 index 1db9444f21080..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/cloudflare-integration/5.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/cloudflare-integration/6.png b/apps/docs/public/img/guides/integrations/cloudflare-integration/6.png deleted file mode 100644 index 0c7ce386ac667..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/cloudflare-integration/6.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/cloudflare-integration/7.png b/apps/docs/public/img/guides/integrations/cloudflare-integration/7.png deleted file mode 100644 index f6d4c49df5f02..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/cloudflare-integration/7.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/connect-database.png b/apps/docs/public/img/guides/integrations/dashibase/connect-database.png deleted file mode 100644 index fe5161bf0e411..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/connect-database.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/customers-table-with-text.png b/apps/docs/public/img/guides/integrations/dashibase/customers-table-with-text.png deleted file mode 100644 index 95c0528131ce3..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/customers-table-with-text.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/customers-table.png b/apps/docs/public/img/guides/integrations/dashibase/customers-table.png deleted file mode 100644 index 6f8ddb623888c..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/customers-table.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/data-source-user-access.png b/apps/docs/public/img/guides/integrations/dashibase/data-source-user-access.png deleted file mode 100644 index 50ea725156303..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/data-source-user-access.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/initial-dashboard-content.png b/apps/docs/public/img/guides/integrations/dashibase/initial-dashboard-content.png deleted file mode 100644 index e230da20f8c81..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/initial-dashboard-content.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/set-column-access.png b/apps/docs/public/img/guides/integrations/dashibase/set-column-access.png deleted file mode 100644 index 47890aa03de37..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/set-column-access.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/set-data-access.png b/apps/docs/public/img/guides/integrations/dashibase/set-data-access.png deleted file mode 100644 index 5786987f11425..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/set-data-access.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/share-dashboard.png b/apps/docs/public/img/guides/integrations/dashibase/share-dashboard.png deleted file mode 100644 index 22ce49702b273..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/share-dashboard.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/single-item-view.png b/apps/docs/public/img/guides/integrations/dashibase/single-item-view.png deleted file mode 100644 index f5aef0fcb3fed..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/single-item-view.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/slash-command.gif b/apps/docs/public/img/guides/integrations/dashibase/slash-command.gif deleted file mode 100644 index 0d112a30d8c53..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/slash-command.gif and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dashibase/supabase-credentials.png b/apps/docs/public/img/guides/integrations/dashibase/supabase-credentials.png deleted file mode 100644 index 6bf03270417cc..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dashibase/supabase-credentials.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dhiwise/auth.gif b/apps/docs/public/img/guides/integrations/dhiwise/auth.gif deleted file mode 100644 index db05bb42fca2b..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dhiwise/auth.gif and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dhiwise/authKeys.png b/apps/docs/public/img/guides/integrations/dhiwise/authKeys.png deleted file mode 100644 index 1ac402f5d9bc6..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dhiwise/authKeys.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dhiwise/create.png b/apps/docs/public/img/guides/integrations/dhiwise/create.png deleted file mode 100644 index bcb06e5e5eeef..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dhiwise/create.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dhiwise/newProj.png b/apps/docs/public/img/guides/integrations/dhiwise/newProj.png deleted file mode 100644 index e3f5d8db355c3..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dhiwise/newProj.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/dhiwise/select.png b/apps/docs/public/img/guides/integrations/dhiwise/select.png deleted file mode 100644 index 3de535da47ee8..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/dhiwise/select.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/directus/directus-20220608A.webp b/apps/docs/public/img/guides/integrations/directus/directus-20220608A.webp deleted file mode 100644 index 2b8080f59b745..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/directus/directus-20220608A.webp and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/directus/enable-PostGIS-20220608A.webp b/apps/docs/public/img/guides/integrations/directus/enable-PostGIS-20220608A.webp deleted file mode 100644 index 09428edfc187d..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/directus/enable-PostGIS-20220608A.webp and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/directus/supabase-20220608A.webp b/apps/docs/public/img/guides/integrations/directus/supabase-20220608A.webp deleted file mode 100644 index 70f8392e1c074..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/directus/supabase-20220608A.webp and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/authheader.png b/apps/docs/public/img/guides/integrations/draftbit/authheader.png deleted file mode 100644 index c8b2b0c7c1f03..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/authheader.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/ctree.png b/apps/docs/public/img/guides/integrations/draftbit/ctree.png deleted file mode 100644 index cc1ade28a6d69..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/ctree.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/delete.gif b/apps/docs/public/img/guides/integrations/draftbit/delete.gif deleted file mode 100644 index bc8a27abb2728..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/delete.gif and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/deleteapirequest.gif b/apps/docs/public/img/guides/integrations/draftbit/deleteapirequest.gif deleted file mode 100644 index 5fc85f42a3e45..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/deleteapirequest.gif and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/endpoint.png b/apps/docs/public/img/guides/integrations/draftbit/endpoint.png deleted file mode 100644 index bdc3464f319f3..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/endpoint.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/fetchall.gif b/apps/docs/public/img/guides/integrations/draftbit/fetchall.gif deleted file mode 100644 index 8004538c9d9c1..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/fetchall.gif and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/fetchsingle.png b/apps/docs/public/img/guides/integrations/draftbit/fetchsingle.png deleted file mode 100644 index 44051de9f21ef..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/fetchsingle.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/get-request.gif b/apps/docs/public/img/guides/integrations/draftbit/get-request.gif deleted file mode 100644 index fb6500dd544ac..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/get-request.gif and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/getsingle.gif b/apps/docs/public/img/guides/integrations/draftbit/getsingle.gif deleted file mode 100644 index 934ae30a06de7..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/getsingle.gif and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/patch.gif b/apps/docs/public/img/guides/integrations/draftbit/patch.gif deleted file mode 100644 index 623b5614379c2..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/patch.gif and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/patchapirequest.png b/apps/docs/public/img/guides/integrations/draftbit/patchapirequest.png deleted file mode 100644 index 3963e3888b556..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/patchapirequest.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/postapirequest.png b/apps/docs/public/img/guides/integrations/draftbit/postapirequest.png deleted file mode 100644 index ba5334a09e6c6..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/postapirequest.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/postrequest.gif b/apps/docs/public/img/guides/integrations/draftbit/postrequest.gif deleted file mode 100644 index ba41851eb3a35..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/postrequest.gif and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/prepopulated-database.png b/apps/docs/public/img/guides/integrations/draftbit/prepopulated-database.png deleted file mode 100644 index db3ad5cbf1a1f..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/prepopulated-database.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/service.png b/apps/docs/public/img/guides/integrations/draftbit/service.png deleted file mode 100644 index c145dd53d1f6a..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/service.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/draftbit/textinput.png b/apps/docs/public/img/guides/integrations/draftbit/textinput.png deleted file mode 100644 index 794d58fd9d6ca..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/draftbit/textinput.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/forestadmin/forest-admin-collections.png b/apps/docs/public/img/guides/integrations/forestadmin/forest-admin-collections.png deleted file mode 100644 index 62bf401b5d0c5..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/forestadmin/forest-admin-collections.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/forestadmin/forestadmin-create-project.png b/apps/docs/public/img/guides/integrations/forestadmin/forestadmin-create-project.png deleted file mode 100644 index 5e21934d1db4c..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/forestadmin/forestadmin-create-project.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/forestadmin/forestadmin-db-credentials.png b/apps/docs/public/img/guides/integrations/forestadmin/forestadmin-db-credentials.png deleted file mode 100644 index 48492f5b04122..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/forestadmin/forestadmin-db-credentials.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/forestadmin/forestadmin-hosting.png b/apps/docs/public/img/guides/integrations/forestadmin/forestadmin-hosting.png deleted file mode 100644 index 7087ea22f742c..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/forestadmin/forestadmin-hosting.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/forestadmin/supabase-db-create-table.png b/apps/docs/public/img/guides/integrations/forestadmin/supabase-db-create-table.png deleted file mode 100644 index 20f2a470c3bce..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/forestadmin/supabase-db-create-table.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/forestadmin/supabase-db-credentials.png b/apps/docs/public/img/guides/integrations/forestadmin/supabase-db-credentials.png deleted file mode 100644 index cf13d0fa9516c..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/forestadmin/supabase-db-credentials.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/illa/supabase-illa-UI.png b/apps/docs/public/img/guides/integrations/illa/supabase-illa-UI.png deleted file mode 100644 index e90b8ae8ee321..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/illa/supabase-illa-UI.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/illa/supabase-illa-connect-2.png b/apps/docs/public/img/guides/integrations/illa/supabase-illa-connect-2.png deleted file mode 100644 index 61c3219b62553..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/illa/supabase-illa-connect-2.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/illa/supabase-illa-connect.png b/apps/docs/public/img/guides/integrations/illa/supabase-illa-connect.png deleted file mode 100644 index b1787ee847316..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/illa/supabase-illa-connect.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/illa/supabase-illa-create-project.png b/apps/docs/public/img/guides/integrations/illa/supabase-illa-create-project.png deleted file mode 100644 index d04b4c5f5a712..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/illa/supabase-illa-create-project.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/illa/supabase-illa-project.png b/apps/docs/public/img/guides/integrations/illa/supabase-illa-project.png deleted file mode 100644 index ffbd18768734e..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/illa/supabase-illa-project.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/illa/supabase-illa-select.png b/apps/docs/public/img/guides/integrations/illa/supabase-illa-select.png deleted file mode 100644 index f6160065d70e0..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/illa/supabase-illa-select.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/illa/supabase-illa-show-data.png b/apps/docs/public/img/guides/integrations/illa/supabase-illa-show-data.png deleted file mode 100644 index 87db66800a94f..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/illa/supabase-illa-show-data.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/illa/supabase-information.png b/apps/docs/public/img/guides/integrations/illa/supabase-information.png deleted file mode 100644 index 8becd5e3ab9d4..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/illa/supabase-information.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/illa/supabase-table-1.png b/apps/docs/public/img/guides/integrations/illa/supabase-table-1.png deleted file mode 100644 index 1452c0a3289de..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/illa/supabase-table-1.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/illa/supabase-table-2.png b/apps/docs/public/img/guides/integrations/illa/supabase-table-2.png deleted file mode 100644 index 94d8711c6d5a3..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/illa/supabase-table-2.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/onesignal/app-ui.png b/apps/docs/public/img/guides/integrations/onesignal/app-ui.png deleted file mode 100644 index aad025d861c85..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/onesignal/app-ui.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/onesignal/diagram.png b/apps/docs/public/img/guides/integrations/onesignal/diagram.png deleted file mode 100644 index 77b83ca531538..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/onesignal/diagram.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/onesignal/onesignal-api-key.png b/apps/docs/public/img/guides/integrations/onesignal/onesignal-api-key.png deleted file mode 100644 index 439fbec58dab2..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/onesignal/onesignal-api-key.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/onesignal/onesignal-app-id.png b/apps/docs/public/img/guides/integrations/onesignal/onesignal-app-id.png deleted file mode 100644 index 7e5672c05f318..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/onesignal/onesignal-app-id.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/onesignal/webhook.png b/apps/docs/public/img/guides/integrations/onesignal/webhook.png deleted file mode 100644 index e09c2387721cf..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/onesignal/webhook.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/01.png b/apps/docs/public/img/guides/integrations/passage/01.png deleted file mode 100644 index 2384828606748..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/01.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/02.png b/apps/docs/public/img/guides/integrations/passage/02.png deleted file mode 100644 index fb519b27f31d9..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/02.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/03.png b/apps/docs/public/img/guides/integrations/passage/03.png deleted file mode 100644 index b7ba3d90e9914..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/03.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/04.png b/apps/docs/public/img/guides/integrations/passage/04.png deleted file mode 100644 index 3d8909d1296c5..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/04.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/05.png b/apps/docs/public/img/guides/integrations/passage/05.png deleted file mode 100644 index 0e6c71b72d4a8..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/05.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/06.png b/apps/docs/public/img/guides/integrations/passage/06.png deleted file mode 100644 index 0f92cbdb36318..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/06.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/07.png b/apps/docs/public/img/guides/integrations/passage/07.png deleted file mode 100644 index ec8a2bfe07c42..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/07.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/08.png b/apps/docs/public/img/guides/integrations/passage/08.png deleted file mode 100644 index 19c432120c5b2..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/08.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/09.png b/apps/docs/public/img/guides/integrations/passage/09.png deleted file mode 100644 index 2d8766587dd91..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/09.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/10.png b/apps/docs/public/img/guides/integrations/passage/10.png deleted file mode 100644 index 8600e4bb46934..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/10.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/11.png b/apps/docs/public/img/guides/integrations/passage/11.png deleted file mode 100644 index c8d40d3c4ea21..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/11.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/12.png b/apps/docs/public/img/guides/integrations/passage/12.png deleted file mode 100644 index 5c4df0d6ad550..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/12.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/13.png b/apps/docs/public/img/guides/integrations/passage/13.png deleted file mode 100644 index 88557cc6ead6a..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/13.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/14.png b/apps/docs/public/img/guides/integrations/passage/14.png deleted file mode 100644 index d4e05338aa451..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/14.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/15.png b/apps/docs/public/img/guides/integrations/passage/15.png deleted file mode 100644 index 2e3246d6dfb25..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/15.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/16.png b/apps/docs/public/img/guides/integrations/passage/16.png deleted file mode 100644 index 33110817294fd..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/16.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/17.png b/apps/docs/public/img/guides/integrations/passage/17.png deleted file mode 100644 index ee4828c7db18c..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/17.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/18.png b/apps/docs/public/img/guides/integrations/passage/18.png deleted file mode 100644 index 3a72dd6ffa8a5..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/18.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/passage/19.png b/apps/docs/public/img/guides/integrations/passage/19.png deleted file mode 100644 index f763def22ec57..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/passage/19.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/pgmustard/01-supabase-run-query.png b/apps/docs/public/img/guides/integrations/pgmustard/01-supabase-run-query.png deleted file mode 100644 index d5797e23517e8..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/pgmustard/01-supabase-run-query.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/pgmustard/02-paste-plan-pgmustard.png b/apps/docs/public/img/guides/integrations/pgmustard/02-paste-plan-pgmustard.png deleted file mode 100644 index 231c35e564e9c..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/pgmustard/02-paste-plan-pgmustard.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/pgmustard/03-review-tips-pgmustard.png b/apps/docs/public/img/guides/integrations/pgmustard/03-review-tips-pgmustard.png deleted file mode 100644 index d77b8bdab99c1..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/pgmustard/03-review-tips-pgmustard.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/pgmustard/04-click-tip-pgmustard.png b/apps/docs/public/img/guides/integrations/pgmustard/04-click-tip-pgmustard.png deleted file mode 100644 index a8277a20450bf..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/pgmustard/04-click-tip-pgmustard.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/pgmustard/05-create-index-supabase.png b/apps/docs/public/img/guides/integrations/pgmustard/05-create-index-supabase.png deleted file mode 100644 index b1bdd205b3aa3..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/pgmustard/05-create-index-supabase.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/pgmustard/06-check-pgmustard.png b/apps/docs/public/img/guides/integrations/pgmustard/06-check-pgmustard.png deleted file mode 100644 index be599a57909f9..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/pgmustard/06-check-pgmustard.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/picket/new_table.png b/apps/docs/public/img/guides/integrations/picket/new_table.png deleted file mode 100644 index 72aa9b21ea2cc..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/picket/new_table.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/picket/picket_project.png b/apps/docs/public/img/guides/integrations/picket/picket_project.png deleted file mode 100644 index 6d359e9af8397..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/picket/picket_project.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/picket/rls_policy.png b/apps/docs/public/img/guides/integrations/picket/rls_policy.png deleted file mode 100644 index 54fee108478b5..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/picket/rls_policy.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/picket/supabase_project.png b/apps/docs/public/img/guides/integrations/picket/supabase_project.png deleted file mode 100644 index 97c441b6ef83b..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/picket/supabase_project.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/plasmic/add-supabasefield-plasmic-09.png b/apps/docs/public/img/guides/integrations/plasmic/add-supabasefield-plasmic-09.png deleted file mode 100644 index c811ff4f87fe7..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/plasmic/add-supabasefield-plasmic-09.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/plasmic/add-supabasegrid-plasmic-07.png b/apps/docs/public/img/guides/integrations/plasmic/add-supabasegrid-plasmic-07.png deleted file mode 100644 index 7e12eadf98c67..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/plasmic/add-supabasegrid-plasmic-07.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/plasmic/api-token-plasmic-05.png b/apps/docs/public/img/guides/integrations/plasmic/api-token-plasmic-05.png deleted file mode 100644 index 3a762a7db7dbf..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/plasmic/api-token-plasmic-05.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/plasmic/application-screenshot-00.png b/apps/docs/public/img/guides/integrations/plasmic/application-screenshot-00.png deleted file mode 100644 index 6d3b88b8757aa..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/plasmic/application-screenshot-00.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/plasmic/application-screenshot-03.png b/apps/docs/public/img/guides/integrations/plasmic/application-screenshot-03.png deleted file mode 100644 index a54d9c361bdf4..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/plasmic/application-screenshot-03.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/plasmic/clone-project-plasmic-04.png b/apps/docs/public/img/guides/integrations/plasmic/clone-project-plasmic-04.png deleted file mode 100644 index 02b8351206e19..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/plasmic/clone-project-plasmic-04.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/plasmic/create-project-supabase-01.png b/apps/docs/public/img/guides/integrations/plasmic/create-project-supabase-01.png deleted file mode 100644 index 6cae9cd438d38..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/plasmic/create-project-supabase-01.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/plasmic/create-table-supabase-02.png b/apps/docs/public/img/guides/integrations/plasmic/create-table-supabase-02.png deleted file mode 100644 index ac8534f2c98a9..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/plasmic/create-table-supabase-02.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/plasmic/pokedex-export.csv b/apps/docs/public/img/guides/integrations/plasmic/pokedex-export.csv deleted file mode 100644 index 69e07d00dd08c..0000000000000 --- a/apps/docs/public/img/guides/integrations/plasmic/pokedex-export.csv +++ /dev/null @@ -1,10 +0,0 @@ -id,user_id,name,imageUrl,inserted_at,description -5,94232f4a-1376-4f5a-8985-4b2f5e063b99,Charmander,https://assets.pokemon.com/assets/cms2/img/pokedex/full/004.png,2022-03-08 16:19:13.970657+00,"It has a preference for hot things. When it rains, steam is said to spout from the tip of its tail." -6,94232f4a-1376-4f5a-8985-4b2f5e063b99,Bulbasaur,https://assets.pokemon.com/assets/cms2/img/pokedex/full/001.png,2022-03-11 03:01:46.021406+00,There is a plant seed on its back right from the day this Pokémon is born. The seed slowly grows larger. -7,94232f4a-1376-4f5a-8985-4b2f5e063b99,Squirtle,https://assets.pokemon.com/assets/cms2/img/pokedex/full/007.png,2022-03-17 17:44:57.442837+00,"When it retracts its long neck into its shell, it squirts out water with vigorous force." -8,94232f4a-1376-4f5a-8985-4b2f5e063b99,Pikachu,https://assets.pokemon.com/assets/cms2/img/pokedex/full/025.png,2022-03-17 18:06:40.250145+00,Pikachu that can generate powerful electricity have cheek sacs that are extra soft and super stretchy. -9,94232f4a-1376-4f5a-8985-4b2f5e063b99,Ekans,https://assets.pokemon.com/assets/cms2/img/pokedex/full/023.png,2022-03-17 18:07:01.72287+00,"The older it gets, the longer it grows. At night, it wraps its long body around tree branches to rest." -10,94232f4a-1376-4f5a-8985-4b2f5e063b99,Rattata,https://assets.pokemon.com/assets/cms2/img/pokedex/full/019.png,2022-03-17 18:07:18.175796+00,"Will chew on anything with its fangs. If you see one, you can be certain that 40 more live in the area." -11,94232f4a-1376-4f5a-8985-4b2f5e063b99,Pidgey,https://assets.pokemon.com/assets/cms2/img/pokedex/full/016.png,2022-03-17 18:07:53.323738+00,"Very docile. If attacked, it will often kick up sand to protect itself rather than fight back." -12,94232f4a-1376-4f5a-8985-4b2f5e063b99,Butterfree,https://assets.pokemon.com/assets/cms2/img/pokedex/full/012.png,2022-03-17 18:08:07.248343+00,"In battle, it flaps its wings at great speed to release highly toxic dust into the air." -13,94232f4a-1376-4f5a-8985-4b2f5e063b99,Caterpie,https://assets.pokemon.com/assets/cms2/img/pokedex/full/010.png,2022-03-17 18:08:18.907813+00,"For protection, it releases a horrible stench from the antenna on its head to drive away enemies." \ No newline at end of file diff --git a/apps/docs/public/img/guides/integrations/plasmic/set-props-plasmic-08.png b/apps/docs/public/img/guides/integrations/plasmic/set-props-plasmic-08.png deleted file mode 100644 index be2ec731ca0b0..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/plasmic/set-props-plasmic-08.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/polyscale/create-cache-supabase-400.png b/apps/docs/public/img/guides/integrations/polyscale/create-cache-supabase-400.png deleted file mode 100644 index 4037eb538774f..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/polyscale/create-cache-supabase-400.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/polyscale/supabase-host.png b/apps/docs/public/img/guides/integrations/polyscale/supabase-host.png deleted file mode 100644 index 2202234d716a6..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/polyscale/supabase-host.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/prisma/7y4qq4wwvfrheti6r09u.png b/apps/docs/public/img/guides/integrations/prisma/7y4qq4wwvfrheti6r09u.png deleted file mode 100644 index 7602fd2f152eb..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/prisma/7y4qq4wwvfrheti6r09u.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/prisma/w0oowg8vq435ob5c3gf0.png b/apps/docs/public/img/guides/integrations/prisma/w0oowg8vq435ob5c3gf0.png deleted file mode 100644 index 05db2d109b617..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/prisma/w0oowg8vq435ob5c3gf0.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/prisma/zntcsh3ic91gf1gy8j73.png b/apps/docs/public/img/guides/integrations/prisma/zntcsh3ic91gf1gy8j73.png deleted file mode 100644 index 817a4f8d1b290..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/prisma/zntcsh3ic91gf1gy8j73.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/sequin/001_supabase_dash.png b/apps/docs/public/img/guides/integrations/sequin/001_supabase_dash.png deleted file mode 100644 index 65c16b4aaf52c..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/sequin/001_supabase_dash.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/sequin/002_connect.png b/apps/docs/public/img/guides/integrations/sequin/002_connect.png deleted file mode 100644 index c9c25031f78a4..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/sequin/002_connect.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/sequin/003_step_1.png b/apps/docs/public/img/guides/integrations/sequin/003_step_1.png deleted file mode 100644 index 7d9e97db507f3..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/sequin/003_step_1.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/sequin/004_step_2.png b/apps/docs/public/img/guides/integrations/sequin/004_step_2.png deleted file mode 100644 index e29634d3518fa..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/sequin/004_step_2.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/sequin/005_step_3.png b/apps/docs/public/img/guides/integrations/sequin/005_step_3.png deleted file mode 100644 index e6ed2a8f80c01..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/sequin/005_step_3.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/sequin/006_see_data.png b/apps/docs/public/img/guides/integrations/sequin/006_see_data.png deleted file mode 100644 index 4cfc6d55a2188..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/sequin/006_see_data.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/sequin/007_get_read.png b/apps/docs/public/img/guides/integrations/sequin/007_get_read.png deleted file mode 100644 index bfe94b032c251..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/sequin/007_get_read.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/snaplet/checking-database-credentials.png b/apps/docs/public/img/guides/integrations/snaplet/checking-database-credentials.png deleted file mode 100644 index 7271bb2292f13..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/snaplet/checking-database-credentials.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/snaplet/connect-your-database.png b/apps/docs/public/img/guides/integrations/snaplet/connect-your-database.png deleted file mode 100644 index cf30874432ab7..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/snaplet/connect-your-database.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/snaplet/create-your-first-snapshot.png b/apps/docs/public/img/guides/integrations/snaplet/create-your-first-snapshot.png deleted file mode 100644 index 1ef2e23b94fcc..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/snaplet/create-your-first-snapshot.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/snaplet/supabase-connection-db-info.png b/apps/docs/public/img/guides/integrations/snaplet/supabase-connection-db-info.png deleted file mode 100644 index e7e529f91d627..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/snaplet/supabase-connection-db-info.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/snaplet/transform-your-data.png b/apps/docs/public/img/guides/integrations/snaplet/transform-your-data.png deleted file mode 100644 index 5a93f72495f39..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/snaplet/transform-your-data.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/01.png b/apps/docs/public/img/guides/integrations/stytch/01.png deleted file mode 100644 index e7e83052c5179..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/01.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/02.png b/apps/docs/public/img/guides/integrations/stytch/02.png deleted file mode 100644 index 517689cad8ec5..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/02.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/03.png b/apps/docs/public/img/guides/integrations/stytch/03.png deleted file mode 100644 index 4495b78078be0..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/03.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/04.png b/apps/docs/public/img/guides/integrations/stytch/04.png deleted file mode 100644 index f83725b4576b6..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/04.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/05.png b/apps/docs/public/img/guides/integrations/stytch/05.png deleted file mode 100644 index 20fc0339a238a..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/05.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/06.png b/apps/docs/public/img/guides/integrations/stytch/06.png deleted file mode 100644 index 6e9b662745237..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/06.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/07.png b/apps/docs/public/img/guides/integrations/stytch/07.png deleted file mode 100644 index a245219445b9d..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/07.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/08.png b/apps/docs/public/img/guides/integrations/stytch/08.png deleted file mode 100644 index ac53d26143e89..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/08.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/09.png b/apps/docs/public/img/guides/integrations/stytch/09.png deleted file mode 100644 index 2b02bcb28fd2a..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/09.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/10.png b/apps/docs/public/img/guides/integrations/stytch/10.png deleted file mode 100644 index d9172e816b9ed..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/10.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/11.png b/apps/docs/public/img/guides/integrations/stytch/11.png deleted file mode 100644 index e3d9e7cc2fa94..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/11.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/12.png b/apps/docs/public/img/guides/integrations/stytch/12.png deleted file mode 100644 index 7da4451cd5128..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/12.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/13.png b/apps/docs/public/img/guides/integrations/stytch/13.png deleted file mode 100644 index dcfd7a00302e5..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/13.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/14.png b/apps/docs/public/img/guides/integrations/stytch/14.png deleted file mode 100644 index 1a049f5d7c95d..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/14.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/15.png b/apps/docs/public/img/guides/integrations/stytch/15.png deleted file mode 100644 index 7ebad95400eb2..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/15.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/16.png b/apps/docs/public/img/guides/integrations/stytch/16.png deleted file mode 100644 index 86fb2b824ecff..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/16.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/17.png b/apps/docs/public/img/guides/integrations/stytch/17.png deleted file mode 100644 index 47efb2d648abc..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/17.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/18.png b/apps/docs/public/img/guides/integrations/stytch/18.png deleted file mode 100644 index db4852a8ce170..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/18.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/19.png b/apps/docs/public/img/guides/integrations/stytch/19.png deleted file mode 100644 index 3320b25ea8e6b..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/19.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/stytch/20.png b/apps/docs/public/img/guides/integrations/stytch/20.png deleted file mode 100644 index 5aeedea8c96e6..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/stytch/20.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/supertokens/create_policy.png b/apps/docs/public/img/guides/integrations/supertokens/create_policy.png deleted file mode 100644 index 377717ea4f0fb..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/supertokens/create_policy.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/supertokens/policy_config_insert.png b/apps/docs/public/img/guides/integrations/supertokens/policy_config_insert.png deleted file mode 100644 index 24b19e28e8b5c..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/supertokens/policy_config_insert.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/supertokens/policy_config_select.png b/apps/docs/public/img/guides/integrations/supertokens/policy_config_select.png deleted file mode 100644 index cd5a9866ffc48..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/supertokens/policy_config_select.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/supertokens/supabase_app_authenticated_screen.png b/apps/docs/public/img/guides/integrations/supertokens/supabase_app_authenticated_screen.png deleted file mode 100644 index 58b2f2855ff92..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/supertokens/supabase_app_authenticated_screen.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/supertokens/supabase_dashboard_create.png b/apps/docs/public/img/guides/integrations/supertokens/supabase_dashboard_create.png deleted file mode 100644 index a0c8c7bb1af15..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/supertokens/supabase_dashboard_create.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/supertokens/supabase_table_create.png b/apps/docs/public/img/guides/integrations/supertokens/supabase_table_create.png deleted file mode 100644 index 54f9c3f69faeb..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/supertokens/supabase_table_create.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/supertokens/supertokens_thirdpartyemailpassword_auth_screen.png b/apps/docs/public/img/guides/integrations/supertokens/supertokens_thirdpartyemailpassword_auth_screen.png deleted file mode 100644 index df5f224e41634..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/supertokens/supertokens_thirdpartyemailpassword_auth_screen.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/supertokens/table_with_user.png b/apps/docs/public/img/guides/integrations/supertokens/table_with_user.png deleted file mode 100644 index 9eeea9930b539..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/supertokens/table_with_user.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/choose-project.png b/apps/docs/public/img/guides/integrations/vercel/choose-project.png deleted file mode 100644 index 530ede3f21767..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/choose-project.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/choose-scope.png b/apps/docs/public/img/guides/integrations/vercel/choose-scope.png deleted file mode 100644 index cd01bf4783892..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/choose-scope.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/clone-next-js-template.png b/apps/docs/public/img/guides/integrations/vercel/clone-next-js-template.png deleted file mode 100644 index 0a6987e2c55fd..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/clone-next-js-template.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/create-supabase-project.png b/apps/docs/public/img/guides/integrations/vercel/create-supabase-project.png deleted file mode 100644 index bafa3f4007696..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/create-supabase-project.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/create-vercel-project.png b/apps/docs/public/img/guides/integrations/vercel/create-vercel-project.png deleted file mode 100644 index bc79985943330..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/create-vercel-project.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/github-project-url.png b/apps/docs/public/img/guides/integrations/vercel/github-project-url.png deleted file mode 100644 index 5e855935f23d4..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/github-project-url.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/link-vercel-to-supabase.png b/apps/docs/public/img/guides/integrations/vercel/link-vercel-to-supabase.png deleted file mode 100644 index b4da05efe2a94..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/link-vercel-to-supabase.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/repo-settings.png b/apps/docs/public/img/guides/integrations/vercel/repo-settings.png deleted file mode 100644 index 7b96f4b3a1a49..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/repo-settings.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/supabase-integration.png b/apps/docs/public/img/guides/integrations/vercel/supabase-integration.png deleted file mode 100644 index 0a1f0ba5f3c93..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/supabase-integration.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/vercel-link.png b/apps/docs/public/img/guides/integrations/vercel/vercel-link.png deleted file mode 100644 index 1b0961c2160a0..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/vercel-link.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/vercel/vercel-project-dashboard.png b/apps/docs/public/img/guides/integrations/vercel/vercel-project-dashboard.png deleted file mode 100644 index cca9931a856f5..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/vercel/vercel-project-dashboard.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/zuplo/400-bad.png b/apps/docs/public/img/guides/integrations/zuplo/400-bad.png deleted file mode 100644 index a1a5ec5d4e19b..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/zuplo/400-bad.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/zuplo/arch.png b/apps/docs/public/img/guides/integrations/zuplo/arch.png deleted file mode 100644 index af425e632a242..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/zuplo/arch.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/zuplo/dev-portal.png b/apps/docs/public/img/guides/integrations/zuplo/dev-portal.png deleted file mode 100644 index 8c4e582be9331..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/zuplo/dev-portal.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/zuplo/existing-policies.png b/apps/docs/public/img/guides/integrations/zuplo/existing-policies.png deleted file mode 100644 index 26d38ed4dac45..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/zuplo/existing-policies.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/zuplo/new-schema.png b/apps/docs/public/img/guides/integrations/zuplo/new-schema.png deleted file mode 100644 index 937857f37dd8e..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/zuplo/new-schema.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/zuplo/open-in-browser.png b/apps/docs/public/img/guides/integrations/zuplo/open-in-browser.png deleted file mode 100644 index e04e2ca476469..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/zuplo/open-in-browser.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/zuplo/secret-role.png b/apps/docs/public/img/guides/integrations/zuplo/secret-role.png deleted file mode 100644 index 7cd456a947b74..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/zuplo/secret-role.png and /dev/null differ diff --git a/apps/docs/public/img/guides/integrations/zuplo/test-console.png b/apps/docs/public/img/guides/integrations/zuplo/test-console.png deleted file mode 100644 index f51f187d07efc..0000000000000 Binary files a/apps/docs/public/img/guides/integrations/zuplo/test-console.png and /dev/null differ diff --git a/apps/docs/public/img/guides/kotlin/android-studio-new-project.png b/apps/docs/public/img/guides/kotlin/android-studio-new-project.png deleted file mode 100644 index 705814071820a..0000000000000 Binary files a/apps/docs/public/img/guides/kotlin/android-studio-new-project.png and /dev/null differ diff --git a/apps/docs/public/img/guides/kotlin/google-cloud-oauth-credentials-create.png b/apps/docs/public/img/guides/kotlin/google-cloud-oauth-credentials-create.png deleted file mode 100644 index 724d07fb63b6d..0000000000000 Binary files a/apps/docs/public/img/guides/kotlin/google-cloud-oauth-credentials-create.png and /dev/null differ diff --git a/apps/docs/public/img/guides/kotlin/gradle-dependencies.png b/apps/docs/public/img/guides/kotlin/gradle-dependencies.png deleted file mode 100644 index fdb4c035935b1..0000000000000 Binary files a/apps/docs/public/img/guides/kotlin/gradle-dependencies.png and /dev/null differ diff --git a/apps/docs/public/img/guides/kotlin/manage-product-cover.png b/apps/docs/public/img/guides/kotlin/manage-product-cover.png deleted file mode 100644 index 5986b8bc9fcca..0000000000000 Binary files a/apps/docs/public/img/guides/kotlin/manage-product-cover.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/exhaust-cpu-report.png b/apps/docs/public/img/guides/platform/exhaust-cpu-report.png deleted file mode 100644 index 8d62afb6de177..0000000000000 Binary files a/apps/docs/public/img/guides/platform/exhaust-cpu-report.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/logs-api.png b/apps/docs/public/img/guides/platform/logs/logs-api.png deleted file mode 100644 index 798abee5f733f..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/logs-api.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/logs-auth.png b/apps/docs/public/img/guides/platform/logs/logs-auth.png deleted file mode 100644 index a020bb86430ad..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/logs-auth.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/logs-database.png b/apps/docs/public/img/guides/platform/logs/logs-database.png deleted file mode 100644 index 78f9036eeaa40..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/logs-database.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/logs-explorer.png b/apps/docs/public/img/guides/platform/logs/logs-explorer.png deleted file mode 100644 index 3d21fb0569c18..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/logs-explorer.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/logs-functions-edge.png b/apps/docs/public/img/guides/platform/logs/logs-functions-edge.png deleted file mode 100644 index 2d0d699cac148..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/logs-functions-edge.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/logs-functions.png b/apps/docs/public/img/guides/platform/logs/logs-functions.png deleted file mode 100644 index efd455955c97e..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/logs-functions.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/logs-realtime.png b/apps/docs/public/img/guides/platform/logs/logs-realtime.png deleted file mode 100644 index 4b93e87e99072..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/logs-realtime.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/logs-storage.png b/apps/docs/public/img/guides/platform/logs/logs-storage.png deleted file mode 100644 index d0f98ea43cc9a..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/logs-storage.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/unnesting-2-dark.png b/apps/docs/public/img/guides/platform/logs/unnesting-2-dark.png deleted file mode 100644 index eeb81e2839efe..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/unnesting-2-dark.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/unnesting-2.png b/apps/docs/public/img/guides/platform/logs/unnesting-2.png deleted file mode 100644 index 86ed5cb385f5c..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/unnesting-2.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/unnesting-none-dark.png b/apps/docs/public/img/guides/platform/logs/unnesting-none-dark.png deleted file mode 100644 index 3d2b0ccc1d703..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/unnesting-none-dark.png and /dev/null differ diff --git a/apps/docs/public/img/guides/platform/logs/unnesting-none.png b/apps/docs/public/img/guides/platform/logs/unnesting-none.png deleted file mode 100644 index 71cb27efeceb4..0000000000000 Binary files a/apps/docs/public/img/guides/platform/logs/unnesting-none.png and /dev/null differ diff --git a/apps/docs/public/img/guides/realtime/realtime-arch.png b/apps/docs/public/img/guides/realtime/realtime-arch.png deleted file mode 100644 index fca216142b1b7..0000000000000 Binary files a/apps/docs/public/img/guides/realtime/realtime-arch.png and /dev/null differ diff --git a/apps/docs/public/img/guides/resources/migrating-to-supabase/amazon-rds/amazon-rds_credentials.png b/apps/docs/public/img/guides/resources/migrating-to-supabase/amazon-rds/amazon-rds_credentials.png deleted file mode 100644 index 9a692329b15d8..0000000000000 Binary files a/apps/docs/public/img/guides/resources/migrating-to-supabase/amazon-rds/amazon-rds_credentials.png and /dev/null differ diff --git a/apps/docs/public/img/guides/resources/migrating-to-supabase/amazon-rds/supabase_dashboard.png b/apps/docs/public/img/guides/resources/migrating-to-supabase/amazon-rds/supabase_dashboard.png deleted file mode 100644 index 3a1ff5b9dafb3..0000000000000 Binary files a/apps/docs/public/img/guides/resources/migrating-to-supabase/amazon-rds/supabase_dashboard.png and /dev/null differ diff --git a/apps/docs/public/img/guides/resources/migrating-to-supabase/render/render_dashboard.png b/apps/docs/public/img/guides/resources/migrating-to-supabase/render/render_dashboard.png deleted file mode 100644 index 1645901dc2390..0000000000000 Binary files a/apps/docs/public/img/guides/resources/migrating-to-supabase/render/render_dashboard.png and /dev/null differ diff --git a/apps/docs/public/img/guides/resources/migrating-to-supabase/render/supabase_dashboard.png b/apps/docs/public/img/guides/resources/migrating-to-supabase/render/supabase_dashboard.png deleted file mode 100644 index 3a1ff5b9dafb3..0000000000000 Binary files a/apps/docs/public/img/guides/resources/migrating-to-supabase/render/supabase_dashboard.png and /dev/null differ diff --git a/apps/docs/public/img/hacktoberfest.png b/apps/docs/public/img/hacktoberfest.png deleted file mode 100644 index 1df6e4aabaa61..0000000000000 Binary files a/apps/docs/public/img/hacktoberfest.png and /dev/null differ diff --git a/apps/docs/public/img/hn-launch.png b/apps/docs/public/img/hn-launch.png deleted file mode 100644 index 33506a380757c..0000000000000 Binary files a/apps/docs/public/img/hn-launch.png and /dev/null differ diff --git a/apps/docs/public/img/how-client-libs.png b/apps/docs/public/img/how-client-libs.png deleted file mode 100644 index 6362beeac6776..0000000000000 Binary files a/apps/docs/public/img/how-client-libs.png and /dev/null differ diff --git a/apps/docs/public/img/how-replication.png b/apps/docs/public/img/how-replication.png deleted file mode 100644 index 97dad9afe1a75..0000000000000 Binary files a/apps/docs/public/img/how-replication.png and /dev/null differ diff --git a/apps/docs/public/img/how-transformation.png b/apps/docs/public/img/how-transformation.png deleted file mode 100644 index d0e404d821b25..0000000000000 Binary files a/apps/docs/public/img/how-transformation.png and /dev/null differ diff --git a/apps/docs/public/img/icons/angular-icon.svg b/apps/docs/public/img/icons/angular-icon.svg deleted file mode 100644 index cb08c6c22fd88..0000000000000 --- a/apps/docs/public/img/icons/angular-icon.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/api-icon.svg b/apps/docs/public/img/icons/api-icon.svg deleted file mode 100644 index 6a7a3b6f5461d..0000000000000 --- a/apps/docs/public/img/icons/api-icon.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/apps/docs/public/img/icons/apple-icon.svg b/apps/docs/public/img/icons/apple-icon.svg deleted file mode 100644 index 3902c024ec057..0000000000000 --- a/apps/docs/public/img/icons/apple-icon.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - diff --git a/apps/docs/public/img/icons/aws-rds-icon.svg b/apps/docs/public/img/icons/aws-rds-icon.svg deleted file mode 100644 index 37e7661d46590..0000000000000 --- a/apps/docs/public/img/icons/aws-rds-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/bitbucket-icon.svg b/apps/docs/public/img/icons/bitbucket-icon.svg deleted file mode 100644 index cdf84686d9306..0000000000000 --- a/apps/docs/public/img/icons/bitbucket-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/c-sharp-icon.svg b/apps/docs/public/img/icons/c-sharp-icon.svg deleted file mode 100644 index 5f58f92862909..0000000000000 --- a/apps/docs/public/img/icons/c-sharp-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/cli-icon.svg b/apps/docs/public/img/icons/cli-icon.svg deleted file mode 100644 index 6b2ea2fc2b2c5..0000000000000 --- a/apps/docs/public/img/icons/cli-icon.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/csharp.png b/apps/docs/public/img/icons/csharp.png deleted file mode 100644 index 37f9fd725faa6..0000000000000 Binary files a/apps/docs/public/img/icons/csharp.png and /dev/null differ diff --git a/apps/docs/public/img/icons/dart-icon.svg b/apps/docs/public/img/icons/dart-icon.svg deleted file mode 100644 index 7fdd552a41e7c..0000000000000 --- a/apps/docs/public/img/icons/dart-icon.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/discord-icon.svg b/apps/docs/public/img/icons/discord-icon.svg deleted file mode 100644 index f8f9cebc2ee37..0000000000000 --- a/apps/docs/public/img/icons/discord-icon.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - discord-icon - - - - - - \ No newline at end of file diff --git a/apps/docs/public/img/icons/email-icon2.svg b/apps/docs/public/img/icons/email-icon2.svg deleted file mode 100644 index 1c65d5b7768fb..0000000000000 --- a/apps/docs/public/img/icons/email-icon2.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/apps/docs/public/img/icons/expo-dark-icon.svg b/apps/docs/public/img/icons/expo-dark-icon.svg deleted file mode 100644 index a6f238b678458..0000000000000 --- a/apps/docs/public/img/icons/expo-dark-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/expo-icon-dark.svg b/apps/docs/public/img/icons/expo-icon-dark.svg deleted file mode 100644 index a6f238b678458..0000000000000 --- a/apps/docs/public/img/icons/expo-icon-dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/expo-icon.svg b/apps/docs/public/img/icons/expo-icon.svg deleted file mode 100644 index e4deeadf1331b..0000000000000 --- a/apps/docs/public/img/icons/expo-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/facebook-icon.svg b/apps/docs/public/img/icons/facebook-icon.svg deleted file mode 100644 index 916c8eff2b759..0000000000000 --- a/apps/docs/public/img/icons/facebook-icon.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/figma-icon.svg b/apps/docs/public/img/icons/figma-icon.svg deleted file mode 100644 index 38539ba64cd51..0000000000000 --- a/apps/docs/public/img/icons/figma-icon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/docs/public/img/icons/firebase-icon.svg b/apps/docs/public/img/icons/firebase-icon.svg deleted file mode 100644 index 57bc1df188022..0000000000000 --- a/apps/docs/public/img/icons/firebase-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/flutter-icon.svg b/apps/docs/public/img/icons/flutter-icon.svg deleted file mode 100644 index a0331868d4900..0000000000000 --- a/apps/docs/public/img/icons/flutter-icon.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/gatsby-icon.svg b/apps/docs/public/img/icons/gatsby-icon.svg deleted file mode 100644 index 6b35d391adcb0..0000000000000 --- a/apps/docs/public/img/icons/gatsby-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/github-icon-light.svg b/apps/docs/public/img/icons/github-icon-light.svg deleted file mode 100644 index 5e9611f831b3f..0000000000000 --- a/apps/docs/public/img/icons/github-icon-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/apps/docs/public/img/icons/github-icon.svg b/apps/docs/public/img/icons/github-icon.svg deleted file mode 100644 index 2667c90a49967..0000000000000 --- a/apps/docs/public/img/icons/github-icon.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/apps/docs/public/img/icons/gitlab-icon.svg b/apps/docs/public/img/icons/gitlab-icon.svg deleted file mode 100644 index 07da670ab19d1..0000000000000 --- a/apps/docs/public/img/icons/gitlab-icon.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - 1x - - - 1x - - - 1x - - - - 1x - - - diff --git a/apps/docs/public/img/icons/google-icon.svg b/apps/docs/public/img/icons/google-icon.svg deleted file mode 100644 index 06dc52f0aa68d..0000000000000 --- a/apps/docs/public/img/icons/google-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/heroku-icon.svg b/apps/docs/public/img/icons/heroku-icon.svg deleted file mode 100644 index eba4556375821..0000000000000 --- a/apps/docs/public/img/icons/heroku-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ 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 deleted file mode 100644 index 470ac11daf116..0000000000000 --- a/apps/docs/public/img/icons/ionic-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/javascript-icon.svg b/apps/docs/public/img/icons/javascript-icon.svg deleted file mode 100644 index 1f203d35ed64e..0000000000000 --- a/apps/docs/public/img/icons/javascript-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/kakao-icon.svg b/apps/docs/public/img/icons/kakao-icon.svg deleted file mode 100644 index e721ec2b432fa..0000000000000 --- a/apps/docs/public/img/icons/kakao-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/keycloak-icon.svg b/apps/docs/public/img/icons/keycloak-icon.svg deleted file mode 100644 index 21c2bf0c57a24..0000000000000 --- a/apps/docs/public/img/icons/keycloak-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/docs/public/img/icons/kotlin-icon.svg b/apps/docs/public/img/icons/kotlin-icon.svg deleted file mode 100644 index 93fee78927385..0000000000000 --- a/apps/docs/public/img/icons/kotlin-icon.svg +++ /dev/null @@ -1 +0,0 @@ -icon_Kotlin \ No newline at end of file diff --git a/apps/docs/public/img/icons/libraries/c-sharp-icon.svg b/apps/docs/public/img/icons/libraries/c-sharp-icon.svg deleted file mode 100644 index 5f58f92862909..0000000000000 --- a/apps/docs/public/img/icons/libraries/c-sharp-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/libraries/dart-icon.svg b/apps/docs/public/img/icons/libraries/dart-icon.svg deleted file mode 100644 index 7fdd552a41e7c..0000000000000 --- a/apps/docs/public/img/icons/libraries/dart-icon.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/libraries/expo-icon.svg b/apps/docs/public/img/icons/libraries/expo-icon.svg deleted file mode 100644 index e4deeadf1331b..0000000000000 --- a/apps/docs/public/img/icons/libraries/expo-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/libraries/flutter-icon.svg b/apps/docs/public/img/icons/libraries/flutter-icon.svg deleted file mode 100644 index a0331868d4900..0000000000000 --- a/apps/docs/public/img/icons/libraries/flutter-icon.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/libraries/javascript-icon.svg b/apps/docs/public/img/icons/libraries/javascript-icon.svg deleted file mode 100644 index 1f203d35ed64e..0000000000000 --- a/apps/docs/public/img/icons/libraries/javascript-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/libraries/kotlin-icon.svg b/apps/docs/public/img/icons/libraries/kotlin-icon.svg deleted file mode 100644 index 93fee78927385..0000000000000 --- a/apps/docs/public/img/icons/libraries/kotlin-icon.svg +++ /dev/null @@ -1 +0,0 @@ -icon_Kotlin \ No newline at end of file diff --git a/apps/docs/public/img/icons/libraries/nestjs-icon.svg b/apps/docs/public/img/icons/libraries/nestjs-icon.svg deleted file mode 100644 index 6deb3ed54ee5f..0000000000000 --- a/apps/docs/public/img/icons/libraries/nestjs-icon.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/libraries/nextjs-dark-icon.svg b/apps/docs/public/img/icons/libraries/nextjs-dark-icon.svg deleted file mode 100644 index 99afa3413d30f..0000000000000 --- a/apps/docs/public/img/icons/libraries/nextjs-dark-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/docs/public/img/icons/libraries/python-icon.svg b/apps/docs/public/img/icons/libraries/python-icon.svg deleted file mode 100644 index 366f52f339329..0000000000000 --- a/apps/docs/public/img/icons/libraries/python-icon.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/libraries/react-icon.svg b/apps/docs/public/img/icons/libraries/react-icon.svg deleted file mode 100644 index 88860de572213..0000000000000 --- a/apps/docs/public/img/icons/libraries/react-icon.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/libraries/react-native-icon.svg b/apps/docs/public/img/icons/libraries/react-native-icon.svg deleted file mode 100644 index 88860de572213..0000000000000 --- a/apps/docs/public/img/icons/libraries/react-native-icon.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/libraries/rust-icon.svg b/apps/docs/public/img/icons/libraries/rust-icon.svg deleted file mode 100644 index b486919ff0596..0000000000000 --- a/apps/docs/public/img/icons/libraries/rust-icon.svg +++ /dev/null @@ -1,2 +0,0 @@ - -Rust programming language logoimage/svg+xml diff --git a/apps/docs/public/img/icons/libraries/svelte-icon.svg b/apps/docs/public/img/icons/libraries/svelte-icon.svg deleted file mode 100644 index 4bf279659a930..0000000000000 --- a/apps/docs/public/img/icons/libraries/svelte-icon.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - diff --git a/apps/docs/public/img/icons/libraries/vuejs-icon.svg b/apps/docs/public/img/icons/libraries/vuejs-icon.svg deleted file mode 100644 index a1d285eb2a185..0000000000000 --- a/apps/docs/public/img/icons/libraries/vuejs-icon.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/apps/docs/public/img/icons/linkedin-icon.svg b/apps/docs/public/img/icons/linkedin-icon.svg deleted file mode 100644 index 1c15b7e715a1e..0000000000000 --- a/apps/docs/public/img/icons/linkedin-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/ai-light.svg b/apps/docs/public/img/icons/menu/ai-light.svg deleted file mode 100644 index 25cbb8117122f..0000000000000 --- a/apps/docs/public/img/icons/menu/ai-light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/ai.svg b/apps/docs/public/img/icons/menu/ai.svg deleted file mode 100644 index 12673e4ccce30..0000000000000 --- a/apps/docs/public/img/icons/menu/ai.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/analytics-light.svg b/apps/docs/public/img/icons/menu/analytics-light.svg deleted file mode 100644 index 3cea218cd72ff..0000000000000 --- a/apps/docs/public/img/icons/menu/analytics-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/analytics.svg b/apps/docs/public/img/icons/menu/analytics.svg deleted file mode 100644 index 2c3be34319ee7..0000000000000 --- a/apps/docs/public/img/icons/menu/analytics.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/auth-light.svg b/apps/docs/public/img/icons/menu/auth-light.svg deleted file mode 100644 index b32fd06213a04..0000000000000 --- a/apps/docs/public/img/icons/menu/auth-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/auth.svg b/apps/docs/public/img/icons/menu/auth.svg deleted file mode 100644 index 49fcad9470304..0000000000000 --- a/apps/docs/public/img/icons/menu/auth.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/c-sharp-icon.svg b/apps/docs/public/img/icons/menu/c-sharp-icon.svg deleted file mode 100644 index 40d0375079dd7..0000000000000 --- a/apps/docs/public/img/icons/menu/c-sharp-icon.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/dart.svg b/apps/docs/public/img/icons/menu/dart.svg deleted file mode 100644 index b3fea91804201..0000000000000 --- a/apps/docs/public/img/icons/menu/dart.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/database-light.svg b/apps/docs/public/img/icons/menu/database-light.svg deleted file mode 100644 index c44d1fcde15aa..0000000000000 --- a/apps/docs/public/img/icons/menu/database-light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/database.svg b/apps/docs/public/img/icons/menu/database.svg deleted file mode 100644 index 80d0254d7e8df..0000000000000 --- a/apps/docs/public/img/icons/menu/database.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/extensions-light.svg b/apps/docs/public/img/icons/menu/extensions-light.svg deleted file mode 100644 index 1ba220fa78b81..0000000000000 --- a/apps/docs/public/img/icons/menu/extensions-light.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/apps/docs/public/img/icons/menu/functions-light.svg b/apps/docs/public/img/icons/menu/functions-light.svg deleted file mode 100644 index 37dea5670d476..0000000000000 --- a/apps/docs/public/img/icons/menu/functions-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/functions.svg b/apps/docs/public/img/icons/menu/functions.svg deleted file mode 100644 index 734a4c89e51ef..0000000000000 --- a/apps/docs/public/img/icons/menu/functions.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/getting-started-light.svg b/apps/docs/public/img/icons/menu/getting-started-light.svg deleted file mode 100644 index 8767de7774c3a..0000000000000 --- a/apps/docs/public/img/icons/menu/getting-started-light.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/docs/public/img/icons/menu/getting-started.svg b/apps/docs/public/img/icons/menu/getting-started.svg deleted file mode 100644 index 48507ca77f12e..0000000000000 --- a/apps/docs/public/img/icons/menu/getting-started.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/docs/public/img/icons/menu/home-light.svg b/apps/docs/public/img/icons/menu/home-light.svg deleted file mode 100644 index 4188b1807b83c..0000000000000 --- a/apps/docs/public/img/icons/menu/home-light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/home.svg b/apps/docs/public/img/icons/menu/home.svg deleted file mode 100644 index 8240c97036938..0000000000000 --- a/apps/docs/public/img/icons/menu/home.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/integrations-light.svg b/apps/docs/public/img/icons/menu/integrations-light.svg deleted file mode 100644 index cea01318cb424..0000000000000 --- a/apps/docs/public/img/icons/menu/integrations-light.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/apps/docs/public/img/icons/menu/integrations.svg b/apps/docs/public/img/icons/menu/integrations.svg deleted file mode 100644 index 1e0027051c8b3..0000000000000 --- a/apps/docs/public/img/icons/menu/integrations.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/apps/docs/public/img/icons/menu/platform-light.svg b/apps/docs/public/img/icons/menu/platform-light.svg deleted file mode 100644 index 8712e24c76f38..0000000000000 --- a/apps/docs/public/img/icons/menu/platform-light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/platform.svg b/apps/docs/public/img/icons/menu/platform.svg deleted file mode 100644 index febc128769bb0..0000000000000 --- a/apps/docs/public/img/icons/menu/platform.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/realtime-light.svg b/apps/docs/public/img/icons/menu/realtime-light.svg deleted file mode 100644 index 3cea218cd72ff..0000000000000 --- a/apps/docs/public/img/icons/menu/realtime-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/realtime.svg b/apps/docs/public/img/icons/menu/realtime.svg deleted file mode 100644 index 2c3be34319ee7..0000000000000 --- a/apps/docs/public/img/icons/menu/realtime.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-analytics-light.svg b/apps/docs/public/img/icons/menu/reference-analytics-light.svg deleted file mode 100644 index 840fb813f926e..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-analytics-light.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/docs/public/img/icons/menu/reference-analytics.svg b/apps/docs/public/img/icons/menu/reference-analytics.svg deleted file mode 100644 index 840fb813f926e..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-analytics.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/docs/public/img/icons/menu/reference-api-light.svg b/apps/docs/public/img/icons/menu/reference-api-light.svg deleted file mode 100644 index c17b3fa3dc686..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-api-light.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-api.svg b/apps/docs/public/img/icons/menu/reference-api.svg deleted file mode 100644 index e26937c907173..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-api.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-auth-light.svg b/apps/docs/public/img/icons/menu/reference-auth-light.svg deleted file mode 100644 index 3995c790842f1..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-auth-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ 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 deleted file mode 100644 index ca43d9d0b20c5..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-auth.svg +++ /dev/null @@ -1 +0,0 @@ - \ 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 deleted file mode 100644 index b3a662bea7ae9..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-cli-light.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-cli.svg b/apps/docs/public/img/icons/menu/reference-cli.svg deleted file mode 100644 index b239a47e06bd1..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-cli.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-csharp-light.svg b/apps/docs/public/img/icons/menu/reference-csharp-light.svg deleted file mode 100644 index 782f87bcc40fc..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-csharp-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/reference-csharp.svg b/apps/docs/public/img/icons/menu/reference-csharp.svg deleted file mode 100644 index 84c1dcf896667..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-csharp.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-dart-light.svg b/apps/docs/public/img/icons/menu/reference-dart-light.svg deleted file mode 100644 index 178f51a5b88e6..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-dart-light.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-dart.svg b/apps/docs/public/img/icons/menu/reference-dart.svg deleted file mode 100644 index 33f9ad24a2730..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-dart.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-functions-light.svg b/apps/docs/public/img/icons/menu/reference-functions-light.svg deleted file mode 100644 index 37dea5670d476..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-functions-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-functions.svg b/apps/docs/public/img/icons/menu/reference-functions.svg deleted file mode 100644 index 734a4c89e51ef..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-functions.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-javascript-light.svg b/apps/docs/public/img/icons/menu/reference-javascript-light.svg deleted file mode 100644 index a11845dff918d..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-javascript-light.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-javascript.svg b/apps/docs/public/img/icons/menu/reference-javascript.svg deleted file mode 100644 index f8ce1de040358..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-javascript.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-kotlin-light.svg b/apps/docs/public/img/icons/menu/reference-kotlin-light.svg deleted file mode 100644 index fb441330f2ad3..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-kotlin-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-kotlin.svg b/apps/docs/public/img/icons/menu/reference-kotlin.svg deleted file mode 100644 index 00c834f31a166..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-kotlin.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-light.svg b/apps/docs/public/img/icons/menu/reference-light.svg deleted file mode 100644 index 1e241072ca20d..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-light.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-python-light.svg b/apps/docs/public/img/icons/menu/reference-python-light.svg deleted file mode 100644 index 1ac57aae572ee..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-python-light.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-python.svg b/apps/docs/public/img/icons/menu/reference-python.svg deleted file mode 100644 index 4ca064b0b7384..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-python.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-realtime-light.svg b/apps/docs/public/img/icons/menu/reference-realtime-light.svg deleted file mode 100644 index 1a9bef014b3d1..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-realtime-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ 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 deleted file mode 100644 index bbb0c056edb55..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-realtime.svg +++ /dev/null @@ -1 +0,0 @@ - \ 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 deleted file mode 100644 index be8a47ae0a627..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-storage-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ 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 deleted file mode 100644 index bdc394e6f5486..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-storage.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/reference-swift-light.svg b/apps/docs/public/img/icons/menu/reference-swift-light.svg deleted file mode 100644 index 149f5459b15e7..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-swift-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/reference-swift.svg b/apps/docs/public/img/icons/menu/reference-swift.svg deleted file mode 100644 index 10bec817613b4..0000000000000 --- a/apps/docs/public/img/icons/menu/reference-swift.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/menu/reference.svg b/apps/docs/public/img/icons/menu/reference.svg deleted file mode 100644 index 90ff154832ec6..0000000000000 --- a/apps/docs/public/img/icons/menu/reference.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/apps/docs/public/img/icons/menu/references-functions-light.svg b/apps/docs/public/img/icons/menu/references-functions-light.svg deleted file mode 100644 index 37dea5670d476..0000000000000 --- a/apps/docs/public/img/icons/menu/references-functions-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/menu/resources-light.svg b/apps/docs/public/img/icons/menu/resources-light.svg deleted file mode 100644 index 8712e24c76f38..0000000000000 --- a/apps/docs/public/img/icons/menu/resources-light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/resources.svg b/apps/docs/public/img/icons/menu/resources.svg deleted file mode 100644 index febc128769bb0..0000000000000 --- a/apps/docs/public/img/icons/menu/resources.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/storage-light.svg b/apps/docs/public/img/icons/menu/storage-light.svg deleted file mode 100644 index 308b575038707..0000000000000 --- a/apps/docs/public/img/icons/menu/storage-light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/storage.svg b/apps/docs/public/img/icons/menu/storage.svg deleted file mode 100644 index 28e14c9438716..0000000000000 --- a/apps/docs/public/img/icons/menu/storage.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/docs/public/img/icons/menu/swift.svg b/apps/docs/public/img/icons/menu/swift.svg deleted file mode 100644 index d11ab08bb5875..0000000000000 --- a/apps/docs/public/img/icons/menu/swift.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/menu/tutorials-light.svg b/apps/docs/public/img/icons/menu/tutorials-light.svg deleted file mode 100644 index 97c14dfbd7a4d..0000000000000 --- a/apps/docs/public/img/icons/menu/tutorials-light.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/docs/public/img/icons/menu/tutorials.svg b/apps/docs/public/img/icons/menu/tutorials.svg deleted file mode 100644 index 6b2847c243d87..0000000000000 --- a/apps/docs/public/img/icons/menu/tutorials.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/docs/public/img/icons/messagebird-icon.svg b/apps/docs/public/img/icons/messagebird-icon.svg deleted file mode 100644 index b9c98603bc752..0000000000000 --- a/apps/docs/public/img/icons/messagebird-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/microsoft-icon.svg b/apps/docs/public/img/icons/microsoft-icon.svg deleted file mode 100644 index 5334aa7ca6864..0000000000000 --- a/apps/docs/public/img/icons/microsoft-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/nestjs-icon.svg b/apps/docs/public/img/icons/nestjs-icon.svg deleted file mode 100644 index 6deb3ed54ee5f..0000000000000 --- a/apps/docs/public/img/icons/nestjs-icon.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - diff --git a/apps/docs/public/img/icons/nextjs-icon-light.svg b/apps/docs/public/img/icons/nextjs-icon-light.svg deleted file mode 100644 index 135acfe233d95..0000000000000 --- a/apps/docs/public/img/icons/nextjs-icon-light.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/nextjs-icon.svg b/apps/docs/public/img/icons/nextjs-icon.svg deleted file mode 100644 index e2da0adf97e84..0000000000000 --- a/apps/docs/public/img/icons/nextjs-icon.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/nextjs.svg b/apps/docs/public/img/icons/nextjs.svg deleted file mode 100644 index 843612152bbff..0000000000000 Binary files a/apps/docs/public/img/icons/nextjs.svg and /dev/null differ diff --git a/apps/docs/public/img/icons/notion-icon.svg b/apps/docs/public/img/icons/notion-icon.svg deleted file mode 100644 index 38303fc72fdcd..0000000000000 --- a/apps/docs/public/img/icons/notion-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/nuxt-icon.svg b/apps/docs/public/img/icons/nuxt-icon.svg deleted file mode 100644 index 1330c8336aa2d..0000000000000 --- a/apps/docs/public/img/icons/nuxt-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/docs/public/img/icons/openai_logo-light.svg b/apps/docs/public/img/icons/openai_logo-light.svg deleted file mode 100644 index 3b4eff961f37e..0000000000000 --- a/apps/docs/public/img/icons/openai_logo-light.svg +++ /dev/null @@ -1,2 +0,0 @@ - -OpenAI icon \ No newline at end of file diff --git a/apps/docs/public/img/icons/openai_logo.svg b/apps/docs/public/img/icons/openai_logo.svg deleted file mode 100644 index 9aacd2a1115ad..0000000000000 --- a/apps/docs/public/img/icons/openai_logo.svg +++ /dev/null @@ -1,2 +0,0 @@ - -OpenAI icon \ No newline at end of file diff --git a/apps/docs/public/img/icons/phone-icon4.svg b/apps/docs/public/img/icons/phone-icon4.svg deleted file mode 100644 index 49a477ef9dfd7..0000000000000 --- a/apps/docs/public/img/icons/phone-icon4.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/apps/docs/public/img/icons/python-icon.svg b/apps/docs/public/img/icons/python-icon.svg deleted file mode 100644 index 366f52f339329..0000000000000 --- a/apps/docs/public/img/icons/python-icon.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/react-icon.svg b/apps/docs/public/img/icons/react-icon.svg deleted file mode 100644 index 88860de572213..0000000000000 --- a/apps/docs/public/img/icons/react-icon.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/react-native-icon.svg b/apps/docs/public/img/icons/react-native-icon.svg deleted file mode 100644 index 88860de572213..0000000000000 --- a/apps/docs/public/img/icons/react-native-icon.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/redwood-icon.svg b/apps/docs/public/img/icons/redwood-icon.svg deleted file mode 100644 index e85b686192113..0000000000000 --- a/apps/docs/public/img/icons/redwood-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/redwoodjs-icon.svg b/apps/docs/public/img/icons/redwoodjs-icon.svg deleted file mode 100644 index ed4d687b8c5e9..0000000000000 --- a/apps/docs/public/img/icons/redwoodjs-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/docs/public/img/icons/refine-icon.svg b/apps/docs/public/img/icons/refine-icon.svg deleted file mode 100644 index 7f2e1f8d82c55..0000000000000 --- a/apps/docs/public/img/icons/refine-icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/remix-icon-light.svg b/apps/docs/public/img/icons/remix-icon-light.svg deleted file mode 100644 index 111b082c2b8dc..0000000000000 --- a/apps/docs/public/img/icons/remix-icon-light.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/docs/public/img/icons/remix-icon.svg b/apps/docs/public/img/icons/remix-icon.svg deleted file mode 100644 index 2bfc43cc12544..0000000000000 --- a/apps/docs/public/img/icons/remix-icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/docs/public/img/icons/render-icon.svg b/apps/docs/public/img/icons/render-icon.svg deleted file mode 100644 index 49e41abdba458..0000000000000 --- a/apps/docs/public/img/icons/render-icon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/apps/docs/public/img/icons/rust-icon.svg b/apps/docs/public/img/icons/rust-icon.svg deleted file mode 100644 index b486919ff0596..0000000000000 --- a/apps/docs/public/img/icons/rust-icon.svg +++ /dev/null @@ -1,2 +0,0 @@ - -Rust programming language logoimage/svg+xml diff --git a/apps/docs/public/img/icons/slack-icon.svg b/apps/docs/public/img/icons/slack-icon.svg deleted file mode 100644 index 69a4eb6a217b9..0000000000000 --- a/apps/docs/public/img/icons/slack-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/solidjs-icon.svg b/apps/docs/public/img/icons/solidjs-icon.svg deleted file mode 100644 index 1e60674bb8157..0000000000000 --- a/apps/docs/public/img/icons/solidjs-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/spotify-icon.svg b/apps/docs/public/img/icons/spotify-icon.svg deleted file mode 100644 index 41d8137620fcc..0000000000000 --- a/apps/docs/public/img/icons/spotify-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/svelte-icon.svg b/apps/docs/public/img/icons/svelte-icon.svg deleted file mode 100644 index 4bf279659a930..0000000000000 --- a/apps/docs/public/img/icons/svelte-icon.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - diff --git a/apps/docs/public/img/icons/swift-icon.svg b/apps/docs/public/img/icons/swift-icon.svg deleted file mode 100644 index d11ab08bb5875..0000000000000 --- a/apps/docs/public/img/icons/swift-icon.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/apps/docs/public/img/icons/textlocal-icon.png b/apps/docs/public/img/icons/textlocal-icon.png deleted file mode 100644 index 101b67c0724fd..0000000000000 Binary files a/apps/docs/public/img/icons/textlocal-icon.png and /dev/null differ diff --git a/apps/docs/public/img/icons/twilio-icon.svg b/apps/docs/public/img/icons/twilio-icon.svg deleted file mode 100644 index 76d12c7164aed..0000000000000 --- a/apps/docs/public/img/icons/twilio-icon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/docs/public/img/icons/twitch-icon.svg b/apps/docs/public/img/icons/twitch-icon.svg deleted file mode 100644 index ee4a95fbf0290..0000000000000 --- a/apps/docs/public/img/icons/twitch-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/icons/twitter-icon.svg b/apps/docs/public/img/icons/twitter-icon.svg deleted file mode 100644 index c0364cc1527af..0000000000000 --- a/apps/docs/public/img/icons/twitter-icon.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/apps/docs/public/img/icons/typescript-icon.svg b/apps/docs/public/img/icons/typescript-icon.svg deleted file mode 100644 index 0abfb1b4b899c..0000000000000 --- a/apps/docs/public/img/icons/typescript-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ 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 deleted file mode 100644 index f21da2bfbf4bd..0000000000000 --- a/apps/docs/public/img/icons/vonage-icon-light.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/docs/public/img/icons/vonage-icon.svg b/apps/docs/public/img/icons/vonage-icon.svg deleted file mode 100644 index aa0e2c177f405..0000000000000 --- a/apps/docs/public/img/icons/vonage-icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/docs/public/img/icons/vuejs-icon.svg b/apps/docs/public/img/icons/vuejs-icon.svg deleted file mode 100644 index a1d285eb2a185..0000000000000 --- a/apps/docs/public/img/icons/vuejs-icon.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/apps/docs/public/img/icons/workos-icon.svg b/apps/docs/public/img/icons/workos-icon.svg deleted file mode 100644 index 1827fa0b275a5..0000000000000 --- a/apps/docs/public/img/icons/workos-icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/docs/public/img/icons/zoom-icon.svg b/apps/docs/public/img/icons/zoom-icon.svg deleted file mode 100644 index d68ee1779b550..0000000000000 --- a/apps/docs/public/img/icons/zoom-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/img/invite-users.gif b/apps/docs/public/img/invite-users.gif deleted file mode 100644 index bd3a20c1c1fe0..0000000000000 Binary files a/apps/docs/public/img/invite-users.gif and /dev/null differ diff --git a/apps/docs/public/img/ionic-demos/ionic-angular-account.png b/apps/docs/public/img/ionic-demos/ionic-angular-account.png deleted file mode 100644 index 3aabf70a484ae..0000000000000 Binary files a/apps/docs/public/img/ionic-demos/ionic-angular-account.png and /dev/null differ diff --git a/apps/docs/public/img/ionic-demos/ionic-angular.png b/apps/docs/public/img/ionic-demos/ionic-angular.png deleted file mode 100644 index 1535e5ad8f1c7..0000000000000 Binary files a/apps/docs/public/img/ionic-demos/ionic-angular.png and /dev/null differ diff --git a/apps/docs/public/img/ionic-demos/ionic-react.png b/apps/docs/public/img/ionic-demos/ionic-react.png deleted file mode 100644 index 379bde231e134..0000000000000 Binary files a/apps/docs/public/img/ionic-demos/ionic-react.png and /dev/null differ diff --git a/apps/docs/public/img/ionic-demos/ionic-vue.png b/apps/docs/public/img/ionic-demos/ionic-vue.png deleted file mode 100644 index b3b588e1f3e0b..0000000000000 Binary files a/apps/docs/public/img/ionic-demos/ionic-vue.png and /dev/null differ diff --git a/apps/docs/public/img/keyboard-shortcuts.png b/apps/docs/public/img/keyboard-shortcuts.png deleted file mode 100644 index 1d91c48b7bfcb..0000000000000 Binary files a/apps/docs/public/img/keyboard-shortcuts.png and /dev/null differ diff --git a/apps/docs/public/img/logs-api.png b/apps/docs/public/img/logs-api.png deleted file mode 100644 index 79c6aaa12fc4e..0000000000000 Binary files a/apps/docs/public/img/logs-api.png and /dev/null differ diff --git a/apps/docs/public/img/logs-auth.png b/apps/docs/public/img/logs-auth.png deleted file mode 100644 index 645fc87bdb5da..0000000000000 Binary files a/apps/docs/public/img/logs-auth.png and /dev/null differ diff --git a/apps/docs/public/img/logs-database.png b/apps/docs/public/img/logs-database.png deleted file mode 100644 index 176549de5ab9f..0000000000000 Binary files a/apps/docs/public/img/logs-database.png and /dev/null differ diff --git a/apps/docs/public/img/logs-explorer.png b/apps/docs/public/img/logs-explorer.png deleted file mode 100644 index 8527b8b30543e..0000000000000 Binary files a/apps/docs/public/img/logs-explorer.png and /dev/null differ diff --git a/apps/docs/public/img/logs-functions-edge.png b/apps/docs/public/img/logs-functions-edge.png deleted file mode 100644 index decbe04b664c9..0000000000000 Binary files a/apps/docs/public/img/logs-functions-edge.png and /dev/null differ diff --git a/apps/docs/public/img/logs-functions.png b/apps/docs/public/img/logs-functions.png deleted file mode 100644 index 4357b9da74c4a..0000000000000 Binary files a/apps/docs/public/img/logs-functions.png and /dev/null differ diff --git a/apps/docs/public/img/logs-realtime.png b/apps/docs/public/img/logs-realtime.png deleted file mode 100644 index 41cff80041582..0000000000000 Binary files a/apps/docs/public/img/logs-realtime.png and /dev/null differ diff --git a/apps/docs/public/img/logs-storage.png b/apps/docs/public/img/logs-storage.png deleted file mode 100644 index 4428ffbde51cd..0000000000000 Binary files a/apps/docs/public/img/logs-storage.png and /dev/null differ diff --git a/apps/docs/public/img/magic-links.png b/apps/docs/public/img/magic-links.png deleted file mode 100644 index acc767b500179..0000000000000 Binary files a/apps/docs/public/img/magic-links.png and /dev/null differ diff --git a/apps/docs/public/img/monitoro-requests.png b/apps/docs/public/img/monitoro-requests.png deleted file mode 100644 index 623ba2edc295e..0000000000000 Binary files a/apps/docs/public/img/monitoro-requests.png and /dev/null differ diff --git a/apps/docs/public/img/new-sponsor-dark.png b/apps/docs/public/img/new-sponsor-dark.png deleted file mode 100644 index f9956d222d685..0000000000000 Binary files a/apps/docs/public/img/new-sponsor-dark.png and /dev/null differ diff --git a/apps/docs/public/img/omar-monitoro.png b/apps/docs/public/img/omar-monitoro.png deleted file mode 100644 index 5d285f2e240f6..0000000000000 Binary files a/apps/docs/public/img/omar-monitoro.png and /dev/null differ diff --git a/apps/docs/public/img/postgres-views.png b/apps/docs/public/img/postgres-views.png deleted file mode 100644 index 36a3841bbe039..0000000000000 Binary files a/apps/docs/public/img/postgres-views.png and /dev/null differ diff --git a/apps/docs/public/img/propose-changes.png b/apps/docs/public/img/propose-changes.png deleted file mode 100644 index c240c42184f18..0000000000000 Binary files a/apps/docs/public/img/propose-changes.png and /dev/null differ diff --git a/apps/docs/public/img/purple-glow-dark.png b/apps/docs/public/img/purple-glow-dark.png deleted file mode 100644 index 6740e956d8df8..0000000000000 Binary files a/apps/docs/public/img/purple-glow-dark.png and /dev/null differ diff --git a/apps/docs/public/img/redwoodjs-qs-connection-strings-pool.png b/apps/docs/public/img/redwoodjs-qs-connection-strings-pool.png deleted file mode 100644 index 3718cd797e3e8..0000000000000 Binary files a/apps/docs/public/img/redwoodjs-qs-connection-strings-pool.png and /dev/null differ diff --git a/apps/docs/public/img/redwoodjs-qs-countries-ui.png b/apps/docs/public/img/redwoodjs-qs-countries-ui.png deleted file mode 100644 index 50e98e5630c2a..0000000000000 Binary files a/apps/docs/public/img/redwoodjs-qs-countries-ui.png and /dev/null differ diff --git a/apps/docs/public/img/redwoodjs-qs-new-project.png b/apps/docs/public/img/redwoodjs-qs-new-project.png deleted file mode 100644 index 46cc155599156..0000000000000 Binary files a/apps/docs/public/img/redwoodjs-qs-new-project.png and /dev/null differ diff --git a/apps/docs/public/img/redwoodjs-qs-splash.png b/apps/docs/public/img/redwoodjs-qs-splash.png deleted file mode 100644 index 750e5ad68f31c..0000000000000 Binary files a/apps/docs/public/img/redwoodjs-qs-splash.png and /dev/null differ diff --git a/apps/docs/public/img/refine-qs-countries-ui.png b/apps/docs/public/img/refine-qs-countries-ui.png deleted file mode 100644 index e062c7218783a..0000000000000 Binary files a/apps/docs/public/img/refine-qs-countries-ui.png and /dev/null differ diff --git a/apps/docs/public/img/refine-qs-welcome-page.png b/apps/docs/public/img/refine-qs-welcome-page.png deleted file mode 100644 index 376740a35f780..0000000000000 Binary files a/apps/docs/public/img/refine-qs-welcome-page.png and /dev/null differ diff --git a/apps/docs/public/img/release-dec-2020.jpg b/apps/docs/public/img/release-dec-2020.jpg deleted file mode 100644 index dd6d2d6e76b4f..0000000000000 Binary files a/apps/docs/public/img/release-dec-2020.jpg and /dev/null differ diff --git a/apps/docs/public/img/release-feb-2021.jpg b/apps/docs/public/img/release-feb-2021.jpg deleted file mode 100644 index 9348e74ad4b8e..0000000000000 Binary files a/apps/docs/public/img/release-feb-2021.jpg and /dev/null differ diff --git a/apps/docs/public/img/release-jan-2021.jpg b/apps/docs/public/img/release-jan-2021.jpg deleted file mode 100644 index 7b0df47e0f17b..0000000000000 Binary files a/apps/docs/public/img/release-jan-2021.jpg and /dev/null differ diff --git a/apps/docs/public/img/roboflow-gallery.png b/apps/docs/public/img/roboflow-gallery.png deleted file mode 100644 index 4f04b4afa948f..0000000000000 Binary files a/apps/docs/public/img/roboflow-gallery.png and /dev/null differ diff --git a/apps/docs/public/img/roboflow-og.png b/apps/docs/public/img/roboflow-og.png deleted file mode 100644 index 4dc7c43baf962..0000000000000 Binary files a/apps/docs/public/img/roboflow-og.png and /dev/null differ diff --git a/apps/docs/public/img/roboflow-quote.png b/apps/docs/public/img/roboflow-quote.png deleted file mode 100644 index d88f5c129b411..0000000000000 Binary files a/apps/docs/public/img/roboflow-quote.png and /dev/null differ diff --git a/apps/docs/public/img/roboflow-stat.png b/apps/docs/public/img/roboflow-stat.png deleted file mode 100644 index b83f978e72ad3..0000000000000 Binary files a/apps/docs/public/img/roboflow-stat.png and /dev/null differ diff --git a/apps/docs/public/img/roboflow-website.png b/apps/docs/public/img/roboflow-website.png deleted file mode 100644 index 8e7de1cafab82..0000000000000 Binary files a/apps/docs/public/img/roboflow-website.png and /dev/null differ diff --git a/apps/docs/public/img/sarup-tayfa.png b/apps/docs/public/img/sarup-tayfa.png deleted file mode 100644 index 5c443ca87bf95..0000000000000 Binary files a/apps/docs/public/img/sarup-tayfa.png and /dev/null differ diff --git a/apps/docs/public/img/showcase-logo/supabase-logo.svg b/apps/docs/public/img/showcase-logo/supabase-logo.svg deleted file mode 100644 index 1315b0a5ccfc3..0000000000000 --- a/apps/docs/public/img/showcase-logo/supabase-logo.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/sql-editor.png b/apps/docs/public/img/sql-editor.png deleted file mode 100644 index 2f84849abdecc..0000000000000 Binary files a/apps/docs/public/img/sql-editor.png and /dev/null differ diff --git a/apps/docs/public/img/sso-azure-step-01.png b/apps/docs/public/img/sso-azure-step-01.png deleted file mode 100644 index 2a78633f21c7b..0000000000000 Binary files a/apps/docs/public/img/sso-azure-step-01.png and /dev/null differ diff --git a/apps/docs/public/img/sso-azure-step-02.png b/apps/docs/public/img/sso-azure-step-02.png deleted file mode 100644 index 629afad890a2d..0000000000000 Binary files a/apps/docs/public/img/sso-azure-step-02.png and /dev/null differ diff --git a/apps/docs/public/img/sso-azure-step-03.png b/apps/docs/public/img/sso-azure-step-03.png deleted file mode 100644 index 0c928c7712961..0000000000000 Binary files a/apps/docs/public/img/sso-azure-step-03.png and /dev/null differ diff --git a/apps/docs/public/img/sso-azure-step-04.png b/apps/docs/public/img/sso-azure-step-04.png deleted file mode 100644 index 9208701e31544..0000000000000 Binary files a/apps/docs/public/img/sso-azure-step-04.png and /dev/null differ diff --git a/apps/docs/public/img/sso-azure-step-05.png b/apps/docs/public/img/sso-azure-step-05.png deleted file mode 100644 index e21bf0c2df427..0000000000000 Binary files a/apps/docs/public/img/sso-azure-step-05.png and /dev/null differ diff --git a/apps/docs/public/img/sso-azure-step-06-1.png b/apps/docs/public/img/sso-azure-step-06-1.png deleted file mode 100644 index db94a778abf69..0000000000000 Binary files a/apps/docs/public/img/sso-azure-step-06-1.png and /dev/null differ diff --git a/apps/docs/public/img/sso-azure-step-06-2.png b/apps/docs/public/img/sso-azure-step-06-2.png deleted file mode 100644 index d925a68ae6360..0000000000000 Binary files a/apps/docs/public/img/sso-azure-step-06-2.png and /dev/null differ diff --git a/apps/docs/public/img/sso-azure-step-07.png b/apps/docs/public/img/sso-azure-step-07.png deleted file mode 100644 index 4f8ba5f6c95d5..0000000000000 Binary files a/apps/docs/public/img/sso-azure-step-07.png and /dev/null differ diff --git a/apps/docs/public/img/sso-gsuite-step-01.png b/apps/docs/public/img/sso-gsuite-step-01.png deleted file mode 100644 index 6573728159f1f..0000000000000 Binary files a/apps/docs/public/img/sso-gsuite-step-01.png and /dev/null differ diff --git a/apps/docs/public/img/sso-gsuite-step-02.png b/apps/docs/public/img/sso-gsuite-step-02.png deleted file mode 100644 index b27da233202f1..0000000000000 Binary files a/apps/docs/public/img/sso-gsuite-step-02.png and /dev/null differ diff --git a/apps/docs/public/img/sso-gsuite-step-03.png b/apps/docs/public/img/sso-gsuite-step-03.png deleted file mode 100644 index 6f5b3d5c1f31e..0000000000000 Binary files a/apps/docs/public/img/sso-gsuite-step-03.png and /dev/null differ diff --git a/apps/docs/public/img/sso-gsuite-step-04.png b/apps/docs/public/img/sso-gsuite-step-04.png deleted file mode 100644 index 2247e4ee7b7bf..0000000000000 Binary files a/apps/docs/public/img/sso-gsuite-step-04.png and /dev/null differ diff --git a/apps/docs/public/img/sso-gsuite-step-05.png b/apps/docs/public/img/sso-gsuite-step-05.png deleted file mode 100644 index 7a6ebc7512def..0000000000000 Binary files a/apps/docs/public/img/sso-gsuite-step-05.png and /dev/null differ diff --git a/apps/docs/public/img/sso-gsuite-step-06.png b/apps/docs/public/img/sso-gsuite-step-06.png deleted file mode 100644 index 12041ae849e84..0000000000000 Binary files a/apps/docs/public/img/sso-gsuite-step-06.png and /dev/null differ diff --git a/apps/docs/public/img/sso-gsuite-step-08.png b/apps/docs/public/img/sso-gsuite-step-08.png deleted file mode 100644 index 6fe31d9f15889..0000000000000 Binary files a/apps/docs/public/img/sso-gsuite-step-08.png and /dev/null differ diff --git a/apps/docs/public/img/sso-okta-step-01.png b/apps/docs/public/img/sso-okta-step-01.png deleted file mode 100644 index 97db30227ebf5..0000000000000 Binary files a/apps/docs/public/img/sso-okta-step-01.png and /dev/null differ diff --git a/apps/docs/public/img/sso-okta-step-02.png b/apps/docs/public/img/sso-okta-step-02.png deleted file mode 100644 index e158d00ad5291..0000000000000 Binary files a/apps/docs/public/img/sso-okta-step-02.png and /dev/null differ diff --git a/apps/docs/public/img/sso-okta-step-03.png b/apps/docs/public/img/sso-okta-step-03.png deleted file mode 100644 index ca7ff2495a2f3..0000000000000 Binary files a/apps/docs/public/img/sso-okta-step-03.png and /dev/null differ diff --git a/apps/docs/public/img/sso-okta-step-04.png b/apps/docs/public/img/sso-okta-step-04.png deleted file mode 100644 index 11c01388e771a..0000000000000 Binary files a/apps/docs/public/img/sso-okta-step-04.png and /dev/null differ diff --git a/apps/docs/public/img/sso-okta-step-05.png b/apps/docs/public/img/sso-okta-step-05.png deleted file mode 100644 index bcfd4b8f97b67..0000000000000 Binary files a/apps/docs/public/img/sso-okta-step-05.png and /dev/null differ diff --git a/apps/docs/public/img/sso-okta-step-06.png b/apps/docs/public/img/sso-okta-step-06.png deleted file mode 100644 index b925dac97a855..0000000000000 Binary files a/apps/docs/public/img/sso-okta-step-06.png and /dev/null differ diff --git a/apps/docs/public/img/status-page.png b/apps/docs/public/img/status-page.png deleted file mode 100644 index 8b5460b8a418e..0000000000000 Binary files a/apps/docs/public/img/status-page.png and /dev/null differ diff --git a/apps/docs/public/img/strive-supabase.png b/apps/docs/public/img/strive-supabase.png deleted file mode 100644 index 9656ce4b5b996..0000000000000 Binary files a/apps/docs/public/img/strive-supabase.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-angular-demo.png b/apps/docs/public/img/supabase-angular-demo.png deleted file mode 100644 index 7fbeaa64199b7..0000000000000 Binary files a/apps/docs/public/img/supabase-angular-demo.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-architecture.png b/apps/docs/public/img/supabase-architecture.png deleted file mode 100644 index 4c82d64853394..0000000000000 Binary files a/apps/docs/public/img/supabase-architecture.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-auth-cover.png b/apps/docs/public/img/supabase-auth-cover.png deleted file mode 100644 index 627e77779f737..0000000000000 Binary files a/apps/docs/public/img/supabase-auth-cover.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-december-2020.png b/apps/docs/public/img/supabase-december-2020.png deleted file mode 100644 index 9d871a7799313..0000000000000 Binary files a/apps/docs/public/img/supabase-december-2020.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-flutter-account-page.png b/apps/docs/public/img/supabase-flutter-account-page.png deleted file mode 100644 index 1f275727b7c39..0000000000000 Binary files a/apps/docs/public/img/supabase-flutter-account-page.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-flutter-demo.png b/apps/docs/public/img/supabase-flutter-demo.png deleted file mode 100644 index a9bde86c5901d..0000000000000 Binary files a/apps/docs/public/img/supabase-flutter-demo.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-github-discussions.png b/apps/docs/public/img/supabase-github-discussions.png deleted file mode 100644 index 3cc3deb7e81cb..0000000000000 Binary files a/apps/docs/public/img/supabase-github-discussions.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-github-stars-june.png b/apps/docs/public/img/supabase-github-stars-june.png deleted file mode 100644 index db26c6c30fc2d..0000000000000 Binary files a/apps/docs/public/img/supabase-github-stars-june.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-hacktoberfest-board.png b/apps/docs/public/img/supabase-hacktoberfest-board.png deleted file mode 100644 index de69c097bfa69..0000000000000 Binary files a/apps/docs/public/img/supabase-hacktoberfest-board.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-hn-launch.png b/apps/docs/public/img/supabase-hn-launch.png deleted file mode 100644 index 3f26b60faff24..0000000000000 Binary files a/apps/docs/public/img/supabase-hn-launch.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-january-2021.png b/apps/docs/public/img/supabase-january-2021.png deleted file mode 100644 index 730c79231cbbb..0000000000000 Binary files a/apps/docs/public/img/supabase-january-2021.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-js-1-0.png b/apps/docs/public/img/supabase-js-1-0.png deleted file mode 100644 index dad6ec0a4dd80..0000000000000 Binary files a/apps/docs/public/img/supabase-js-1-0.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-logo-wordmark--dark.png b/apps/docs/public/img/supabase-logo-wordmark--dark.png deleted file mode 100644 index 391cbd1e9b055..0000000000000 Binary files a/apps/docs/public/img/supabase-logo-wordmark--dark.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-logo-wordmark--dark.svg b/apps/docs/public/img/supabase-logo-wordmark--dark.svg deleted file mode 100644 index 9e96fab4ddc8e..0000000000000 --- a/apps/docs/public/img/supabase-logo-wordmark--dark.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/supabase-logo-wordmark--light.png b/apps/docs/public/img/supabase-logo-wordmark--light.png deleted file mode 100644 index 2b369e1372ef9..0000000000000 Binary files a/apps/docs/public/img/supabase-logo-wordmark--light.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-logo-wordmark--light.svg b/apps/docs/public/img/supabase-logo-wordmark--light.svg deleted file mode 100644 index 60cbc71dc7c74..0000000000000 --- a/apps/docs/public/img/supabase-logo-wordmark--light.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/img/supabase-middleware-docker.png b/apps/docs/public/img/supabase-middleware-docker.png deleted file mode 100644 index 29fa1c875e201..0000000000000 Binary files a/apps/docs/public/img/supabase-middleware-docker.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-monaco-editor.png b/apps/docs/public/img/supabase-monaco-editor.png deleted file mode 100644 index f6091d117fd4a..0000000000000 Binary files a/apps/docs/public/img/supabase-monaco-editor.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-monitoro.png b/apps/docs/public/img/supabase-monitoro.png deleted file mode 100644 index 272ad8c47fe67..0000000000000 Binary files a/apps/docs/public/img/supabase-monitoro.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-november-2020.png b/apps/docs/public/img/supabase-november-2020.png deleted file mode 100644 index fcac70e83e575..0000000000000 Binary files a/apps/docs/public/img/supabase-november-2020.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-oauth-logins.png b/apps/docs/public/img/supabase-oauth-logins.png deleted file mode 100644 index 825ae97fb7611..0000000000000 Binary files a/apps/docs/public/img/supabase-oauth-logins.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-october-2020.png b/apps/docs/public/img/supabase-october-2020.png deleted file mode 100644 index 1abacc71a31b3..0000000000000 Binary files a/apps/docs/public/img/supabase-october-2020.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-og-image.png b/apps/docs/public/img/supabase-og-image.png deleted file mode 100644 index c2f4d0ea806de..0000000000000 Binary files a/apps/docs/public/img/supabase-og-image.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-react-demo.png b/apps/docs/public/img/supabase-react-demo.png deleted file mode 100644 index cdeba23d47248..0000000000000 Binary files a/apps/docs/public/img/supabase-react-demo.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-redwoodjs-demo.png b/apps/docs/public/img/supabase-redwoodjs-demo.png deleted file mode 100644 index 51f20b8e9590b..0000000000000 Binary files a/apps/docs/public/img/supabase-redwoodjs-demo.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-refine-demo.png b/apps/docs/public/img/supabase-refine-demo.png deleted file mode 100644 index 6a8f15ff6edee..0000000000000 Binary files a/apps/docs/public/img/supabase-refine-demo.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-september-2020.png b/apps/docs/public/img/supabase-september-2020.png deleted file mode 100644 index 9103aae8db61d..0000000000000 Binary files a/apps/docs/public/img/supabase-september-2020.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-solidjs-demo.png b/apps/docs/public/img/supabase-solidjs-demo.png deleted file mode 100644 index 1e2d075eb459d..0000000000000 Binary files a/apps/docs/public/img/supabase-solidjs-demo.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-strive-school.png b/apps/docs/public/img/supabase-strive-school.png deleted file mode 100644 index 445f48589f830..0000000000000 Binary files a/apps/docs/public/img/supabase-strive-school.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-svelte-demo.png b/apps/docs/public/img/supabase-svelte-demo.png deleted file mode 100644 index 267a5b4cd8dc6..0000000000000 Binary files a/apps/docs/public/img/supabase-svelte-demo.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-tayfa.png b/apps/docs/public/img/supabase-tayfa.png deleted file mode 100644 index 215ce4677e846..0000000000000 Binary files a/apps/docs/public/img/supabase-tayfa.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-traffic-may.png b/apps/docs/public/img/supabase-traffic-may.png deleted file mode 100644 index e5f40eb2c1b9a..0000000000000 Binary files a/apps/docs/public/img/supabase-traffic-may.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-vue-3-demo.png b/apps/docs/public/img/supabase-vue-3-demo.png deleted file mode 100644 index f3151a101b10f..0000000000000 Binary files a/apps/docs/public/img/supabase-vue-3-demo.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-xendit.png b/apps/docs/public/img/supabase-xendit.png deleted file mode 100644 index b1dc884c608e7..0000000000000 Binary files a/apps/docs/public/img/supabase-xendit.png and /dev/null differ diff --git a/apps/docs/public/img/table-view.png b/apps/docs/public/img/table-view.png deleted file mode 100644 index dbc9fc6ed58eb..0000000000000 Binary files a/apps/docs/public/img/table-view.png and /dev/null differ diff --git a/apps/docs/public/img/tanmai-tayfa.png b/apps/docs/public/img/tanmai-tayfa.png deleted file mode 100644 index ed9cfe76773c8..0000000000000 Binary files a/apps/docs/public/img/tanmai-tayfa.png and /dev/null differ diff --git a/apps/docs/public/img/toadli-og.jpg b/apps/docs/public/img/toadli-og.jpg deleted file mode 100644 index 7ab8ec7d88435..0000000000000 Binary files a/apps/docs/public/img/toadli-og.jpg and /dev/null differ diff --git a/apps/docs/public/img/typescript-support.gif b/apps/docs/public/img/typescript-support.gif deleted file mode 100644 index 615d600d864f1..0000000000000 Binary files a/apps/docs/public/img/typescript-support.gif and /dev/null differ diff --git a/apps/docs/public/img/unnesting-2.png b/apps/docs/public/img/unnesting-2.png deleted file mode 100644 index ba51f56f0fe83..0000000000000 Binary files a/apps/docs/public/img/unnesting-2.png and /dev/null differ diff --git a/apps/docs/public/img/unnesting-none-dark.png b/apps/docs/public/img/unnesting-none-dark.png deleted file mode 100644 index 3d2b0ccc1d703..0000000000000 Binary files a/apps/docs/public/img/unnesting-none-dark.png and /dev/null differ diff --git a/apps/docs/public/img/unnesting-none.png b/apps/docs/public/img/unnesting-none.png deleted file mode 100644 index d7dc3d77add6c..0000000000000 Binary files a/apps/docs/public/img/unnesting-none.png and /dev/null differ diff --git a/apps/docs/public/img/user-management-demo.png b/apps/docs/public/img/user-management-demo.png deleted file mode 100644 index ee61c3d52aa3e..0000000000000 Binary files a/apps/docs/public/img/user-management-demo.png and /dev/null differ diff --git a/apps/docs/public/img/worklife-dark.png b/apps/docs/public/img/worklife-dark.png deleted file mode 100644 index b1454797d145d..0000000000000 Binary files a/apps/docs/public/img/worklife-dark.png and /dev/null differ diff --git a/apps/docs/public/img/yc-gray.png b/apps/docs/public/img/yc-gray.png deleted file mode 100644 index f3fade0625be9..0000000000000 Binary files a/apps/docs/public/img/yc-gray.png and /dev/null differ diff --git a/apps/docs/public/lawyers.txt b/apps/docs/public/lawyers.txt deleted file mode 100644 index 4aa599ea4d1de..0000000000000 --- a/apps/docs/public/lawyers.txt +++ /dev/null @@ -1,409 +0,0 @@ - -Lawyers.txt - -____________ - -For compliance. - -Supabase™ is a trademark of Supabase Inc. - -If you're a creator/contributor to one of these packages, thanks! - -Last updated: 2022-03-29 - -JavaScript/TypeScript - --- ------------------------------------ ---------------------- -------------------------------------------------------------------- --------------------------------------------------------------------------------------- ------------------------- - 0 lodash@4.17.21 MIT https://github.com/lodash/lodash https://github.com/lodash/lodash/raw/master/LICENSE @supabase/ui - 1 prop-types@15.7.2 MIT https://github.com/facebook/prop-types https://github.com/facebook/prop-types/raw/master/LICENSE @supabase/ui - 2 @types/lodash.clonedeep@4.5.6 MIT https://github.com/DefinitelyTyped/DefinitelyTyped https://github.com/DefinitelyTyped/DefinitelyTyped/raw/master/LICENSE @supabase/realtime-js - 3 @types/phoenix@1.5.4 MIT https://github.com/DefinitelyTyped/DefinitelyTyped https://github.com/DefinitelyTyped/DefinitelyTyped/raw/master/LICENSE @supabase/realtime-js - 4 @types/websocket@1.0.4 MIT https://github.com/DefinitelyTyped/DefinitelyTyped https://github.com/DefinitelyTyped/DefinitelyTyped/raw/master/LICENSE @supabase/realtime-js - 5 lodash.clonedeep@4.5.0 MIT https://github.com/lodash/lodash https://github.com/lodash/lodash/raw/master/LICENSE @supabase/realtime-js - 6 websocket@1.0.34 Apache-2.0 https://github.com/theturtle32/WebSocket-Node https://github.com/theturtle32/WebSocket-Node/raw/master/LICENSE @supabase/realtime-js - 7 argparse@2.0.1 Python-2.0 https://github.com/nodeca/argparse https://github.com/nodeca/argparse/raw/master/LICENSE @supabase/sql-formatter - 8 @supabase/supabase-js@1.1.2 MIT https://github.com/supabase/supabase-js https://github.com/supabase/supabase-js/raw/master/LICENSE issue-tracker - 9 @supabase/ui@0.6.1 MIT https://github.com/supabase/ui https://github.com/supabase/ui/blob/master/LICENSE issue-tracker -10 autoprefixer@10.1.0 MIT https://github.com/postcss/autoprefixer https://github.com/postcss/autoprefixer/raw/master/LICENSE issue-tracker -11 crypto-js@4.0.0 MIT http://github.com/brix/crypto-js http://github.com/brix/crypto-js/raw/master/LICENSE issue-tracker -12 next@10.0.3 MIT https://github.com/vercel/next.js https://github.com/vercel/next.js/raw/master/license.md issue-tracker -13 postcss@8.2.1 MIT https://github.com/postcss/postcss https://github.com/postcss/postcss/raw/master/LICENSE issue-tracker -14 react-dom@17.0.1 MIT https://github.com/facebook/react https://github.com/facebook/react/raw/master/LICENSE issue-tracker -15 react-toastify@6.2.0 MIT https://github.com/fkhadra/react-toastify https://github.com/fkhadra/react-toastify/raw/master/LICENSE issue-tracker -16 react-transition-group@4.4.1 BSD-3-Clause https://github.com/reactjs/react-transition-group https://github.com/reactjs/react-transition-group/raw/master/LICENSE issue-tracker -17 react@17.0.1 MIT https://github.com/facebook/react https://github.com/facebook/react/raw/master/LICENSE issue-tracker -18 tailwindcss@2.0.2 MIT https://github.com/tailwindlabs/tailwindcss https://github.com/tailwindlabs/tailwindcss/raw/master/LICENSE issue-tracker -19 @headlessui/react@1.2.0 MIT https://github.com/tailwindlabs/headlessui https://github.com/tailwindlabs/headlessui supabase-ui-web -20 @mdx-js/loader@1.6.22 MIT https://github.com/mdx-js/mdx https://github.com/mdx-js/mdx/raw/master/license supabase-ui-web -21 @next/mdx@10.1.1 MIT https://github.com/vercel/next.js https://github.com/vercel/next.js/raw/master/license.md supabase-ui-web -22 @supabase/supabase-js@1.7.5 MIT https://github.com/supabase/supabase-js https://github.com/supabase/supabase-js/raw/master/LICENSE supabase-ui-web -23 @supabase/ui@0.25.1 MIT https://github.com/supabase/ui https://github.com/supabase/ui/blob/master/LICENSE supabase-ui-web -24 @types/react-copy-to-clipboard@5.0.0 MIT https://github.com/DefinitelyTyped/DefinitelyTyped https://github.com/DefinitelyTyped/DefinitelyTyped/raw/master/LICENSE supabase-ui-web -25 gray-matter@4.0.2 MIT https://github.com/jonschlinkert/gray-matter https://github.com/jonschlinkert/gray-matter/raw/master/LICENSE supabase-ui-web -26 markdown-toc@1.2.0 MIT https://github.com/jonschlinkert/markdown-toc https://github.com/jonschlinkert/markdown-toc/raw/master/LICENSE supabase-ui-web -27 next-mdx-remote@2.1.3 MPL-2.0 https://github.com/hashicorp/next-mdx-remote https://github.com/hashicorp/next-mdx-remote/raw/master/LICENSE supabase-ui-web -28 next-seo@4.23.0 MIT https://github.com/garmeeh/next-seo https://github.com/garmeeh/next-seo/raw/master/LICENSE.md supabase-ui-web -29 next@10.1.1 MIT https://github.com/vercel/next.js https://github.com/vercel/next.js/raw/master/license.md supabase-ui-web -30 react-copy-to-clipboard@5.0.3 MIT https://github.com/nkbt/react-copy-to-clipboard https://github.com/nkbt/react-copy-to-clipboard/raw/master/LICENSE supabase-ui-web -31 react-dom@17.0.2 MIT https://github.com/facebook/react https://github.com/facebook/react/raw/master/LICENSE supabase-ui-web -32 react-frame-component@4.1.3 MIT https://github.com/ryanseddon/react-frame-component https://github.com/ryanseddon/react-frame-component/raw/master/LICENSE.md supabase-ui-web -33 react-markdown@5.0.3 MIT https://github.com/remarkjs/react-markdown https://github.com/remarkjs/react-markdown/raw/master/license supabase-ui-web -34 react-syntax-highlighter@15.4.3 MIT https://github.com/react-syntax-highlighter/react-syntax-highlighter https://github.com/react-syntax-highlighter/react-syntax-highlighter/raw/master/LICENSE supabase-ui-web -35 react@17.0.2 MIT https://github.com/facebook/react https://github.com/facebook/react/raw/master/LICENSE supabase-ui-web -36 rehype-slug@4.0.1 MIT https://github.com/rehypejs/rehype-slug https://github.com/rehypejs/rehype-slug/raw/master/license supabase-ui-web -37 remark-gfm@1.0.0 MIT https://github.com/remarkjs/remark-gfm https://github.com/remarkjs/remark-gfm/raw/master/license supabase-ui-web -38 cross-fetch@3.1.4 MIT https://github.com/lquixada/cross-fetch https://github.com/lquixada/cross-fetch/raw/master/LICENSE @supabase/storage-js -39 cross-fetch@3.0.6 MIT https://github.com/lquixada/cross-fetch https://github.com/lquixada/cross-fetch/raw/master/LICENSE @supabase/postgrest-js -40 @supabase/gotrue-js@1.22.3 MIT https://github.com/supabase/gotrue-js https://github.com/supabase/gotrue-js/raw/master/LICENSE @supabase/supabase-js -41 @supabase/postgrest-js@0.37.0 MIT https://github.com/supabase/postgrest-js https://github.com/supabase/postgrest-js/raw/master/LICENSE @supabase/supabase-js -42 @supabase/realtime-js@1.3.6 MIT https://github.com/supabase/realtime-js https://github.com/supabase/realtime-js/raw/master/LICENSE.md @supabase/supabase-js -43 @supabase/storage-js@1.6.4 MIT https://github.com/supabase/storage-js https://github.com/supabase/storage-js/raw/master/LICENSE @supabase/supabase-js -44 @sinclair/typebox@0.23.4 MIT https://github.com/sinclairzx81/typebox https://github.com/sinclairzx81/typebox/raw/master/license @supabase/postgres-meta -45 pg-format@1.0.4 MIT https://github.com/datalanche/node-pg-format https://github.com/datalanche/node-pg-format/raw/master/LICENSE @supabase/postgres-meta -46 pg@8.7.3 MIT https://github.com/brianc/node-postgres https://github.com/brianc/node-postgres/raw/master/LICENSE @supabase/postgres-meta -47 pgsql-parser@13.3.0 MIT https://github.com/pyramation/pgsql-parser https://github.com/pyramation/pgsql-parser/raw/master/LICENSE @supabase/postgres-meta -48 pino@7.9.1 MIT https://github.com/pinojs/pino https://github.com/pinojs/pino/raw/master/LICENSE @supabase/postgres-meta -49 postgres-array@3.0.1 MIT https://github.com/bendrucker/postgres-array https://github.com/bendrucker/postgres-array/raw/master/license @supabase/postgres-meta -50 prettier-plugin-sql@0.4.1 MIT git@github.com/rx-ts/prettier git@github.com/rx-ts/prettier/raw/master/LICENSE @supabase/postgres-meta -51 prettier@2.6.0 MIT https://github.com/prettier/prettier https://github.com/prettier/prettier/raw/master/LICENSE @supabase/postgres-meta -52 sql-formatter@4.0.2 MIT https://github.com/zeroturnaround/sql-formatter https://github.com/zeroturnaround/sql-formatter/raw/master/LICENSE @supabase/postgres-meta -53 @monaco-editor/react@4.3.1 MIT https://github.com/suren-atoyan/monaco-react https://github.com/suren-atoyan/monaco-react/raw/master/LICENSE @supabase/grid -54 @scaleleap/pg-format@1.0.0 MIT https://github.com/ScaleLeap/pg-format https://github.com/ScaleLeap/pg-format/raw/master/LICENSE @supabase/grid -55 awesome-debounce-promise@2.1.0 MIT https://github.com/slorber/awesome-debounce-promise https://github.com/slorber/awesome-debounce-promise @supabase/grid -56 dayjs@1.10.7 MIT https://github.com/iamkun/dayjs https://github.com/iamkun/dayjs/raw/master/LICENSE @supabase/grid -57 file-saver@2.0.5 MIT https://github.com/eligrey/FileSaver.js https://github.com/eligrey/FileSaver.js/raw/master/LICENSE.md @supabase/grid -58 immutability-helper@3.1.1 MIT https://github.com/kolodny/immutability-helper https://github.com/kolodny/immutability-helper/raw/master/LICENSE @supabase/grid -59 p-queue@6.6.2 MIT https://github.com/sindresorhus/p-queue https://github.com/sindresorhus/p-queue/raw/master/license @supabase/grid -60 react-contexify@5.0.0 MIT https://github.com/fkhadra/react-contexify https://github.com/fkhadra/react-contexify/raw/master/LICENSE @supabase/grid -61 react-dnd-html5-backend@14.0.2 MIT https://github.com/react-dnd/react-dnd https://github.com/react-dnd/react-dnd/raw/master/LICENSE @supabase/grid -62 react-dnd@14.0.4 MIT https://github.com/react-dnd/react-dnd https://github.com/react-dnd/react-dnd/raw/master/LICENSE @supabase/grid -63 react-tiny-popover@6.0.10 MIT https://github.com/alexkatz/react-tiny-popover https://github.com/alexkatz/react-tiny-popover/raw/master/LICENSE @supabase/grid -64 react-tracked@1.7.4 MIT https://github.com/dai-shi/react-tracked https://github.com/dai-shi/react-tracked/raw/master/LICENSE @supabase/grid -65 scheduler@0.20.2 MIT https://github.com/facebook/react https://github.com/facebook/react/raw/master/LICENSE @supabase/grid -66 @aws-sdk/client-s3@3.53.0 Apache-2.0 https://github.com/aws/aws-sdk-js-v3 https://github.com/aws/aws-sdk-js-v3/raw/master/LICENSE supa-storage -67 @aws-sdk/lib-storage@3.53.0 Apache-2.0 https://github.com/aws/aws-sdk-js-v3 https://github.com/aws/aws-sdk-js-v3/raw/master/LICENSE supa-storage -68 @aws-sdk/node-http-handler@3.53.0 Apache-2.0 https://github.com/aws/aws-sdk-js-v3 https://github.com/aws/aws-sdk-js-v3/raw/master/LICENSE supa-storage -69 @supabase/postgrest-js@0.36.0 MIT https://github.com/supabase/postgrest-js https://github.com/supabase/postgrest-js/raw/master/LICENSE supa-storage -70 crypto-js@4.1.1 MIT http://github.com/brix/crypto-js http://github.com/brix/crypto-js/raw/master/LICENSE supa-storage -71 dotenv@16.0.0 BSD-2-Clause https://github.com/motdotla/dotenv https://github.com/motdotla/dotenv/raw/master/LICENSE supa-storage -72 fastify-cors@6.0.3 MIT https://github.com/fastify/fastify-cors https://github.com/fastify/fastify-cors/raw/master/LICENSE supa-storage -73 fastify-multipart@5.3.1 MIT https://github.com/fastify/fastify-multipart https://github.com/fastify/fastify-multipart/raw/master/LICENSE supa-storage -74 fastify-plugin@3.0.1 MIT https://github.com/fastify/fastify-plugin https://github.com/fastify/fastify-plugin/raw/master/LICENSE supa-storage -75 fastify-swagger@4.15.0 MIT https://github.com/fastify/fastify-swagger https://github.com/fastify/fastify-swagger/raw/master/LICENSE supa-storage -76 fastify@3.27.2 MIT https://github.com/fastify/fastify https://github.com/fastify/fastify/raw/master/LICENSE supa-storage -77 fs-extra@10.0.1 MIT https://github.com/jprichardson/node-fs-extra https://github.com/jprichardson/node-fs-extra/raw/master/LICENSE supa-storage -78 fs-xattr@0.3.1 MIT https://github.com/LinusU/fs-xattr https://github.com/LinusU/fs-xattr/raw/master/LICENSE supa-storage -79 jsonwebtoken@8.5.1 MIT https://github.com/auth0/node-jsonwebtoken https://github.com/auth0/node-jsonwebtoken/raw/master/LICENSE supa-storage -80 knex@1.0.3 MIT https://github.com/knex/knex https://github.com/knex/knex/raw/master/LICENSE supa-storage -81 p-limit@3.1.0 MIT https://github.com/sindresorhus/p-limit https://github.com/sindresorhus/p-limit/raw/master/license supa-storage -82 pg-listen@1.7.0 MIT github:andywer/pg-listen github:andywer/pg-listen supa-storage -83 pg@8.7.3 MIT https://github.com/brianc/node-postgres https://github.com/brianc/node-postgres/raw/master/LICENSE supa-storage -84 pino@7.8.0 MIT https://github.com/pinojs/pino https://github.com/pinojs/pino/raw/master/LICENSE supa-storage -85 pkg@5.5.2 MIT https://github.com/vercel/pkg https://github.com/vercel/pkg/raw/master/LICENSE supa-storage -86 postgres-migrations@5.3.0 MIT https://github.com/thomwright/postgres-migrations https://github.com/thomwright/postgres-migrations/raw/master/LICENSE supa-storage -87 under-pressure@5.8.0 MIT https://github.com/fastify/under-pressure https://github.com/fastify/under-pressure/raw/master/LICENSE supa-storage -88 clsx@1.1.1 MIT https://github.com/lukeed/clsx https://github.com/lukeed/clsx/raw/master/license @supabase/react-data-grid -89 dotenv@8.2.0 BSD-2-Clause https://github.com/motdotla/dotenv https://github.com/motdotla/dotenv/raw/master/LICENSE stripe-sync-engine -90 fastify-autoload@3.6.0 MIT https://github.com/fastify/fastify-autoload https://github.com/fastify/fastify-autoload/raw/master/LICENSE stripe-sync-engine -91 fastify-swagger@4.4.1 MIT https://github.com/fastify/fastify-swagger https://github.com/fastify/fastify-swagger/raw/master/LICENSE stripe-sync-engine -92 fastify@3.14.0 MIT https://github.com/fastify/fastify https://github.com/fastify/fastify/raw/master/LICENSE stripe-sync-engine -93 pg-node-migrations@0.0.7 MIT https://github.com/jbelelieu/pg_node_migrations https://github.com/jbelelieu/pg_node_migrations/raw/master/LICENSE stripe-sync-engine -94 pg@8.6.0 MIT https://github.com/brianc/node-postgres https://github.com/brianc/node-postgres/raw/master/LICENSE stripe-sync-engine -95 stripe@8.145.0 MIT https://github.com/stripe/stripe-node https://github.com/stripe/stripe-node/raw/master/LICENSE stripe-sync-engine -96 yesql@5.0.0 ISC https://github.com/pihvi/yesql https://github.com/pihvi/yesql stripe-sync-engine --- ------------------------------------ ---------------------- -------------------------------------------------------------------- --------------------------------------------------------------------------------------- ------------------------- - - -Elixir - -Id Name Version License --- --------------------------------- ------- ---------- - 0 castore 0.1.11 Apache 2.0 - 1 certifi 2.5.3 BSD - 2 combine 0.10.0 MIT - 3 connection 1.1.0 Apache 2.0 - 4 cowboy 2.8.0 ISC - 5 cowboy_telemetry 0.3.1 Apache 2.0 - 6 cowlib 2.9.1 ISC - 7 db_connection 2.4.1 Apache 2.0 - 8 decimal 2.0.0 Apache 2.0 - 9 ecto 3.7.1 Apache 2.0 -10 ecto_sql 3.7.1 Apache 2.0 -11 epgsql 4.6.0 BSD -12 file_system 0.2.10 WTFPL -13 finch 0.7.0 MIT -14 gettext 0.18.2 Apache 2.0 -15 hackney 1.17.0 Apache 2.0 -16 httpoison 1.8.0 MIT -17 idna 6.1.1 MIT -18 jason 1.2.2 Apache 2.0 -19 joken 2.3.0 Apache 2.0 -20 jose 1.11.1 MIT -21 metrics 1.0.1 BSD -22 mime 1.5.0 Apache 2.0 -23 mimerl 1.2.0 MIT -24 mint 1.3.0 Apache 2.0 -25 nimble_options 0.3.5 Apache 2.0 -26 nimble_pool 0.2.4 Apache 2.0 -27 parse_trans 3.3.1 Apache 2.0 -28 phoenix 1.5.8 MIT -29 phoenix_html 2.14.3 MIT -30 phoenix_live_reload 1.3.0 MIT -31 phoenix_pubsub 2.0.0 MIT -32 plug 1.11.0 Apache 2.0 -33 plug_cowboy 2.4.1 Apache 2.0 -34 plug_crypto 1.2.1 Apache 2.0 -35 postgrex 0.15.13 Apache 2.0 -36 prom_ex 1.3.0 MIT -37 ranch 1.7.1 ISC -38 retry 0.14.1 Apache 2.0 -39 ssl_verify_fun 1.1.6 MIT -40 telemetry 0.4.2 Apache 2.0 -41 telemetry_metrics 0.6.1 Apache 2.0 -42 telemetry_metrics_prometheus_core 1.0.1 Apache 2.0 -43 telemetry_poller 0.5.1 Apache 2.0 -44 timex 3.6.3 MIT -45 tzdata 1.0.5 MIT -46 unicode_util_compat 0.7.0 Apache 2.0 -47 bunt 0.2.0 MIT -48 credo 1.5.5 MIT -49 dialyxir 1.1.0 Apache 2.0 -50 earmark_parser 1.4.12 Apache 2.0 -51 erlex 0.2.6 Apache 2.0 -52 ex_doc 0.24.1 Apache 2.0 -53 file_system 0.2.10 WTFPL -54 jason 1.2.2 Apache 2.0 -55 makeup 1.0.5 BSD -56 makeup_elixir 0.15.1 BSD -57 makeup_erlang 0.1.1 BSD -58 nimble_parsec 1.1.0 Apache 2.0 -59 warpath 0.6.0 MIT --- --------------------------------- ------- ---------- - -Go - -ID Package Link Version ---- ----------------------------------------------------------- ------------------------------------- -License Type ------------------------------------------------------- - 0 github.com/BurntSushi/toml v1.0.0 MIT - 1 github.com/adrg/xdg v0.4.0 MIT - 2 github.com/alecthomas/chroma v0.10.0 MIT - 3 github.com/aymerick/douceur v0.2.0 MIT - 4 github.com/charmbracelet/bubbles v0.10.3 MIT - 5 github.com/charmbracelet/bubbletea v0.20.0 MIT - 6 github.com/charmbracelet/glamour v0.5.0 MIT - 7 github.com/charmbracelet/harmonica v0.1.0 MIT - 8 github.com/charmbracelet/lipgloss v0.5.0 MIT - 9 github.com/containerd/console v1.0.3 Apache 2.0 - 10 github.com/containerd/containerd v1.6.2 Apache 2.0 - 11 github.com/dlclark/regexp2 v1.4.0 MIT - 12 github.com/docker/distribution v2.8.1 Apache 2.0 - 13 github.com/docker/docker v20.10.14 Apache 2.0,MIT - 14 github.com/docker/go-connections v0.4.0 Apache 2.0 - 15 github.com/docker/go-units v0.4.0 Apache 2.0 - 16 github.com/fsnotify/fsnotify v1.5.1 New BSD - 17 github.com/gogo/protobuf v1.3.2 New BSD - 18 github.com/golang/protobuf v1.5.2 New BSD - 19 github.com/gorilla/css v1.0.0 New BSD - 20 github.com/hashicorp/hcl v1.0.0 Mozilla Public License 2.0 - 21 github.com/jackc/chunkreader/v2 v2.0.1 MIT - 22 github.com/jackc/pgconn v1.11.0 MIT - 23 github.com/jackc/pgio v1.0.0 MIT - 24 github.com/jackc/pgpassfile v1.0.0 MIT - 25 github.com/jackc/pgproto3/v2 v2.2.0 MIT - 26 github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b MIT - 27 github.com/jackc/pgtype v1.10.0 MIT - 28 github.com/jackc/pgx/v4 v4.15.0 MIT - 29 github.com/joho/godotenv v1.4.0 MIT - 30 github.com/lucasb-eyer/go-colorful v1.2.0 MIT - 31 github.com/magiconair/properties v1.8.6 Simplified BSD - 32 github.com/mattn/go-isatty v0.0.14 MIT - 33 github.com/mattn/go-runewidth v0.0.13 MIT - 34 github.com/microcosm-cc/bluemonday v1.0.18 New BSD - 35 github.com/mitchellh/mapstructure v1.4.3 MIT - 36 github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 Apache 2.0 - 37 github.com/morikuni/aec v1.0.0 MIT - 38 github.com/muesli/ansi v0.0.0-20211031195517-c9f0611b6c70 MIT - 39 github.com/muesli/reflow v0.3.0 MIT - 40 github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739 MIT - 41 github.com/olekukonko/tablewriter v0.0.5 MIT - 42 github.com/opencontainers/go-digest v1.0.0 Apache 2.0 - 43 github.com/opencontainers/image-spec v1.0.2 Apache 2.0 - 44 github.com/pelletier/go-toml v1.9.4 Apache 2.0 - 45 github.com/pkg/errors v0.9.1 Simplified BSD - 46 github.com/rivo/uniseg v0.2.0 MIT - 47 github.com/sirupsen/logrus v1.8.1 MIT - 48 github.com/spf13/afero v1.8.2 Apache 2.0 - 49 github.com/spf13/cast v1.4.1 MIT - 50 github.com/spf13/cobra v1.4.0 Apache 2.0 - 51 github.com/spf13/jwalterweatherman v1.1.0 MIT - 52 github.com/spf13/pflag v1.0.5 New BSD - 53 github.com/spf13/viper v1.10.1 MIT - 54 github.com/subosito/gotenv v1.2.0 MIT - 55 github.com/withfig/autocomplete-tools/packages/cobra v1.1.3 MIT - 56 github.com/yuin/goldmark v1.4.11 MIT - 57 github.com/yuin/goldmark-emoji v1.0.1 MIT - 58 golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 New BSD - 59 golang.org/x/net v0.0.0-20220225172249-27dd8689420f New BSD - 60 golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 New BSD - 61 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 New BSD - 62 golang.org/x/text v0.3.7 New BSD - 63 google.golang.org/genproto v0.0.0-20220323144105-ec3c684e5b14 Apache 2.0 - 64 google.golang.org/grpc v1.45.0 Apache 2.0 - 65 google.golang.org/protobuf v1.28.0 New BSD - 66 gopkg.in/ini.v1 v1.66.4 Apache 2.0 - 67 gopkg.in/yaml.v2 v2.4.0 Apache 2.0,MIT - 68 github.com/aws/aws-sdk-go-v2 v1.8.0 Apache 2.0,New BSD - 69 github.com/aws/aws-sdk-go-v2/config v1.6.0 Apache 2.0 - 70 github.com/aws/aws-sdk-go-v2/credentials v1.3.2 Apache 2.0 - 71 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.4.0 Apache 2.0 - 72 github.com/aws/aws-sdk-go-v2/internal/ini v1.2.0 Apache 2.0 - 73 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.2.2 Apache 2.0 - 74 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.5.0 Apache 2.0 - 75 github.com/aws/aws-sdk-go-v2/service/sso v1.3.2 Apache 2.0 - 76 github.com/aws/aws-sdk-go-v2/service/sts v1.6.1 Apache 2.0 - 77 github.com/aws/smithy-go v1.7.0 Apache 2.0 - 78 github.com/coreos/go-semver v0.3.0 Apache 2.0 - 79 github.com/coreos/go-systemd/v22 v22.3.2 Apache 2.0 - 80 github.com/fsnotify/fsnotify v1.4.9 New BSD - 81 github.com/gogo/protobuf v1.3.2 New BSD - 82 github.com/golang/protobuf v1.5.2 New BSD - 83 github.com/hashicorp/hcl v1.0.0 Mozilla Public License 2.0 - 84 github.com/magiconair/properties v1.8.5 Simplified BSD - 85 github.com/mitchellh/mapstructure v1.4.1 MIT - 86 github.com/pelletier/go-toml v1.9.3 Apache 2.0 - 87 github.com/pkg/errors v0.9.1 Simplified BSD - 88 github.com/spf13/afero v1.6.0 Apache 2.0 - 89 github.com/spf13/cast v1.3.1 MIT - 90 github.com/spf13/cobra v1.2.1 Apache 2.0,GPLv2,GPLv3,LGPL,MIT,New BSD,Simplified BSD - 91 github.com/spf13/jwalterweatherman v1.1.0 MIT - 92 github.com/spf13/pflag v1.0.5 New BSD - 93 github.com/spf13/viper v1.8.1 MIT - 94 github.com/subosito/gotenv v1.2.0 MIT - 95 go.etcd.io/etcd/api/v3 v3.5.0 Apache 2.0 - 96 go.etcd.io/etcd/client/pkg/v3 v3.5.0 Apache 2.0 - 97 go.etcd.io/etcd/client/v3 v3.5.0 Apache 2.0 - 98 go.uber.org/atomic v1.9.0 MIT - 99 go.uber.org/multierr v1.7.0 MIT -100 go.uber.org/zap v1.19.0 MIT -101 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 New BSD -102 golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 New BSD -103 golang.org/x/text v0.3.5 New BSD -104 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c Apache 2.0 -105 google.golang.org/grpc v1.38.0 Apache 2.0 -106 google.golang.org/protobuf v1.26.0 New BSD -107 gopkg.in/ini.v1 v1.62.0 Apache 2.0 -108 gopkg.in/yaml.v2 v2.4.0 Apache 2.0,MIT -109 github.com/coreos/go-oidc v2.2.1 Apache 2.0 -110 github.com/kelseyhightower/envconfig v1.4.0 MIT -111 github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 Apache 2.0 -112 golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 New BSD -113 golang.org/x/net v0.0.0-20200707034311-ab3426394381 New BSD -114 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d New BSD -115 gopkg.in/square/go-jose.v2 v2.5.1 Apache 2.0,New BSD -116 cloud.google.com/go v0.67.0 Apache 2.0,New BSD -117 github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20170623214735-571947b0f240 Apache 2.0 -118 github.com/Masterminds/semver/v3 v3.1.1 MIT -119 github.com/aymerick/douceur v0.2.0 MIT -120 github.com/badoux/checkmail v0.0.0-20170203135005-d0a759655d62 MIT -121 github.com/beevik/etree v1.1.0 Simplified BSD -122 github.com/coreos/go-oidc/v3 v3.0.0 Apache 2.0 -123 github.com/didip/tollbooth/v5 v5.1.1 MIT -124 github.com/fatih/color v1.10.0 MIT -125 github.com/fatih/structs v1.1.0 MIT -126 github.com/go-chi/chi v4.0.2 MIT -127 github.com/go-sql-driver/mysql v1.5.0 Mozilla Public License 2.0 -128 github.com/gobuffalo/envy v1.9.0 MIT -129 github.com/gobuffalo/fizz v1.13.0 MIT -130 github.com/gobuffalo/flect v0.2.2 MIT -131 github.com/gobuffalo/github_flavored_markdown v1.1.0 MIT,Simplified BSD -132 github.com/gobuffalo/helpers v0.6.1 MIT -133 github.com/gobuffalo/nulls v0.4.0 MIT -134 github.com/gobuffalo/packd v1.0.0 MIT -135 github.com/gobuffalo/plush/v4 v4.1.0 MIT -136 github.com/gobuffalo/pop/v5 v5.3.3 MIT -137 github.com/gobuffalo/tags/v3 v3.1.0 MIT -138 github.com/gobuffalo/validate/v3 v3.3.0 MIT -139 github.com/gofrs/uuid v4.0.0 MIT -140 github.com/golang-jwt/jwt v3.2.1 MIT -141 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e Apache 2.0 -142 github.com/golang/protobuf v1.4.2 New BSD -143 github.com/googleapis/gax-go/v2 v2.0.5 New BSD -144 github.com/gorilla/context v1.1.1 New BSD -145 github.com/gorilla/css v1.0.0 New BSD -146 github.com/gorilla/securecookie v1.1.1 New BSD -147 github.com/gorilla/sessions v1.1.1 New BSD -148 github.com/imdario/mergo v0.0.0-20160216103600-3e95a51e0639 New BSD -149 github.com/jackc/chunkreader/v2 v2.0.1 MIT -150 github.com/jackc/pgconn v1.8.0 MIT -151 github.com/jackc/pgio v1.0.0 MIT -152 github.com/jackc/pgpassfile v1.0.0 MIT -153 github.com/jackc/pgproto3/v2 v2.0.7 MIT -154 github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b MIT -155 github.com/jackc/pgtype v1.6.2 MIT -156 github.com/jackc/pgx/v4 v4.10.1 MIT -157 github.com/jmoiron/sqlx v1.3.1 MIT -158 github.com/joho/godotenv v1.3.0 MIT -159 github.com/jonboulle/clockwork v0.2.2 Apache 2.0 -160 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 MIT -161 github.com/kelseyhightower/envconfig v1.4.0 MIT -162 github.com/lestrrat-go/jwx v0.9.0 MIT -163 github.com/luna-duclos/instrumentedsql v1.1.3 MIT -164 github.com/mattermost/xml-roundtrip-validator v0.1.0 Apache 2.0 -165 github.com/mattn/go-colorable v0.1.8 MIT -166 github.com/mattn/go-isatty v0.0.12 MIT -167 github.com/microcosm-cc/bluemonday v1.0.16 New BSD -168 github.com/mitchellh/mapstructure v1.1.2 MIT -169 github.com/mrjones/oauth v0.0.0-20190623134757-126b35219450 MIT -170 github.com/netlify/mailme v1.1.1 MIT -171 github.com/netlify/netlify-commons v0.32.0 MIT -172 github.com/opentracing/opentracing-go v1.1.0 Apache 2.0 -173 github.com/patrickmn/go-cache v2.1.0 MIT -174 github.com/philhofer/fwd v1.0.0 MIT -175 github.com/pkg/errors v0.9.1 Simplified BSD -176 github.com/rogpeppe/go-internal v1.8.0 New BSD -177 github.com/rs/cors v1.6.0 MIT -178 github.com/russellhaering/gosaml2 v0.6.1-0.20210916051624-757d23f1bc28 Apache 2.0 -179 github.com/russellhaering/goxmldsig v1.1.1 Apache 2.0 -180 github.com/sebest/xff v0.0.0-20160910043805-6c115e0ffa35 MIT -181 github.com/sergi/go-diff v1.1.0 Apache 2.0,MIT -182 github.com/sethvargo/go-password v0.2.0 MIT -183 github.com/sirupsen/logrus v1.7.0 MIT -184 github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d New BSD -185 github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e New BSD -186 github.com/spf13/cobra v1.1.3 Apache 2.0,GPLv2,GPLv3,LGPL,MIT,New BSD,Simplified BSD -187 github.com/spf13/pflag v1.0.5 New BSD -188 github.com/tinylib/msgp v1.1.0 MIT -189 go.opencensus.io v0.22.4 Apache 2.0 -190 golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad New BSD -191 golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba New BSD -192 golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 New BSD -193 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a New BSD -194 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e New BSD -195 golang.org/x/text v0.3.7 New BSD -196 golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 New BSD -197 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 New BSD -198 google.golang.org/api v0.32.0 New BSD -199 google.golang.org/genproto v0.0.0-20200929141702-51c3e5b607fe Apache 2.0 -200 google.golang.org/grpc v1.32.0 Apache 2.0 -201 google.golang.org/protobuf v1.25.0 New BSD -202 gopkg.in/DataDog/dd-trace-go.v1 v1.12.1 New BSD -203 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df MIT -204 gopkg.in/square/go-jose.v2 v2.5.1 Apache 2.0,New BSD -205 gopkg.in/yaml.v2 v2.4.0 Apache 2.0,MIT -206 github.com/aws/aws-sdk-go v1.36.20 Apache 2.0,New BSD -207 github.com/beorn7/perks v1.0.1 MIT -208 github.com/cespare/xxhash/v2 v2.1.1 MIT -209 github.com/golang/protobuf v1.4.3 New BSD -210 github.com/jmespath/go-jmespath v0.4.0 Apache 2.0 -211 github.com/matttproud/golang_protobuf_extensions v1.0.1 Apache 2.0 -212 github.com/prometheus/client_golang v1.9.0 Apache 2.0 -213 github.com/prometheus/client_model v0.2.0 Apache 2.0 -214 github.com/prometheus/common v0.15.0 Apache 2.0,New BSD -215 github.com/prometheus/procfs v0.2.0 Apache 2.0 -216 github.com/sirupsen/logrus v1.6.0 MIT -217 golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e New BSD -218 google.golang.org/protobuf v1.23.0 New BSD -219 gopkg.in/yaml.v2 v2.3.0 Apache 2.0,MIT ---- ----------------------------------------------------------- ------------------------------------- ------------------------------------------------------ diff --git a/apps/docs/public/robots.txt b/apps/docs/public/robots.txt deleted file mode 100644 index ba960896a4606..0000000000000 --- a/apps/docs/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -User-agent: * -Allow: / -Sitemap: https://supabase.com/docs/sitemap.xml \ No newline at end of file diff --git a/apps/docs/public/sitemap.xml b/apps/docs/public/sitemap.xml deleted file mode 100644 index c8eaf5ff95eab..0000000000000 --- a/apps/docs/public/sitemap.xml +++ /dev/null @@ -1,4734 +0,0 @@ - - - - https://supabase.com/docs/faq - weekly - 0.5 - - - - https://supabase.com/docs/index - weekly - 0.5 - - - - https://supabase.com/docs/handbook/contributing - weekly - 0.5 - - - - https://supabase.com/docs/handbook/introduction - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai - weekly - 0.5 - - - - https://supabase.com/docs/guides/api - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli - weekly - 0.5 - - - - https://supabase.com/docs/guides/database - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions - weekly - 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/platform - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage - weekly - 0.5 - - - - https://supabase.com/docs/reference/index - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/choosing-instance-type - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/concepts - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/engineering-for-scale - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/google-colab - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/hugging-face - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/langchain - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/managing-collections - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/managing-indexes - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/structured-unstructured - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/vecs-python-client - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/vector-columns - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/api-keys - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/creating-routes - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/joins-and-nesting - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/quickstart - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/securing-your-api - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-captcha - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-email-templates - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-email - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-magic-link - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-mfa - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-password-reset - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/enterprise-sso - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/managing-user-data - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/phone-login - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/row-level-security - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/server-side-rendering - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli/managing-environments - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli/using-environment-variables-in-config - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/auth - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/cicd-workflow - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/connect-to-postgres - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/cors - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/dart-edge - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/debugging - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/global-deployments - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/import-maps - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/kysely-postgres - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/local-development - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/quickstart - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/schedule-functions - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/secrets - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/storage-caching - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/troubleshooting - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/typescript-support - 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/getting-started/local-development - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/arrays - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/column-encryption - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/connecting-to-postgres - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/full-text-search - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/functions - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/json - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/managing-passwords - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/managing-timezones - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/overview - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/partitions - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/replication - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/sql-to-api - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/tables - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/testing - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/timeouts - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/vault - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/webhooks - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/appsmith - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/auth0 - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/authsignal - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/bracket - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/clerk - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/cloudflare-workers - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/dhiwise - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/directus - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/draftbit - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/estuary - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/fezto - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/flutterflow - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/forestadmin - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/illa - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/integrations - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/keyri - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/onesignal - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/passage - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/pgmustard - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/picket - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/plasmic - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/polyscale - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/prisma - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/sequin - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/snaplet - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/stytch - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/supertokens - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/vercel - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/weweb - weekly - 0.5 - - - - https://supabase.com/docs/guides/integrations/zuplo - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/access-control - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/backups - 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/custom-postgres-config - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/database-size - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/exhaust-cpu - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/exhaust-ram - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/going-into-prod - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/http-status-codes - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/logs - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/maturity-model - 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/network-restrictions - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/performance - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/permissions - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/shared-responsibility-model - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/spend-cap - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/ssl-enforcement - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/troubleshooting - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/architecture - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/bring-your-own-database - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/broadcast - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/concepts - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/postgres-changes - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/presence - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/protocol - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/quickstart - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/quotas - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/realtime-with-nextjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/subscribing-to-database-changes - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/examples - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/glossary - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting/docker - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/access-control - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/cdn - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/image-transformations - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/quickstart - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/storage-sample - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/uploads - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-deep-dive-jwts - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-google-oauth - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-gotrue - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-policies - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-row-level-security - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/integrations/llamaindex - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/quickstarts/face-similarity - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/quickstarts/hello-world - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/quickstarts/text-deduplication - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/building-chatgpt-plugins - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/headless-vector-search - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/huggingface-image-captioning - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/image-search-openai-clip - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/nextjs-vector-search - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/openai - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/graphql/graphiql - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/rest/auto-generated-docs - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/rest/client-libs - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/rest/generating-types - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/auth-ui - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/flutter-auth-ui - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/nextjs-pages - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/nextjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/remix - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/sveltekit - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/quickstarts/react - 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/getting-started/quickstarts/android - 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-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/auth/sso/auth-sso-saml - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/phone-login/messagebird - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/phone-login/twilio - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/phone-login/vonage - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/cloudflare-turnstile - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/discord-bot - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/github-actions - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/og-image - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/rate-limiting - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/screenshots - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/send-emails - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/stripe-webhooks - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/telegram-bot - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/upstash-redis - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/flutter - 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/quickstarts/redwoodjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/solidjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/sveltekit - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/vue - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/cascade-deletes - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/dropping-all-tables-in-schema - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/first-row-in-group - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/indexes - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/which-version-of-postgres - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/http - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/hypopg - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg-safeupdate - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_graphql - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_hashids - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_jsonschema - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_plan_filter - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_stat_monitor - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_stat_statements - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgaudit - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgcron - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgjwt - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgnet - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgrepack - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgroonga - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgrouting - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgsodium - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgtap - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgvector - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/plpgsql_check - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/plv8 - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/postgis - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/rum - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/timescaledb - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/uuid-ossp - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/wrappers/overview - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/azure - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/gsuite - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/okta - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/amazon-rds - 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-storage - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/firestore-data - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/heroku - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/render - 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-kotlin - 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/self-hosting/analytics/config - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting/realtime/config - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting/auth/config - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting/storage/config - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signinwithsso - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-updateuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-reauthentication - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-resend - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-setsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-refreshsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-onauthstatechange - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-exchangecodeforsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-enroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-challenge - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-verify - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-challengeandverify - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-unenroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-getauthenticatorassurancelevel - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/admin-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-getuserbyid - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-listusers - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-createuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-deleteuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-inviteuserbyemail - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-resetpasswordforemail - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-generatelink - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-updateuserbyid - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-mfa-listfactors - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-mfa-deletefactor - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rpc - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/eq - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/neq - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/gt - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/gte - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/lt - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/lte - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/like - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/ilike - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/is - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/in - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/contains - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/containedby - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rangegt - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rangegte - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rangelt - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rangelte - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rangeadjacent - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/overlaps - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/textsearch - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/match - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/or - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/filter - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/using-modifiers - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/db-modifiers-select - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/range - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/db-abortsignal - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/single - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/maybesingle - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/db-csv - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/db-returns - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/getchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/removechannel - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/removeallchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-updatebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-copy - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-createsignedurls - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-createsigneduploadurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-uploadtosignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/sign-in-with-apple - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-verifyotp - weekly - 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-updateuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-onauthstatechange - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/undefined - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rpc - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/removechannel - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/removeallchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/getchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/stream - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-updatebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/using-modifiers - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/range - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/single - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/or - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/match - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/eq - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/neq - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/gt - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/gte - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/lt - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/lte - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/like - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/ilike - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/is - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/in - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/contains - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/containedby - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rangelt - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rangegt - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rangegte - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rangelte - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rangeadjacent - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/overlaps - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/textsearch - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/filter - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-setsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-refreshsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-updateuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-onauthstatechange - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/undefined - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/rpc - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/removechannel - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/getchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-updatebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/using-modifiers - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/range - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/undefined - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/single - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/or - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/match - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/eq - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/neq - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/gt - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/gte - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/lt - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/lte - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/like - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/ilike - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/is - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/in - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/contains - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/containedby - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/textsearch - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/rpc - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/or - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/match - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/eq - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/neq - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/gt - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/gte - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/lt - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/lte - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/like - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/ilike - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/is - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/in - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/contains - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/rangelt - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/rangegt - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/rangegte - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/rangelte - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/rangeadjacent - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/overlaps - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/textsearch - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/filter - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/using-modifiers - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/db-modifiers-select - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/range - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-updateuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-setsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-refreshsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-onauthstatechange - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/removechannel - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rpc - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/or - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/eq - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/neq - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/gt - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/gte - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/lt - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/lte - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/like - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/ilike - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/is - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/in - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/contains - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rangelt - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rangegt - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rangegte - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rangelte - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rangeadjacent - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/overlaps - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/textsearch - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/filter - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/range - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signinwithsso - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-reauthentication - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-resend - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-updateuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-setsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-refreshsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-onauthstatechange - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-resetpasswordforemail - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-exchangecodeforsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-enroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-challenge - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-verify - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-challengeandverify - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-unenroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-getauthenticatorassurancelevel - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/admin-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-getuserbyid - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-listusers - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-createuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-deleteuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-inviteuserbyemail - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-generatelink - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-updateuserbyid - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-mfa-listfactors - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-mfa-deletefactor - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/removechannel - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/removeallchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-updatebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-copy - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-createsignedurls - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-createsigneduploadurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-uploadtosignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-info - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-add - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-show - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-vanity-subdomains - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-vanity-subdomains-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-vanity-subdomains-delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-vanity-subdomains-check-availability - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-vanity-subdomains-activate - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-test - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-test-new - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-test-db - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-stop - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-status - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-start - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-ssl-enforcement - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-ssl-enforcement-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-ssl-enforcement-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-secrets - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-secrets-unset - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-secrets-set - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-secrets-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-projects - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-projects-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-projects-create - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-orgs - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-orgs-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-restrictions - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-restrictions-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-restrictions-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-bans - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-bans-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-bans-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration-up - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration-repair - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration-new - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-login - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-link - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-init - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-gen - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-gen-types - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-gen-types-typescript - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-gen-keys - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-serve - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-new - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-deploy - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains-reverify - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains-delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains-create - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains-activate - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-reset - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-remote - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-remote-commit - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-push - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-lint - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-dump - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-diff - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-completion - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-completion-zsh - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-completion-powershell - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-completion-fish - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-completion-bash - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/introduction - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/list-all-projects - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/create-a-project - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/list-all-organizations - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/create-an-organization - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/list-all-secrets - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/bulk-create-secrets - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/bulk-delete-secrets - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/generate-typescript-types - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/create-a-function - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/list-all-functions - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/retrieve-a-function - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/update-a-function - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/delete-a-function - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/retrieve-a-function-body - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/gets-projects-custom-hostname-config - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/deletes-a-projects-custom-hostname-configuration - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/updates-projects-custom-hostname-configuration - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/attempts-to-verify-the-dns-configuration-for-projects-custom-hostname-configuration - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/activates-a-custom-hostname-for-a-project - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/gets-projects-pgsodium-config - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/updates-projects-pgsodium-config-updating-the-root_key-can-cause-all-data-encrypted-with-the-older-key-to-become-inaccessible - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/gets-projects-network-bans - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/remove-network-bans - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/gets-projects-network-restrictions - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/updates-projects-network-restrictions - weekly - 0.5 - - diff --git a/apps/docs/public/supabase-dark.svg b/apps/docs/public/supabase-dark.svg deleted file mode 100644 index 9e96fab4ddc8e..0000000000000 --- a/apps/docs/public/supabase-dark.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/supabase-light.svg b/apps/docs/public/supabase-light.svg deleted file mode 100644 index 60cbc71dc7c74..0000000000000 --- a/apps/docs/public/supabase-light.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/scripts/search/generate-embeddings.ts b/apps/docs/scripts/search/generate-embeddings.ts deleted file mode 100644 index e4d9799000a3d..0000000000000 --- a/apps/docs/scripts/search/generate-embeddings.ts +++ /dev/null @@ -1,279 +0,0 @@ -import { createClient } from '@supabase/supabase-js' -import dotenv from 'dotenv' -import 'openai' -import { Configuration, OpenAIApi } from 'openai' -import { inspect } from 'util' -import { v4 as uuidv4 } from 'uuid' -import { fetchSources } from './sources' -import yargs from 'yargs' - -dotenv.config() - -async function generateEmbeddings() { - const argv = await yargs.option('refresh', { - alias: 'r', - description: 'Refresh data', - type: 'boolean', - }).argv - - const shouldRefresh = argv.refresh - - const requiredEnvVars = [ - 'NEXT_PUBLIC_SUPABASE_URL', - 'SUPABASE_SERVICE_ROLE_KEY', - 'OPENAI_KEY', - 'SEARCH_GITHUB_APP_ID', - 'SEARCH_GITHUB_APP_INSTALLATION_ID', - 'SEARCH_GITHUB_APP_PRIVATE_KEY', - ] - - if (requiredEnvVars.some((name) => !process.env[name])) { - throw new Error( - `Environment variables ${requiredEnvVars.join( - ', ' - )} are required: skipping embeddings generation` - ) - } - - const supabaseClient = createClient( - process.env.NEXT_PUBLIC_SUPABASE_URL, - process.env.SUPABASE_SERVICE_ROLE_KEY, - { - auth: { - persistSession: false, - autoRefreshToken: false, - }, - } - ) - - // Use this version to track which pages to purge - // after the refresh - const refreshVersion = uuidv4() - - const refreshDate = new Date() - - const embeddingSources = await fetchSources() - - console.log(`Discovered ${embeddingSources.length} pages`) - - if (!shouldRefresh) { - console.log('Checking which pages are new or have changed') - } else { - console.log('Refresh flag set, re-generating all pages') - } - - for (const embeddingSource of embeddingSources) { - const { type, source, path, parentPath } = embeddingSource - - try { - const { checksum, meta, sections } = await embeddingSource.load() - - // Check for existing page in DB and compare checksums - const { error: fetchPageError, data: existingPage } = await supabaseClient - .from('page') - .select('id, path, checksum, parentPage:parent_page_id(id, path)') - .filter('path', 'eq', path) - .limit(1) - .maybeSingle() - - if (fetchPageError) { - throw fetchPageError - } - - // We use checksum to determine if this page & its sections need to be regenerated - if (!shouldRefresh && existingPage?.checksum === checksum) { - const existingParentPage = Array.isArray(existingPage?.parentPage) - ? existingPage?.parentPage[0] - : existingPage?.parentPage - - // If parent page changed, update it - if (existingParentPage?.path !== parentPath) { - console.log(`[${path}] Parent page has changed. Updating to '${parentPath}'...`) - const { error: fetchParentPageError, data: parentPage } = await supabaseClient - .from('page') - .select() - .filter('path', 'eq', parentPath) - .limit(1) - .maybeSingle() - - if (fetchParentPageError) { - throw fetchParentPageError - } - - const { error: updatePageError } = await supabaseClient - .from('page') - .update({ parent_page_id: parentPage?.id }) - .filter('id', 'eq', existingPage.id) - - if (updatePageError) { - throw updatePageError - } - } - - // No content/embedding update required on this page - // Update other meta info - const { error: updatePageError } = await supabaseClient - .from('page') - .update({ - type, - source, - meta, - version: refreshVersion, - last_refresh: refreshDate, - }) - .filter('id', 'eq', existingPage.id) - - if (updatePageError) { - throw updatePageError - } - - continue - } - - if (existingPage) { - if (!shouldRefresh) { - console.log( - `[${path}] Docs have changed, removing old page sections and their embeddings` - ) - } else { - console.log(`[${path}] Refresh flag set, removing old page sections and their embeddings`) - } - - const { error: deletePageSectionError } = await supabaseClient - .from('page_section') - .delete() - .filter('page_id', 'eq', existingPage.id) - - if (deletePageSectionError) { - throw deletePageSectionError - } - } - - const { error: fetchParentPageError, data: parentPage } = await supabaseClient - .from('page') - .select() - .filter('path', 'eq', parentPath) - .limit(1) - .maybeSingle() - - if (fetchParentPageError) { - throw fetchParentPageError - } - - // Create/update page record. Intentionally clear checksum until we - // have successfully generated all page sections. - const { error: upsertPageError, data: page } = await supabaseClient - .from('page') - .upsert( - { - checksum: null, - path, - type, - source, - meta, - parent_page_id: parentPage?.id, - version: refreshVersion, - last_refresh: refreshDate, - }, - { onConflict: 'path' } - ) - .select() - .limit(1) - .single() - - if (upsertPageError) { - throw upsertPageError - } - - console.log(`[${path}] Adding ${sections.length} page sections (with embeddings)`) - for (const { slug, heading, content } of sections) { - // OpenAI recommends replacing newlines with spaces for best results (specific to embeddings) - const input = content.replace(/\n/g, ' ') - - try { - const configuration = new Configuration({ apiKey: process.env.OPENAI_KEY }) - const openai = new OpenAIApi(configuration) - - const embeddingResponse = await openai.createEmbedding({ - model: 'text-embedding-ada-002', - input, - }) - - if (embeddingResponse.status !== 200) { - throw new Error(inspect(embeddingResponse.data, false, 2)) - } - - const [responseData] = embeddingResponse.data.data - - const { error: insertPageSectionError, data: pageSection } = await supabaseClient - .from('page_section') - .insert({ - page_id: page.id, - slug, - heading, - content, - token_count: embeddingResponse.data.usage.total_tokens, - embedding: responseData.embedding, - }) - .select() - .limit(1) - .single() - - if (insertPageSectionError) { - throw insertPageSectionError - } - } catch (err) { - // TODO: decide how to better handle failed embeddings - console.error( - `Failed to generate embeddings for '${path}' page section starting with '${input.slice( - 0, - 40 - )}...'` - ) - - throw err - } - } - - // Set page checksum so that we know this page was stored successfully - const { error: updatePageError } = await supabaseClient - .from('page') - .update({ checksum }) - .filter('id', 'eq', page.id) - - if (updatePageError) { - throw updatePageError - } - } catch (err) { - console.error( - `Page '${path}' or one/multiple of its page sections failed to store properly. Page has been marked with null checksum to indicate that it needs to be re-generated.` - ) - console.error(err) - } - } - - console.log(`Removing old pages and their sections`) - - // Delete pages that have been removed (and their sections via cascade) - const { error: deletePageError } = await supabaseClient - .from('page') - .delete() - .filter('version', 'neq', refreshVersion) - - if (deletePageError) { - throw deletePageError - } - - console.log('Embedding generation complete') -} - -async function main() { - await generateEmbeddings() -} - -main().catch((err) => { - console.error(err) - - // Exit with non-zero code - process.exit(1) -}) diff --git a/apps/docs/scripts/search/sources/base.ts b/apps/docs/scripts/search/sources/base.ts deleted file mode 100644 index 3a12513ed965f..0000000000000 --- a/apps/docs/scripts/search/sources/base.ts +++ /dev/null @@ -1,20 +0,0 @@ -export type Json = Record< - string, - string | number | boolean | null | Json[] | { [key: string]: Json } -> - -export type Section = { - content: string - heading?: string - slug?: string -} - -export abstract class BaseSource { - checksum?: string - meta?: Json - sections?: Section[] - - constructor(public source: string, public path: string, public parentPath?: string) {} - - abstract load(): Promise<{ checksum: string; meta?: Json; sections: Section[] }> -} diff --git a/apps/docs/scripts/search/sources/github-discussion.ts b/apps/docs/scripts/search/sources/github-discussion.ts deleted file mode 100644 index a87012a9780b8..0000000000000 --- a/apps/docs/scripts/search/sources/github-discussion.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { createAppAuth } from '@octokit/auth-app' -import { Octokit } from '@octokit/core' -import { paginateGraphql } from '@octokit/plugin-paginate-graphql' -import { createHash } from 'crypto' -import { BaseSource } from './base' - -export const ExtendedOctokit = Octokit.plugin(paginateGraphql) -export type ExtendedOctokit = InstanceType - -export type Discussion = { - id: string - updatedAt: string - url: string - title: string - body: string - databaseId: number -} - -export type DiscussionsResponse = { - repository: { - discussions: { - totalCount: number - nodes: Discussion[] - } - } -} - -/** - * Fetches GitHub discussions for a repository + category - */ -export async function fetchDiscussions(owner: string, repo: string, categoryId: string) { - const octokit = new ExtendedOctokit({ - authStrategy: createAppAuth, - auth: { - appId: process.env.SEARCH_GITHUB_APP_ID, - installationId: process.env.SEARCH_GITHUB_APP_INSTALLATION_ID, - privateKey: process.env.SEARCH_GITHUB_APP_PRIVATE_KEY, - }, - }) - - const { - repository: { - discussions: { nodes: discussions }, - }, - } = await octokit.graphql.paginate( - ` - query troubleshootDiscussions($cursor: String, $owner: String!, $repo: String!, $categoryId: ID!) { - repository(owner: $owner, name: $repo) { - discussions(first: 100, after: $cursor, categoryId: $categoryId) { - totalCount - nodes { - id - updatedAt - url - title - body - databaseId - } - pageInfo { - hasNextPage - endCursor - } - } - } - } - `, - { - owner, - repo, - categoryId, - } - ) - - return discussions -} - -export class GitHubDiscussionSource extends BaseSource { - type = 'github-discussions' as const - - constructor(source: string, public discussion: Discussion) { - super(source, discussion.url) - } - - async load() { - const { id, title, updatedAt, body, databaseId } = this.discussion - - const checksum = createHash('sha256').update(updatedAt).digest('base64') - - const meta = { id, title, updatedAt } - - // Currently the discussion post itself is being considered as the answer - // (as opposed to a comment marked as answer) - // So we link the slug to the initial discussion post rather than a comment answer - const slug = `discussion-${databaseId}` - - // Format the discussion title + body as markdown for better embeddings + LLM response - const content = `# ${title}\n${body}` - - // For now, only a single section is created for GH discussions - // Consider adding multiple if we want to include comments/answers - const sections = [ - { - heading: title, - slug, - content, - }, - ] - - this.checksum = checksum - this.meta = meta - this.sections = sections - - return { - checksum, - meta, - sections, - } - } -} diff --git a/apps/docs/scripts/search/sources/index.ts b/apps/docs/scripts/search/sources/index.ts deleted file mode 100644 index 8b3fce5bbdb8c..0000000000000 --- a/apps/docs/scripts/search/sources/index.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { GitHubDiscussionSource, fetchDiscussions } from './github-discussion' -import { MarkdownSource } from './markdown' -import { - CliReferenceSource, - ClientLibReferenceSource, - OpenApiReferenceSource, -} from './reference-doc' -import { walk } from './util' - -const ignoredFiles = ['pages/404.mdx'] - -export type SearchSource = - | MarkdownSource - | OpenApiReferenceSource - | ClientLibReferenceSource - | CliReferenceSource - | GitHubDiscussionSource - -/** - * Fetches all the sources we want to index for search - */ -export async function fetchSources() { - const openApiReferenceSource = new OpenApiReferenceSource( - 'api', - '/reference/api', - { title: 'Management API Reference' }, - '../../spec/transforms/api_v0_openapi_deparsed.json', - '../../spec/common-api-sections.json' - ) - - const jsLibReferenceSource = new ClientLibReferenceSource( - 'js-lib', - '/reference/javascript', - { title: 'JavaScript Reference' }, - '../../spec/supabase_js_v2.yml', - '../../spec/common-client-libs-sections.json' - ) - - const dartLibReferenceSource = new ClientLibReferenceSource( - 'dart-lib', - '/reference/dart', - { title: 'Dart Reference' }, - '../../spec/supabase_dart_v1.yml', - '../../spec/common-client-libs-sections.json' - ) - - const pythonLibReferenceSource = new ClientLibReferenceSource( - 'python-lib', - '/reference/python', - { title: 'Python Reference' }, - '../../spec/supabase_py_v2.yml', - '../../spec/common-client-libs-sections.json' - ) - - const cSharpLibReferenceSource = new ClientLibReferenceSource( - 'csharp-lib', - '/reference/csharp', - { title: 'C# Reference' }, - '../../spec/supabase_csharp_v0.yml', - '../../spec/common-client-libs-sections.json' - ) - - const swiftLibReferenceSource = new ClientLibReferenceSource( - 'swift-lib', - '/reference/swift', - { title: 'Swift Reference' }, - '../../spec/supabase_swift_v0.yml', - '../../spec/common-client-libs-sections.json' - ) - - const ktLibReferenceSource = new ClientLibReferenceSource( - 'kt-lib', - '/reference/kotlin', - { title: 'Kotlin Reference' }, - '../../spec/supabase_kt_v0.yml', - '../../spec/common-client-libs-sections.json' - ) - - const cliReferenceSource = new CliReferenceSource( - 'cli', - '/reference/cli', - { title: 'CLI Reference' }, - '../../spec/cli_v1_commands.yaml', - '../../spec/common-cli-sections.json' - ) - - const guideSources = (await walk('pages')) - .filter(({ path }) => /\.mdx?$/.test(path)) - .filter(({ path }) => !ignoredFiles.includes(path)) - .map((entry) => new MarkdownSource('guide', entry.path)) - - const githubDiscussionSources = ( - await fetchDiscussions( - 'supabase', - 'supabase', - 'DIC_kwDODMpXOc4CUvEr' // 'Troubleshooting' category - ) - ).map((discussion) => new GitHubDiscussionSource('supabase/supabase', discussion)) - - const sources: SearchSource[] = [ - openApiReferenceSource, - jsLibReferenceSource, - dartLibReferenceSource, - pythonLibReferenceSource, - cSharpLibReferenceSource, - swiftLibReferenceSource, - ktLibReferenceSource, - cliReferenceSource, - ...githubDiscussionSources, - ...guideSources, - ] - - return sources -} diff --git a/apps/docs/scripts/search/sources/markdown.ts b/apps/docs/scripts/search/sources/markdown.ts deleted file mode 100644 index 91beb6cc01ae6..0000000000000 --- a/apps/docs/scripts/search/sources/markdown.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { createHash } from 'crypto' -import { ObjectExpression } from 'estree' -import { readFile } from 'fs/promises' -import GithubSlugger from 'github-slugger' -import { Content, Root } from 'mdast' -import { fromMarkdown } from 'mdast-util-from-markdown' -import { MdxjsEsm, mdxFromMarkdown } from 'mdast-util-mdx' -import { toMarkdown } from 'mdast-util-to-markdown' -import { toString } from 'mdast-util-to-string' -import { mdxjs } from 'micromark-extension-mdxjs' -import { u } from 'unist-builder' -import { filter } from 'unist-util-filter' -import { BaseSource, Json, Section } from './base' - -/** - * Extracts ES literals from an `estree` `ObjectExpression` - * into a plain JavaScript object. - */ -export function getObjectFromExpression(node: ObjectExpression) { - return node.properties.reduce< - Record - >((object, property) => { - if (property.type !== 'Property') { - return object - } - - const key = (property.key.type === 'Identifier' && property.key.name) || undefined - const value = (property.value.type === 'Literal' && property.value.value) || undefined - - if (!key) { - return object - } - - return { - ...object, - [key]: value, - } - }, {}) -} - -/** - * Extracts the `meta` ESM export from the MDX file. - * - * This info is akin to frontmatter. - */ -export function extractMetaExport(mdxTree: Root) { - const metaExportNode = mdxTree.children.find((node): node is MdxjsEsm => { - return ( - node.type === 'mdxjsEsm' && - node.data?.estree?.body[0]?.type === 'ExportNamedDeclaration' && - node.data.estree.body[0].declaration?.type === 'VariableDeclaration' && - node.data.estree.body[0].declaration.declarations[0]?.id.type === 'Identifier' && - node.data.estree.body[0].declaration.declarations[0].id.name === 'meta' - ) - }) - - if (!metaExportNode) { - return undefined - } - - const objectExpression = - (metaExportNode.data?.estree?.body[0]?.type === 'ExportNamedDeclaration' && - metaExportNode.data.estree.body[0].declaration?.type === 'VariableDeclaration' && - metaExportNode.data.estree.body[0].declaration.declarations[0]?.id.type === 'Identifier' && - metaExportNode.data.estree.body[0].declaration.declarations[0].id.name === 'meta' && - metaExportNode.data.estree.body[0].declaration.declarations[0].init?.type === - 'ObjectExpression' && - metaExportNode.data.estree.body[0].declaration.declarations[0].init) || - undefined - - if (!objectExpression) { - return undefined - } - - return getObjectFromExpression(objectExpression) -} - -/** - * Splits a `mdast` tree into multiple trees based on - * a predicate function. Will include the splitting node - * at the beginning of each tree. - * - * Useful to split a markdown file into smaller sections. - */ -export function splitTreeBy(tree: Root, predicate: (node: Content) => boolean) { - return tree.children.reduce((trees, node) => { - const [lastTree] = trees.slice(-1) - - if (!lastTree || predicate(node)) { - const tree: Root = u('root', [node]) - return trees.concat(tree) - } - - lastTree.children.push(node) - return trees - }, []) -} - -/** - * Parses a markdown heading which can optionally - * contain a custom anchor in the format: - * - * ```markdown - * ### My Heading [#my-custom-anchor] - * ``` - */ -export function parseHeading(heading: string): { heading: string; customAnchor?: string } { - const match = heading.match(/(.*) *\[#(.*)\]/) - if (match) { - const [, heading, customAnchor] = match - return { heading, customAnchor } - } - return { heading } -} - -/** - * Processes MDX content for search indexing. - * It extracts metadata, strips it of all JSX, - * and splits it into sub-sections based on criteria. - */ -export function processMdxForSearch(content: string): ProcessedMdx { - const checksum = createHash('sha256').update(content).digest('base64') - - const mdxTree = fromMarkdown(content, { - extensions: [mdxjs()], - mdastExtensions: [mdxFromMarkdown()], - }) - - const meta = extractMetaExport(mdxTree) - - const serializableMeta: Json = meta && JSON.parse(JSON.stringify(meta)) - - // Remove all MDX elements from markdown - const mdTree = filter( - mdxTree, - (node) => - ![ - 'mdxjsEsm', - 'mdxJsxFlowElement', - 'mdxJsxTextElement', - 'mdxFlowExpression', - 'mdxTextExpression', - ].includes(node.type) - ) - - if (!mdTree) { - return { - checksum, - meta: serializableMeta, - sections: [], - } - } - - const sectionTrees = splitTreeBy(mdTree, (node) => node.type === 'heading') - - const slugger = new GithubSlugger() - - const sections = sectionTrees.map((tree) => { - const [firstNode] = tree.children - const content = toMarkdown(tree) - - const rawHeading: string = firstNode.type === 'heading' ? toString(firstNode) : undefined - - if (!rawHeading) { - return { content } - } - - const { heading, customAnchor } = parseHeading(rawHeading) - - const slug = slugger.slug(customAnchor ?? heading) - - return { - content, - heading, - slug, - } - }) - - return { - checksum, - meta: serializableMeta, - sections, - } -} - -export type ProcessedMdx = { - checksum: string - meta: Json - sections: Section[] -} - -export class MarkdownSource extends BaseSource { - type = 'markdown' as const - - constructor(source: string, public filePath: string, public parentFilePath?: string) { - const path = filePath.replace(/^pages/, '').replace(/\.mdx?$/, '') - const parentPath = parentFilePath?.replace(/^pages/, '').replace(/\.mdx?$/, '') - - super(source, path, parentPath) - } - - async load() { - const contents = await readFile(this.filePath, 'utf8') - - const { checksum, meta, sections } = processMdxForSearch(contents) - - this.checksum = checksum - this.meta = meta - this.sections = sections - - return { - checksum, - meta, - sections, - } - } -} diff --git a/apps/docs/scripts/search/sources/reference-doc.ts b/apps/docs/scripts/search/sources/reference-doc.ts deleted file mode 100644 index 34a907bb64a04..0000000000000 --- a/apps/docs/scripts/search/sources/reference-doc.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { createHash } from 'crypto' -import { readFile } from 'fs/promises' -import yaml from 'js-yaml' -import { OpenAPIV3 } from 'openapi-types' -import { - ICommonItem, - IFunctionDefinition, - ISpec, -} from '../../../components/reference/Reference.types' -import { CliCommand, CliSpec } from '../../../generator/types/CliSpec' -import { flattenSections } from '../../../lib/helpers' -import { enrichedOperation, gen_v3 } from '../../../lib/refGenerator/helpers' -import { BaseSource, Json } from './base' - -export abstract class ReferenceSource extends BaseSource { - type = 'reference' as const - - constructor( - source: string, - path: string, - public meta: Json, - public specFilePath: string, - public sectionsFilePath: string - ) { - super(source, path) - } - - async load() { - const specContents = await readFile(this.specFilePath, 'utf8') - const refSectionsContents = await readFile(this.sectionsFilePath, 'utf8') - - const refSections: ICommonItem[] = JSON.parse(refSectionsContents) - const flattenedRefSections = flattenSections(refSections) - - const checksum = createHash('sha256') - .update(specContents + refSectionsContents) - .digest('base64') - - const specSections = this.getSpecSections(specContents) - - const sections = flattenedRefSections - .map((refSection) => { - const specSection = this.matchSpecSection(specSections, refSection.id) - - if (!specSection) { - return - } - - return { - heading: refSection.title, - slug: refSection.slug, - content: `${this.meta.title} for ${refSection.title}:\n${this.formatSection( - specSection, - refSection - )}`, - } - }) - .filter((section) => !!section) - - this.checksum = checksum - this.sections = sections - - return { - checksum, - sections, - meta: this.meta, - } - } - - abstract getSpecSections(specContents: string): SpecSection[] - abstract matchSpecSection(specSections: SpecSection[], id: string): SpecSection - abstract formatSection(specSection: SpecSection, refSection: ICommonItem): string -} - -export class OpenApiReferenceSource extends ReferenceSource { - getSpecSections(specContents: string): enrichedOperation[] { - const spec: OpenAPIV3.Document<{}> = JSON.parse(specContents) - - const generatedSpec = gen_v3(spec, '', { - apiUrl: 'apiv0', - }) - - return generatedSpec.operations - } - matchSpecSection(operations: enrichedOperation[], id: string): enrichedOperation { - return operations.find((operation) => operation.operationId === id) - } - formatSection(specOperation: enrichedOperation) { - const { summary, description, operation, path, tags } = specOperation - return JSON.stringify({ - summary, - description, - operation, - path, - tags, - }) - } -} - -export class ClientLibReferenceSource extends ReferenceSource { - getSpecSections(specContents: string): IFunctionDefinition[] { - const spec = yaml.load(specContents) as ISpec - - return spec.functions - } - matchSpecSection(functionDefinitions: IFunctionDefinition[], id: string): IFunctionDefinition { - return functionDefinitions.find((functionDefinition) => functionDefinition.id === id) - } - formatSection(functionDefinition: IFunctionDefinition, refSection: ICommonItem): string { - const { title } = refSection - const { description, title: functionName } = functionDefinition - - return JSON.stringify({ - title, - description, - functionName, - }) - } -} - -export class CliReferenceSource extends ReferenceSource { - getSpecSections(specContents: string): CliCommand[] { - const spec = yaml.load(specContents) as CliSpec - - return spec.commands - } - matchSpecSection(cliCommands: CliCommand[], id: string): CliCommand { - return cliCommands.find((cliCommand) => cliCommand.id === id) - } - formatSection(cliCommand: CliCommand): string { - const { summary, description, usage } = cliCommand - return JSON.stringify({ - summary, - description, - usage, - }) - } -} diff --git a/apps/docs/scripts/search/sources/util.ts b/apps/docs/scripts/search/sources/util.ts deleted file mode 100644 index b43bf98cdd105..0000000000000 --- a/apps/docs/scripts/search/sources/util.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { readdir, stat } from 'fs/promises' -import { basename, dirname, join } from 'path' - -export type WalkEntry = { - path: string - parentPath?: string -} - -export async function walk(dir: string, parentPath?: string): Promise { - const immediateFiles = await readdir(dir) - - const recursiveFiles = await Promise.all( - immediateFiles.map(async (file) => { - const path = join(dir, file) - const stats = await stat(path) - if (stats.isDirectory()) { - // Keep track of document hierarchy (if this dir has corresponding doc file) - const docPath = `${basename(path)}.mdx` - - return walk( - path, - immediateFiles.includes(docPath) ? join(dirname(path), docPath) : parentPath - ) - } else if (stats.isFile()) { - return [ - { - path: path, - parentPath, - }, - ] - } else { - return [] - } - }) - ) - - const flattenedFiles = recursiveFiles.reduce( - (all, folderContents) => all.concat(folderContents), - [] - ) - - return flattenedFiles.sort((a, b) => a.path.localeCompare(b.path)) -} diff --git a/apps/docs/scripts/tsconfig.json b/apps/docs/scripts/tsconfig.json deleted file mode 100644 index de1ecb67a32c4..0000000000000 --- a/apps/docs/scripts/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -// generator files need their own tsconfig.json because they don't like "module": "esnext" setting that nextjs requires in the main tsconfig -{ - "compilerOptions": { - "incremental": true, - "noImplicitAny": false, - "esModuleInterop": true, - "resolveJsonModule": true, - "baseUrl": ".", - "paths": { - "~/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] -} diff --git a/apps/docs/styles/Home.module.css b/apps/docs/styles/Home.module.css deleted file mode 100644 index 6d7be21e752cb..0000000000000 --- a/apps/docs/styles/Home.module.css +++ /dev/null @@ -1,126 +0,0 @@ -.container { - padding: 0; -} - -.main { - flex: 1; - display: flex; - flex-direction: column; -} - -.content { - min-height: 400px; -} - -.footer { - display: flex; - flex-direction: column; - flex: 1; - padding: 2rem 0; - justify-content: flex-start; - align-items: center; -} - -.footer a { - display: flex; - justify-content: flex-start; - align-items: flex-start; - flex-grow: 1; -} - -.footer > div > div { - width: 256px; -} -.footer h4 { - margin-bottom: 1em; -} -.footer a { - margin-top: 1em; -} - -.title a { - color: #0070f3; - text-decoration: none; -} - -.title a:hover, -.title a:focus, -.title a:active { - text-decoration: underline; -} - -.title { - margin: 0; - line-height: 1.15; - font-size: 4rem; -} - -.title, -.description { - text-align: center; -} - -.description { - margin: 4rem 0; - line-height: 1.5; - font-size: 1.5rem; -} - -/* .code { - background: #fafafa; - border-radius: 5px; - padding: 0.75rem; - font-size: 1.1rem; - font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, - Bitstream Vera Sans Mono, Courier New, monospace; -} */ - -.grid { - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - max-width: 800px; -} - -.card { - margin: 1rem; - padding: 1.5rem; - text-align: left; - color: inherit; - text-decoration: none; - border: 1px solid #eaeaea; - border-radius: 10px; - transition: color 0.15s ease, border-color 0.15s ease; - max-width: 300px; -} - -.card:hover, -.card:focus, -.card:active { - color: #0070f3; - border-color: #0070f3; -} - -.card h2 { - margin: 0 0 1rem 0; - font-size: 1.5rem; -} - -.card p { - margin: 0; - font-size: 1.25rem; - line-height: 1.5; -} - -.logo { - height: 1em; - margin-left: 0.5rem; -} - -@media (max-width: 600px) { - .grid { - width: 100%; - flex-direction: column; - } -} diff --git a/apps/docs/styles/main.scss b/apps/docs/styles/main.scss deleted file mode 100644 index ece45d88688ec..0000000000000 --- a/apps/docs/styles/main.scss +++ /dev/null @@ -1,284 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@import './../../../packages/ui/build/css/source/global.css'; -@import './../../../packages/ui/build/css/themes/dark.css'; -@import './../../../packages/ui/build/css/themes/light.css'; - -@font-face { - font-family: 'custom-font'; - src: url(../../../packages/common/assets/fonts/CustomFont-Book.woff2) format('woff2'), - url(../../../packages/common/assets/fonts/CustomFont-Book.woff) format('woff'); - font-weight: 400; - font-style: normal; - font-display: swap; -} - -@font-face { - font-family: 'custom-font'; - src: url(../../../packages/common/assets/fonts/CustomFont-Medium.woff2) format('woff2'), - url(../../../packages/common/assets/fonts/CustomFont-Medium.woff) format('woff'); - font-weight: 500; - font-style: normal; - font-display: swap; -} - -:root { - --sidebar-width: 300px; -} - -body { - @apply bg-scale-200; - scroll-behavior: smooth; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -::selection { - background-color: #6ee7b7 !important; - color: #333 !important; -} - -// a { -// text-decoration: none !important; -// } - -article h1 { - // margin-bottom: 2rem !important; - // font-size: 3rem !important; - // font-weight: 400 !important; -} - -.thin-scrollbar { - scrollbar-width: thin; -} - -.sidebar-width { - width: var(--sidebar-width); -} - -.docs-width { - max-width: calc(100% - var(--sidebar-width)); - - @media screen and (max-width: 1024px) { - max-width: none; - } -} - -.table-of-contents-height { - max-height: calc(100vh - 3.75rem - 2rem); - top: calc(4rem + 60px); // padding height + navbar height -} - -.width-full { - width: 100% !important; -} - -.p:not(.prose *):not(.overwrite) { - @apply text-scale-1100; - margin-bottom: 16px; -} - -.small:not(.prose *):not(.overwrite) { - @apply text-scale-900 text-xs; -} - -.prose :where(p):not(:where([class~='not-prose'] *)) { - white-space: pre-line; -} - -code[class*='language-'], -pre[class*='language-'] { - text-shadow: none !important; -} - -// Spec doc specifics ported from docusaurus -// @TODO these should be converted to Tailwind classes - -.method-list-item { - @apply border-t border-gray-400; - .method-list-item-label { - @apply flex items-center gap-1; - } - .method-list-item-label-name { - @apply font-mono font-bold text-sm py-2; - } - .method-list-item-label-badge { - @apply font-mono text-xs px-1; - overflow-wrap: anywhere; - } - .method-list-item-validation { - @apply flex flex-wrap gap-2 items-center; - } - .method-list-item-description { - @apply text-sm space-y-2; - } -} - -.method-list-title-isChild { - font-family: var(--custom-font-size-xs); - & h5 { - font-weight: 200; - } -} - -.method-list-item-validation { - code { - @apply text-xs bg-scale-300 rounded; - padding: 1px 6px; - } -} - -.method-list-group { - @apply p-0 m-0 list-none border-b; -} - -.method-list-group .method-list-group { - @apply border border-scale-400 rounded-md; - margin-bottom: 20px; - max-width: 600px; -} - -.method-list-group .method-list-group li { - margin-top: 0; - padding: 12px; - border-bottom: none; -} -.method-list-title { - margin: 0; - padding: 6px 12px; -} -.method-list-group .method-list-group li div, -.method-list-group .method-list-group li h4, -.method-list-group .method-list-group li p { - padding: 0; - margin: 0; -} -.method-list-group .method-list-group li h4 { - margin-bottom: 4px; -} - -// These should move to their own components -// wasn't able to get an import path working -.parent-menu-toggle.active { - svg { - transform: rotate(90deg); - } -} - -// ToC styles -.toc__menu-item--active { - color: hsl(var(--brand-default)) !important; -} - -.video-container { - position: relative; - width: 100%; - padding-bottom: 56.25%; - - iframe { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; - } -} - -.admonition-content > p { - @apply m-0; -} - -// format inside

    -h2 code, -h3 code, -h4 code { - word-break: keep-all !important; - white-space: nowrap !important; - padding: 0.1rem 0.35rem !important; - - &:before { - display: none; - } - &::after { - display: none; - } -} - -// code inside admonitions -.admonition-content p code { - @apply bg-scale-300; - word-break: keep-all !important; - white-space: nowrap !important; -} - -article p strong { - color: inherit !important; -} - -// fix box shadow when is inside -a:has(code) { - box-shadow: none !important; -} - -// fix code line wrapping -// need to set this to happen from medium onwards, otherwise the would cause horizontal scroll -article p code { - &::before, - &::after { - display: none !important; - } -} - -.short-inline-codeblock { - @media screen and (min-width: 769px) { - white-space: pre !important; - } -} - -// fix firefox issue with li wrapping -.doc-content-container ul li div.relative { - display: inline-block; -} - -// fix ToC links when they have inside -.toc-menu li a 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; - } -} - -/* -* sets the image in @Next/Image components -* to respect the height of the content -* -*/ -.next-image--dynamic-fill { - width: 100%; - grid-column: 1 / -1; -} -.next-image--dynamic-fill > span { - position: relative !important; -} -.next-image--dynamic-fill img { - object-fit: contain; - width: 100% !important; - position: relative !important; - height: unset !important; -} diff --git a/apps/docs/styles/new-docs.scss b/apps/docs/styles/new-docs.scss deleted file mode 100644 index 10591acd3d6ad..0000000000000 --- a/apps/docs/styles/new-docs.scss +++ /dev/null @@ -1,22 +0,0 @@ -// 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/styles/prism-okaidia.scss b/apps/docs/styles/prism-okaidia.scss deleted file mode 100644 index 85299e748c06d..0000000000000 --- a/apps/docs/styles/prism-okaidia.scss +++ /dev/null @@ -1,123 +0,0 @@ -/** - * okaidia theme for JavaScript, CSS and HTML - * Loosely based on Monokai textmate theme by http://www.monokai.nl/ - * @author ocodia - */ - -code[class*='language-'], -pre[class*='language-'] { - color: #555; - text-shadow: 0 1px rgba(0, 0, 0, 0.3); - font-family: Consolas, Monaco, 'Andale Mono', monospace; - direction: ltr; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - line-height: 1.5; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; - - .dark & { - color: #f8f8f2; - } -} - -/* Code blocks */ -pre[class*='language-'] { - padding: 1em; - margin: 0.5em 0; - overflow: auto; - border-radius: 0.3em; -} - -:not(pre) > code[class*='language-'], -pre[class*='language-'] { - background: #272822; -} - -/* Inline code */ -:not(pre) > code[class*='language-'] { - padding: 0.1em; - border-radius: 0.3em; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: slategray; -} - -.token.punctuation { - color: #f8f8f2; -} - -.namespace { - opacity: 0.7; -} - -.token.property, -.token.tag, -.token.constant, -.token.symbol, -.token.deleted { - color: #f92672; -} - -.token.boolean, -.token.number { - color: #ae81ff; -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { - color: #a6e22e; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string, -.token.variable { - color: #f8f8f2; -} - -.token.atrule, -.token.attr-value, -.token.function { - color: #e6db74; -} - -.token.keyword { - color: #66d9ef; -} - -.token.regex, -.token.important { - color: #fd971f; -} - -.token.important, -.token.bold { - font-weight: bold; -} -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} diff --git a/apps/docs/tailwind.config.js b/apps/docs/tailwind.config.js deleted file mode 100644 index c8bf2490119d1..0000000000000 --- a/apps/docs/tailwind.config.js +++ /dev/null @@ -1,23 +0,0 @@ -const config = require('config/tailwind.config') - -module.exports = config({ - content: [ - '../../packages/ui/src/**/*.{tsx,ts,js}', - './pages/**/*.{tsx,mdx}', - './components/**/*.tsx', - './layouts/**/*.tsx', - './src/**/*.{ts,tsx,mdx}', - './docs/**/*.{tsx,mdx}', - ], - plugins: [ - function ({ addUtilities, addVariant }) { - addUtilities({ - // prose (tailwind typography) helpers - // useful for removing margins in prose styled sections - '.prose--remove-p-margin p': { - margin: '0', - }, - }) - }, - ], -}) diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json deleted file mode 100644 index 3600bbffffcf4..0000000000000 --- a/apps/docs/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "incremental": true, - "noImplicitAny": false, - "baseUrl": ".", - "paths": { - "~/*": ["./*"], - "@ui/*": ["./../../packages/ui/src/*"] // handle ui package paths - }, - "target": "es2015", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": false, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "module": "esnext" - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "pages/guides/append-test.js"], - "exclude": ["node_modules"] -} diff --git a/apps/docs/types/code-hike.d.ts b/apps/docs/types/code-hike.d.ts deleted file mode 100644 index 5d2ca4d54d0b1..0000000000000 --- a/apps/docs/types/code-hike.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { remarkCodeHike } from '@code-hike/mdx' - -declare module '@code-hike/mdx' { - export type CodeHikeRemarkPlugin = typeof remarkCodeHike - export type CodeHikeConfig = Parameters[0] -} diff --git a/apps/docs/types/index.ts b/apps/docs/types/index.ts deleted file mode 100644 index 88cdf87ab6b4e..0000000000000 --- a/apps/docs/types/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './next' - -export type Json = string | number | boolean | { [key: string]: Json } | Json[] diff --git a/apps/docs/types/next.ts b/apps/docs/types/next.ts deleted file mode 100644 index b525bed86bc8a..0000000000000 --- a/apps/docs/types/next.ts +++ /dev/null @@ -1,11 +0,0 @@ -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/docs/types/sse.d.ts b/apps/docs/types/sse.d.ts deleted file mode 100644 index dbf97ac08365a..0000000000000 --- a/apps/docs/types/sse.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -declare module 'sse.js' { - export type SSEOptions = EventSourceInit & { - headers?: Record - payload?: string - method?: string - } - - export class SSE extends EventSource { - constructor(url: string | URL, sseOptions?: SSEOptions) - stream(): void - } -} diff --git a/apps/docs/types/yaml.d.ts b/apps/docs/types/yaml.d.ts deleted file mode 100644 index 519982d6518bb..0000000000000 --- a/apps/docs/types/yaml.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -declare module '*.yml' { - import { Json } from '.' - - const value: Json - export default value -} - -declare module '*.yaml' { - import { Json } from '.' - - const value: Json - export default value -} diff --git a/apps/www/public/planetpg-angelico_de_los_reyes-rss.xml b/apps/www/public/planetpg-angelico_de_los_reyes-rss.xml index eee5d423ed76b..05bcd89976bb0 100644 --- a/apps/www/public/planetpg-angelico_de_los_reyes-rss.xml +++ b/apps/www/public/planetpg-angelico_de_los_reyes-rss.xml @@ -5,35 +5,55 @@ https://supabase.com/blog Latest Postgres news from Angelico de los Reyes at Supabase en +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgres-point-in-time-recovery Point in Time Recovery is now available for Pro projects https://supabase.com/blog/postgres-point-in-time-recovery We're making PITR available for more projects, with a new Dashboard UI that makes it simple to use. +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Sun, 02 Aug 2020 00:00:00 GMT +======= Sat, 01 Aug 2020 21:00:00 GMT +>>>>>>> origin/master 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? +<<<<<<< HEAD + Thu, 09 Jul 2020 00:00:00 GMT +======= Wed, 08 Jul 2020 21:00:00 GMT +>>>>>>> origin/master 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? +<<<<<<< HEAD + Tue, 07 Jul 2020 00:00:00 GMT +======= Mon, 06 Jul 2020 21:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-ant_wilson-rss.xml b/apps/www/public/planetpg-ant_wilson-rss.xml index c05190295d919..f5e5906ae27c1 100644 --- a/apps/www/public/planetpg-ant_wilson-rss.xml +++ b/apps/www/public/planetpg-ant_wilson-rss.xml @@ -5,14 +5,22 @@ https://supabase.com/blog Latest Postgres news from Ant Wilson at Supabase en +<<<<<<< HEAD + Sat, 27 Feb 2021 00:00:00 GMT +======= Fri, 26 Feb 2021 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/cracking-postgres-interview Cracking PostgreSQL Interview Questions https://supabase.com/blog/cracking-postgres-interview Understand the top PostgreSQL Interview Questions +<<<<<<< HEAD + Sat, 27 Feb 2021 00:00:00 GMT +======= Fri, 26 Feb 2021 22:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-bo_lu-rss.xml b/apps/www/public/planetpg-bo_lu-rss.xml index 09cc2b443626a..a9f278364b9b2 100644 --- a/apps/www/public/planetpg-bo_lu-rss.xml +++ b/apps/www/public/planetpg-bo_lu-rss.xml @@ -5,14 +5,22 @@ https://supabase.com/blog Latest Postgres news from Bo Lu at Supabase en +<<<<<<< HEAD + Thu, 15 Dec 2022 00:00:00 GMT +======= Wed, 14 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgres-foreign-data-wrappers-rust Supabase Wrappers, a Postgres FDW framework written in Rust https://supabase.com/blog/postgres-foreign-data-wrappers-rust A framework for building Postgres Foreign Data Wrappers which connects to Stripe, Firebase, Clickhouse, and more. +<<<<<<< HEAD + Thu, 15 Dec 2022 00:00:00 GMT +======= Wed, 14 Dec 2022 22:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-burggraf-rss.xml b/apps/www/public/planetpg-burggraf-rss.xml index 6523813f1d83a..79a4a4ad0544e 100644 --- a/apps/www/public/planetpg-burggraf-rss.xml +++ b/apps/www/public/planetpg-burggraf-rss.xml @@ -5,21 +5,33 @@ https://supabase.com/blog Latest Postgres news from Mark Burggraf at Supabase en +<<<<<<< HEAD + Thu, 24 Nov 2022 00:00:00 GMT +======= Wed, 23 Nov 2022 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Thu, 24 Nov 2022 00:00:00 GMT +======= Wed, 23 Nov 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 03 Oct 2022 00:00:00 GMT +======= Sun, 02 Oct 2022 21:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-egor_romanov-rss.xml b/apps/www/public/planetpg-egor_romanov-rss.xml index 5e55ea51cb35a..698122567ec64 100644 --- a/apps/www/public/planetpg-egor_romanov-rss.xml +++ b/apps/www/public/planetpg-egor_romanov-rss.xml @@ -5,21 +5,33 @@ https://supabase.com/blog Latest Postgres news from Egor Romanov at Supabase en +<<<<<<< HEAD + Thu, 03 Aug 2023 00:00:00 GMT +======= Wed, 02 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/fewer-dimensions-are-better-pgvector pgvector: Fewer dimensions are better https://supabase.com/blog/fewer-dimensions-are-better-pgvector Increase performance in pgvector by using embedding vectors with fewer dimensions +<<<<<<< HEAD + Thu, 03 Aug 2023 00:00:00 GMT +======= Wed, 02 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/pgvector-performance pgvector 0.4.0 performance https://supabase.com/blog/pgvector-performance There's been lot of talk about pgvector performance lately, so we took some datasets and pushed pgvector to the limits to find out its strengths and limitations. +<<<<<<< HEAD + Thu, 13 Jul 2023 00:00:00 GMT +======= Wed, 12 Jul 2023 21:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-gregnr-rss.xml b/apps/www/public/planetpg-gregnr-rss.xml index 0351c1ef398ce..0192dc5734463 100644 --- a/apps/www/public/planetpg-gregnr-rss.xml +++ b/apps/www/public/planetpg-gregnr-rss.xml @@ -5,21 +5,33 @@ https://supabase.com/blog Latest Postgres news from Greg Richardson at Supabase en +<<<<<<< HEAD + Thu, 03 Aug 2023 00:00:00 GMT +======= Wed, 02 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/fewer-dimensions-are-better-pgvector pgvector: Fewer dimensions are better https://supabase.com/blog/fewer-dimensions-are-better-pgvector Increase performance in pgvector by using embedding vectors with fewer dimensions +<<<<<<< HEAD + Thu, 03 Aug 2023 00:00:00 GMT +======= Wed, 02 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/openai-embeddings-postgres-vector Storing OpenAI embeddings in Postgres with pgvector https://supabase.com/blog/openai-embeddings-postgres-vector An example of how to build an AI-powered search engine using OpenAI's embeddings and PostgreSQL. +<<<<<<< HEAD + Mon, 06 Feb 2023 00:00:00 GMT +======= Sun, 05 Feb 2023 22:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-michel-rss.xml b/apps/www/public/planetpg-michel-rss.xml index c0cb6b29758ec..9e8caadca6d90 100644 --- a/apps/www/public/planetpg-michel-rss.xml +++ b/apps/www/public/planetpg-michel-rss.xml @@ -5,21 +5,33 @@ https://supabase.com/blog Latest Postgres news from Michel Pelletier at Supabase en +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/vault-now-in-beta Supabase Vault is now in Beta https://supabase.com/blog/vault-now-in-beta A Postgres extension to store encrypted secrets and encrypt data. +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 01 Dec 2022 00:00:00 GMT +======= Wed, 30 Nov 2022 22:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-oli_rice-rss.xml b/apps/www/public/planetpg-oli_rice-rss.xml index 2f5b5adc7cb60..f4b93e88a7fac 100644 --- a/apps/www/public/planetpg-oli_rice-rss.xml +++ b/apps/www/public/planetpg-oli_rice-rss.xml @@ -5,56 +5,88 @@ https://supabase.com/blog Latest Postgres news from Oliver Rice at Supabase en +<<<<<<< HEAD + Thu, 03 Aug 2023 00:00:00 GMT +======= Wed, 02 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/fewer-dimensions-are-better-pgvector pgvector: Fewer dimensions are better https://supabase.com/blog/fewer-dimensions-are-better-pgvector Increase performance in pgvector by using embedding vectors with fewer dimensions +<<<<<<< HEAD + Thu, 03 Aug 2023 00:00:00 GMT +======= Wed, 02 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/whats-new-in-pg-graphql-v1-2 What's New in pg_graphql v1.2 https://supabase.com/blog/whats-new-in-pg-graphql-v1-2 New Features in the v1.2 release of pg_graphql +<<<<<<< HEAD + Fri, 21 Apr 2023 00:00:00 GMT +======= Thu, 20 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/type-constraints-in-65-lines-of-sql Type Constraints in 65 lines of SQL https://supabase.com/blog/type-constraints-in-65-lines-of-sql Creating validated data types in Postgres +<<<<<<< HEAD + Fri, 17 Feb 2023 00:00:00 GMT +======= Thu, 16 Feb 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/pg-graphql-v1 pg_graphql v1.0 https://supabase.com/blog/pg-graphql-v1 Announcing the v1.0 release of pg_graphql +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgres-foreign-data-wrappers-rust Supabase Wrappers, a Postgres FDW framework written in Rust https://supabase.com/blog/postgres-foreign-data-wrappers-rust A framework for building Postgres Foreign Data Wrappers which connects to Stripe, Firebase, Clickhouse, and more. +<<<<<<< HEAD + Thu, 15 Dec 2022 00:00:00 GMT +======= Wed, 14 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 19 Aug 2022 00:00:00 GMT +======= Thu, 18 Aug 2022 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgres-audit Postgres Auditing in 150 lines of SQL https://supabase.com/blog/postgres-audit PostgreSQL has a robust set of features which we can leverage to create a generic auditing solution in 150 lines of SQL. +<<<<<<< HEAD + Tue, 08 Mar 2022 00:00:00 GMT +======= Mon, 07 Mar 2022 22:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-paul_copplestone-rss.xml b/apps/www/public/planetpg-paul_copplestone-rss.xml index c7dee6ce7e48b..3eb0620b9b940 100644 --- a/apps/www/public/planetpg-paul_copplestone-rss.xml +++ b/apps/www/public/planetpg-paul_copplestone-rss.xml @@ -5,49 +5,77 @@ https://supabase.com/blog Latest Postgres news from Paul Copplestone at Supabase en +<<<<<<< HEAD + Mon, 01 May 2023 00:00:00 GMT +======= Sun, 30 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgres-pluggable-strorage Next steps for Postgres pluggable storage https://supabase.com/blog/postgres-pluggable-strorage Exploring history of Postgres pluggable storage and the possibility of landing it in the Postgres core. +<<<<<<< HEAD + Mon, 01 May 2023 00:00:00 GMT +======= Sun, 30 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgres-foreign-data-wrappers-rust Supabase Wrappers, a Postgres FDW framework written in Rust https://supabase.com/blog/postgres-foreign-data-wrappers-rust A framework for building Postgres Foreign Data Wrappers which connects to Stripe, Firebase, Clickhouse, and more. +<<<<<<< HEAD + Thu, 15 Dec 2022 00:00:00 GMT +======= Wed, 14 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Sat, 10 Dec 2022 00:00:00 GMT +======= Fri, 09 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 28 Jun 2022 00:00:00 GMT +======= Mon, 27 Jun 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 05 Mar 2021 00:00:00 GMT +======= Thu, 04 Mar 2021 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgresql-views Postgres Views https://supabase.com/blog/postgresql-views Creating and using a view in PostgreSQL. +<<<<<<< HEAD + Wed, 18 Nov 2020 00:00:00 GMT +======= Tue, 17 Nov 2020 22:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-pavel-rss.xml b/apps/www/public/planetpg-pavel-rss.xml index 8b3b258debf3a..35bb9e91fd647 100644 --- a/apps/www/public/planetpg-pavel-rss.xml +++ b/apps/www/public/planetpg-pavel-rss.xml @@ -5,28 +5,44 @@ https://supabase.com/blog Latest Postgres news from Pavel Borisov at Supabase en +<<<<<<< HEAD + Thu, 13 Jul 2023 00:00:00 GMT +======= Wed, 12 Jul 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/pgvector-performance pgvector 0.4.0 performance https://supabase.com/blog/pgvector-performance There's been lot of talk about pgvector performance lately, so we took some datasets and pushed pgvector to the limits to find out its strengths and limitations. +<<<<<<< HEAD + Thu, 13 Jul 2023 00:00:00 GMT +======= Wed, 12 Jul 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/new-in-postgres-15 What's new in Postgres 15? https://supabase.com/blog/new-in-postgres-15 Describes the release of Postgres 15, new features and reasons to use it +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Thu, 27 Oct 2022 00:00:00 GMT +======= Wed, 26 Oct 2022 21:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-steve_chavez-rss.xml b/apps/www/public/planetpg-steve_chavez-rss.xml index 1341da51bee4f..0d42df79f7883 100644 --- a/apps/www/public/planetpg-steve_chavez-rss.xml +++ b/apps/www/public/planetpg-steve_chavez-rss.xml @@ -5,21 +5,33 @@ https://supabase.com/blog Latest Postgres news from Steve Chavez at Supabase en +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgrest-11-prerelease PostgREST 11 pre-release https://supabase.com/blog/postgrest-11-prerelease Describes new features of PostgREST 11 pre-release +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 02 Jul 2021 00:00:00 GMT +======= Thu, 01 Jul 2021 21:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/planetpg-victor-rss.xml b/apps/www/public/planetpg-victor-rss.xml index fa447ad16e026..28071ca896336 100644 --- a/apps/www/public/planetpg-victor-rss.xml +++ b/apps/www/public/planetpg-victor-rss.xml @@ -5,28 +5,44 @@ https://supabase.com/blog Latest Postgres news from Victor at Supabase en +<<<<<<< HEAD + Fri, 14 Oct 2022 00:00:00 GMT +======= Thu, 13 Oct 2022 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Fri, 14 Oct 2022 00:00:00 GMT +======= Thu, 13 Oct 2022 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Thu, 08 Sep 2022 00:00:00 GMT +======= Wed, 07 Sep 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 18 Jul 2022 00:00:00 GMT +======= Sun, 17 Jul 2022 21:00:00 GMT +>>>>>>> origin/master diff --git a/apps/www/public/rss.xml b/apps/www/public/rss.xml index ee53242abf950..b3292571e383f 100644 --- a/apps/www/public/rss.xml +++ b/apps/www/public/rss.xml @@ -5,1435 +5,2255 @@ https://supabase.com Latest news from Supabase en +<<<<<<< HEAD + Fri, 11 Aug 2023 00:00:00 GMT +======= Thu, 10 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supavisor-1-million Supavisor: Scaling Postgres to 1 Million Connections https://supabase.com/blog/supavisor-1-million Supavisor is a scalable, cloud-native Postgres connection pooler. We connected a million clients to it to see how it performs. +<<<<<<< HEAD + Fri, 11 Aug 2023 00:00:00 GMT +======= Thu, 10 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-soc2-hipaa Supabase is now HIPAA and SOC2 Type 2 compliant https://supabase.com/blog/supabase-soc2-hipaa This documents our journey from SOC2 Type 1 to SOC2 Type2 and HIPAA compliance. You can start building healthcare apps on Supabase today. +<<<<<<< HEAD + Fri, 11 Aug 2023 00:00:00 GMT +======= Thu, 10 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/launch-week-8-community-highlights Launch Week 8 Community Highlights https://supabase.com/blog/launch-week-8-community-highlights Highlights from the community for the past 4 months. +<<<<<<< HEAD + Fri, 11 Aug 2023 00:00:00 GMT +======= Thu, 10 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-integrations-marketplace Supabase Integrations Marketplace https://supabase.com/blog/supabase-integrations-marketplace Become a Supabase Integrations Partner: Publish OAuth Apps and Build with Supabase. +<<<<<<< HEAD + Thu, 10 Aug 2023 00:00:00 GMT +======= Wed, 09 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/using-supabase-with-vercel Vercel Integration and Next.js App Router Support https://supabase.com/blog/using-supabase-with-vercel Using Supabase with Vercel and Next.js is now a lot easier. +<<<<<<< HEAD + Thu, 10 Aug 2023 00:00:00 GMT +======= Wed, 09 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-studio-3-0 Supabase Studio 3.0: AI SQL Editor, Schema Diagrams, and new Wrappers https://supabase.com/blog/supabase-studio-3-0 Supabase Studio now comes with an AI assisted SQL Editor, schema diagrams, and much more. +<<<<<<< HEAD + Wed, 09 Aug 2023 00:00:00 GMT +======= Tue, 08 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-local-dev Supabase Local Dev: migrations, branching, and observability https://supabase.com/blog/supabase-local-dev New features to streamline the interaction between CLI, code editors, and remote databases. +<<<<<<< HEAD + Tue, 08 Aug 2023 00:00:00 GMT +======= Mon, 07 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/hugging-face-supabase Hugging Face is now supported in Supabase https://supabase.com/blog/hugging-face-supabase We've added support Hugging Face support in our Python Vector Client and Edge Functions. +<<<<<<< HEAD + Mon, 07 Aug 2023 00:00:00 GMT +======= Sun, 06 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/why-supabase-remote Why we'll stay remote https://supabase.com/blog/why-supabase-remote Offices are making a comeback, just not at Supabase. +<<<<<<< HEAD + Sat, 05 Aug 2023 00:00:00 GMT +======= Fri, 04 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/interactive-constellation-threejs-react-three-fiber Coding the stars - an interactive constellation with Three.js and React Three Fiber https://supabase.com/blog/interactive-constellation-threejs-react-three-fiber How we built a constellation of stars with Three.js and React Three Fiber. +<<<<<<< HEAD + Fri, 04 Aug 2023 00:00:00 GMT +======= Thu, 03 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/fewer-dimensions-are-better-pgvector pgvector: Fewer dimensions are better https://supabase.com/blog/fewer-dimensions-are-better-pgvector Increase performance in pgvector by using embedding vectors with fewer dimensions +<<<<<<< HEAD + Thu, 03 Aug 2023 00:00:00 GMT +======= Wed, 02 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/beta-update-july-2023 Supabase Beta July 2023 https://supabase.com/blog/beta-update-july-2023 Launch Week 8 is coming - but we still shipped some goodies during July +<<<<<<< HEAD + Wed, 02 Aug 2023 00:00:00 GMT +======= Tue, 01 Aug 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/react-native-storage React Native file upload with Supabase Storage https://supabase.com/blog/react-native-storage Learn how to implement authentication and file upload in a React Native app. +<<<<<<< HEAD + Tue, 01 Aug 2023 00:00:00 GMT +======= Mon, 31 Jul 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-lw8-hackathon Supabase Launch Week 8 Hackathon https://supabase.com/blog/supabase-lw8-hackathon Build an Open Source Project over 10 days. 5 prize categories. +<<<<<<< HEAD + Tue, 25 Jul 2023 00:00:00 GMT +======= Mon, 24 Jul 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/flutter-authentication Getting started with Flutter authentication https://supabase.com/blog/flutter-authentication Learn how authentication on Flutter works through Google sign in with Supabase auth. +<<<<<<< HEAD + Tue, 18 Jul 2023 00:00:00 GMT +======= Mon, 17 Jul 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/pgvector-performance pgvector 0.4.0 performance https://supabase.com/blog/pgvector-performance There's been lot of talk about pgvector performance lately, so we took some datasets and pushed pgvector to the limits to find out its strengths and limitations. +<<<<<<< HEAD + Thu, 13 Jul 2023 00:00:00 GMT +======= Wed, 12 Jul 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgrest-11-1-release What is new in PostgREST v11.1? https://supabase.com/blog/postgrest-11-1-release Impersonated Role Settings, Configurable Isolation Level, improved Bulk Insert, and more +<<<<<<< HEAD + Wed, 12 Jul 2023 00:00:00 GMT +======= Tue, 11 Jul 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-update-june-2023 Supabase Beta June 2023 https://supabase.com/blog/supabase-beta-update-june-2023 A plethora of announcements... read till the end to find out when is the new Launch Week +<<<<<<< HEAD + Thu, 06 Jul 2023 00:00:00 GMT +======= Wed, 05 Jul 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/native-mobile-auth Native Mobile Auth Support for Google and Apple Sign in https://supabase.com/blog/native-mobile-auth Supabase auth adds full support for native mobile sign in with Apple and Google. +<<<<<<< HEAD + Tue, 27 Jun 2023 00:00:00 GMT +======= Mon, 26 Jun 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-update-may-2023 Supabase Beta May 2023 https://supabase.com/blog/supabase-beta-update-may-2023 Learn about the great things we shipped last month. Spoiler alert... lots of AI. +<<<<<<< HEAD + Fri, 09 Jun 2023 00:00:00 GMT +======= Thu, 08 Jun 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/vecs Supabase Vecs: a vector client for Postgres https://supabase.com/blog/vecs Introducing Supabase Vecs, a PostgreSQL vector client +<<<<<<< HEAD + Mon, 29 May 2023 00:00:00 GMT +======= Sun, 28 May 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/flutter-hackathon-winners Flutter Hackathon Winners https://supabase.com/blog/flutter-hackathon-winners Announcing the winners of the Flutter Hackathon! +<<<<<<< HEAD + Mon, 29 May 2023 00:00:00 GMT +======= Sun, 28 May 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/chatgpt-plugins-support-postgres ChatGPT plugins now support Postgres & Supabase https://supabase.com/blog/chatgpt-plugins-support-postgres Supabase recently contributed to the OpenAI Retrieval Plugin repo with a Postgres and a Supabase implementation to help developers build ChatGPT plugins using pgvector. +<<<<<<< HEAD + Thu, 25 May 2023 00:00:00 GMT +======= Wed, 24 May 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/building-chatgpt-plugins-template Building ChatGPT Plugins with Supabase Edge Runtime https://supabase.com/blog/building-chatgpt-plugins-template We're releasing a ChatGPT plugin template written in TypeScript and running on Deno! +<<<<<<< HEAD + Mon, 15 May 2023 00:00:00 GMT +======= Sun, 14 May 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/flutter-hackathon Flutter Hackathon https://supabase.com/blog/flutter-hackathon Build Flutter apps and win limited edition swag. +<<<<<<< HEAD + Fri, 12 May 2023 00:00:00 GMT +======= Thu, 11 May 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-update-april-2023 Supabase Beta April 2023 https://supabase.com/blog/supabase-beta-update-april-2023 A review of Launch Week 7 and more exciting updates from last month. +<<<<<<< HEAD + Tue, 09 May 2023 00:00:00 GMT +======= Mon, 08 May 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/flutter-multi-factor-authentication Securing your Flutter apps with Multi-Factor Authentication https://supabase.com/blog/flutter-multi-factor-authentication Build a Flutter app where the user is required to authenticate using Multi-Factor Authentication. +<<<<<<< HEAD + Thu, 04 May 2023 00:00:00 GMT +======= Wed, 03 May 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgres-pluggable-strorage Next steps for Postgres pluggable storage https://supabase.com/blog/postgres-pluggable-strorage Exploring history of Postgres pluggable storage and the possibility of landing it in the Postgres core. +<<<<<<< HEAD + Mon, 01 May 2023 00:00:00 GMT +======= Sun, 30 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/launch-week-7-hackathon-winners Launch Week 7 Hackathon Winners https://supabase.com/blog/launch-week-7-hackathon-winners Announcing the winners of the Launch Week 7 Hackathon! +<<<<<<< HEAD + Mon, 24 Apr 2023 00:00:00 GMT +======= Sun, 23 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/whats-new-in-pg-graphql-v1-2 What's New in pg_graphql v1.2 https://supabase.com/blog/whats-new-in-pg-graphql-v1-2 New Features in the v1.2 release of pg_graphql +<<<<<<< HEAD + Fri, 21 Apr 2023 00:00:00 GMT +======= Thu, 20 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-studio-2.0 Supabase Studio 2.0: help when you need it most https://supabase.com/blog/supabase-studio-2.0 Supabase Studio now comes with ChatGPT, and GraphiQL built in, Cascade Deletes, and Foreign Key Selectors, and much more. +<<<<<<< HEAD + Fri, 14 Apr 2023 00:00:00 GMT +======= Thu, 13 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/dbdev dbdev: PostgreSQL Package Manager https://supabase.com/blog/dbdev We're publicly previewing dbdev, a PostgreSQL package manager. +<<<<<<< HEAD + Fri, 14 Apr 2023 00:00:00 GMT +======= Thu, 13 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/pg-tle Trusted Language Extensions for Postgres https://supabase.com/blog/pg-tle We're collaborating with AWS to bring Trusted Language Extensions to Postgres. +<<<<<<< HEAD + Fri, 14 Apr 2023 00:00:00 GMT +======= Thu, 13 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/launch-week-7-community-highlights Launch Week 7 Community Highlights https://supabase.com/blog/launch-week-7-community-highlights We're honored to work with, sponsor, and support incredible people and tools. Here is a highlight of the last 3 months. +<<<<<<< HEAD + Fri, 14 Apr 2023 00:00:00 GMT +======= Thu, 13 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-auth-sso-pkce Supabase Auth: SSO, Mobile, and Server-side support https://supabase.com/blog/supabase-auth-sso-pkce Supacharging Supabase Auth with Sign in with Apple on iOS, Single-Sign-On support with SAML 2.0, and PKCE for server-side rendering and mobile auth. +<<<<<<< HEAD + Thu, 13 Apr 2023 00:00:00 GMT +======= Wed, 12 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/storage-v3-resumable-uploads Supabase Storage v3: Resumable Uploads with support for 50GB files https://supabase.com/blog/storage-v3-resumable-uploads Storage V3 with lots of new features including resumable uploads, more image transformationsm a Next.js image loader and more. +<<<<<<< HEAD + Wed, 12 Apr 2023 00:00:00 GMT +======= Tue, 11 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/edge-runtime-self-hosted-deno-functions Supabase Edge Runtime: Self-hosted Deno Functions https://supabase.com/blog/edge-runtime-self-hosted-deno-functions We are open-sourcing Supabase Edge Runtime allowing you to host your Edge Functions anywhere. +<<<<<<< HEAD + Tue, 11 Apr 2023 00:00:00 GMT +======= Mon, 10 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-logs-self-hosted Supabase Logs: open source logging server https://supabase.com/blog/supabase-logs-self-hosted We're releasing Supabase Logs for both self-hosted users and CLI development. +<<<<<<< HEAD + Mon, 10 Apr 2023 00:00:00 GMT +======= Sun, 09 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-update-march-2023 Supabase Beta March 2023 https://supabase.com/blog/supabase-beta-update-march-2023 We are in full shipping mode 🛥️… Launch Week 7 can’t come quickly enough! +<<<<<<< HEAD + Sat, 08 Apr 2023 00:00:00 GMT +======= Fri, 07 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/launch-week-7-hackathon The Supabase AI Hackathon https://supabase.com/blog/launch-week-7-hackathon Build an Open Source Project over 10 days. 5 prize categories. +<<<<<<< HEAD + Fri, 07 Apr 2023 00:00:00 GMT +======= Thu, 06 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/designing-with-ai-midjourney Designing with AI: Generating unique artwork for every user https://supabase.com/blog/designing-with-ai-midjourney Using MidJourney to generative artwork and serving ticket images with Edge Functions +<<<<<<< HEAD + Fri, 07 Apr 2023 00:00:00 GMT +======= Thu, 06 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/infinite-scroll-with-nextjs-framer-motion Infinite scroll with Next.js, Framer Motion, and Supabase https://supabase.com/blog/infinite-scroll-with-nextjs-framer-motion Lazy load and paginate data on scroll with Next.js and a sprinkle of Framer Motion magic ✨ +<<<<<<< HEAD + Tue, 04 Apr 2023 00:00:00 GMT +======= Mon, 03 Apr 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supaclub SupaClub https://supabase.com/blog/supaclub The Worlds First Software Engineering Nightclub. +<<<<<<< HEAD + Sat, 01 Apr 2023 00:00:00 GMT +======= Fri, 31 Mar 2023 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-update-february-2023 Supabase Beta February 2023 https://supabase.com/blog/supabase-beta-update-february-2023 There is something for everybody this month - AI, Auth, Database, Edge Functions, GraphQL … you name it! +<<<<<<< HEAD + Thu, 09 Mar 2023 00:00:00 GMT +======= Wed, 08 Mar 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/geo-queries-with-postgis-in-ionic-angular Geo Queries with PostGIS in Ionic Angular https://supabase.com/blog/geo-queries-with-postgis-in-ionic-angular Using the PostGIS extension to build a cross-platform application with Ionic Angular. +<<<<<<< HEAD + Wed, 01 Mar 2023 00:00:00 GMT +======= Tue, 28 Feb 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/type-constraints-in-65-lines-of-sql Type Constraints in 65 lines of SQL https://supabase.com/blog/type-constraints-in-65-lines-of-sql Creating validated data types in Postgres +<<<<<<< HEAD + Fri, 17 Feb 2023 00:00:00 GMT +======= Thu, 16 Feb 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/case-study-happyteams HappyTeams unlocks better performance and reduces cost with Supabase https://supabase.com/blog/case-study-happyteams How a bootstrapped startup migrated from Heroku to Supabase in 30 minutes and never looked back +<<<<<<< HEAD + Thu, 16 Feb 2023 00:00:00 GMT +======= Wed, 15 Feb 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/flutter-real-time-multiplayer-game How to build a real-time multiplayer game with Flutter Flame https://supabase.com/blog/flutter-real-time-multiplayer-game Build a real-time multiplayer game using Flutter, Flame, and Supabase realtime. +<<<<<<< HEAD + Tue, 14 Feb 2023 00:00:00 GMT +======= Mon, 13 Feb 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-january-2023 Supabase Beta January 2023 https://supabase.com/blog/supabase-beta-january-2023 New Postgres extensions, pg_graphql updates, changes to Edge Functions, and more! +<<<<<<< HEAD + Wed, 08 Feb 2023 00:00:00 GMT +======= Tue, 07 Feb 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/chatgpt-supabase-docs Supabase Clippy: ChatGPT for Supabase Docs https://supabase.com/blog/chatgpt-supabase-docs Creating a ChatGPT interface for the Supabase documentation. +<<<<<<< HEAD + Tue, 07 Feb 2023 00:00:00 GMT +======= Mon, 06 Feb 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/openai-embeddings-postgres-vector Storing OpenAI embeddings in Postgres with pgvector https://supabase.com/blog/openai-embeddings-postgres-vector An example of how to build an AI-powered search engine using OpenAI's embeddings and PostgreSQL. +<<<<<<< HEAD + Mon, 06 Feb 2023 00:00:00 GMT +======= Sun, 05 Feb 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-december-2022 Supabase Beta December 2022 https://supabase.com/blog/supabase-beta-december-2022 This month the Beta Update is a Launch Week 6 Special, where we review the cascade of announcements. +<<<<<<< HEAD + Thu, 05 Jan 2023 00:00:00 GMT +======= Wed, 04 Jan 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/launch-week-6-hackathon-winners Launch Week 6 Hackathon Winners https://supabase.com/blog/launch-week-6-hackathon-winners Announcing the winners of the Launch Week 6 Hackathon! +<<<<<<< HEAD + Tue, 03 Jan 2023 00:00:00 GMT +======= Mon, 02 Jan 2023 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/vault-now-in-beta Supabase Vault is now in Beta https://supabase.com/blog/vault-now-in-beta A Postgres extension to store encrypted secrets and encrypt data. +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgrest-11-prerelease PostgREST 11 pre-release https://supabase.com/blog/postgrest-11-prerelease Describes new features of PostgREST 11 pre-release +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgres-point-in-time-recovery Point in Time Recovery is now available for Pro projects https://supabase.com/blog/postgres-point-in-time-recovery We're making PITR available for more projects, with a new Dashboard UI that makes it simple to use. +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/pg-graphql-v1 pg_graphql v1.0 https://supabase.com/blog/pg-graphql-v1 Announcing the v1.0 release of pg_graphql +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/new-in-postgres-15 What's new in Postgres 15? https://supabase.com/blog/new-in-postgres-15 Describes the release of Postgres 15, new features and reasons to use it +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/launch-week-6-wrap-up Launch Week 6: Wrap Up https://supabase.com/blog/launch-week-6-wrap-up That's a wrap on Supabase Launch Week Day 6. Here's everything we shipped in one long blog post. +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/launch-week-6-community-day Community Day https://supabase.com/blog/launch-week-6-community-day Wrapping up Launch Week 6 with contributors, partners, and friends. +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/custom-domain-names Custom Domain Names https://supabase.com/blog/custom-domain-names Change your Supabase project's domain name to your own domain. +<<<<<<< HEAD + Fri, 16 Dec 2022 00:00:00 GMT +======= Thu, 15 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgres-foreign-data-wrappers-rust Supabase Wrappers, a Postgres FDW framework written in Rust https://supabase.com/blog/postgres-foreign-data-wrappers-rust A framework for building Postgres Foreign Data Wrappers which connects to Stripe, Firebase, Clickhouse, and more. +<<<<<<< HEAD + Thu, 15 Dec 2022 00:00:00 GMT +======= Wed, 14 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/mfa-auth-via-rls Multi-factor Authentication via Row Level Security Enforcement https://supabase.com/blog/mfa-auth-via-rls MFA Auth with enforcement via RLS +<<<<<<< HEAD + Wed, 14 Dec 2022 00:00:00 GMT +======= Tue, 13 Dec 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/storage-image-resizing-smart-cdn Supabase Storage v2: Image resizing and Smart CDN https://supabase.com/blog/storage-image-resizing-smart-cdn We're introducing new features for Supabase Storage: Image resizing and a Smart CDN. +<<<<<<< HEAD + Tue, 13 Dec 2022 00:00:00 GMT +======= Mon, 12 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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 redesigned our Docs and migrated to Next.js +<<<<<<< HEAD + Mon, 12 Dec 2022 00:00:00 GMT +======= Sun, 11 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Sat, 10 Dec 2022 00:00:00 GMT +======= Fri, 09 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Fri, 09 Dec 2022 00:00:00 GMT +======= Thu, 08 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Fri, 09 Dec 2022 00:00:00 GMT +======= Thu, 08 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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! +<<<<<<< HEAD + Wed, 07 Dec 2022 00:00:00 GMT +======= Tue, 06 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 06 Dec 2022 00:00:00 GMT +======= Mon, 05 Dec 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 01 Dec 2022 00:00:00 GMT +======= Wed, 30 Nov 2022 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Thu, 24 Nov 2022 00:00:00 GMT +======= Wed, 23 Nov 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/flutter-authorization-with-rls Flutter Authorization with RLS https://supabase.com/blog/flutter-authorization-with-rls Learn how you can secure your Flutter app using Supabase Row Level Security. +<<<<<<< HEAD + Tue, 22 Nov 2022 00:00:00 GMT +======= Mon, 21 Nov 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 17 Nov 2022 00:00:00 GMT +======= Wed, 16 Nov 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 08 Nov 2022 00:00:00 GMT +======= Mon, 07 Nov 2022 22:00:00 GMT +>>>>>>> origin/master 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! +<<<<<<< HEAD + Wed, 02 Nov 2022 00:00:00 GMT +======= Tue, 01 Nov 2022 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Thu, 27 Oct 2022 00:00:00 GMT +======= Wed, 26 Oct 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 21 Oct 2022 00:00:00 GMT +======= Thu, 20 Oct 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 20 Oct 2022 00:00:00 GMT +======= Wed, 19 Oct 2022 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Fri, 14 Oct 2022 00:00:00 GMT +======= Thu, 13 Oct 2022 21:00:00 GMT +>>>>>>> origin/master 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?! +<<<<<<< HEAD + Wed, 05 Oct 2022 00:00:00 GMT +======= Tue, 04 Oct 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 03 Oct 2022 00:00:00 GMT +======= Sun, 02 Oct 2022 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Thu, 08 Sep 2022 00:00:00 GMT +======= Wed, 07 Sep 2022 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Wed, 07 Sep 2022 00:00:00 GMT +======= Tue, 06 Sep 2022 21:00:00 GMT +>>>>>>> origin/master 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! +<<<<<<< HEAD + Thu, 25 Aug 2022 00:00:00 GMT +======= Wed, 24 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 24 Aug 2022 00:00:00 GMT +======= Tue, 23 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 19 Aug 2022 00:00:00 GMT +======= Thu, 18 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 19 Aug 2022 00:00:00 GMT +======= Thu, 18 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 19 Aug 2022 00:00:00 GMT +======= Thu, 18 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 19 Aug 2022 00:00:00 GMT +======= Thu, 18 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 19 Aug 2022 00:00:00 GMT +======= Thu, 18 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 18 Aug 2022 00:00:00 GMT +======= Wed, 17 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 17 Aug 2022 00:00:00 GMT +======= Tue, 16 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 16 Aug 2022 00:00:00 GMT +======= Mon, 15 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 15 Aug 2022 00:00:00 GMT +======= Sun, 14 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 12 Aug 2022 00:00:00 GMT +======= Thu, 11 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Wed, 10 Aug 2022 00:00:00 GMT +======= Tue, 09 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Tue, 09 Aug 2022 00:00:00 GMT +======= Mon, 08 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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... +<<<<<<< HEAD + Wed, 03 Aug 2022 00:00:00 GMT +======= Tue, 02 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 02 Aug 2022 00:00:00 GMT +======= Mon, 01 Aug 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 18 Jul 2022 00:00:00 GMT +======= Sun, 17 Jul 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 13 Jul 2022 00:00:00 GMT +======= Tue, 12 Jul 2022 21:00:00 GMT +>>>>>>> origin/master 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... +<<<<<<< HEAD + Wed, 06 Jul 2022 00:00:00 GMT +======= Tue, 05 Jul 2022 21:00:00 GMT +>>>>>>> origin/master 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). +<<<<<<< HEAD + Thu, 30 Jun 2022 00:00:00 GMT +======= Wed, 29 Jun 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 29 Jun 2022 00:00:00 GMT +======= Tue, 28 Jun 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 28 Jun 2022 00:00:00 GMT +======= Mon, 27 Jun 2022 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Fri, 17 Jun 2022 00:00:00 GMT +======= Thu, 16 Jun 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 01 Jun 2022 00:00:00 GMT +======= Tue, 31 May 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 26 May 2022 00:00:00 GMT +======= Wed, 25 May 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 20 Apr 2022 00:00:00 GMT +======= Tue, 19 Apr 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 18 Apr 2022 00:00:00 GMT +======= Sun, 17 Apr 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 15 Apr 2022 00:00:00 GMT +======= Thu, 14 Apr 2022 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabrew Supabrew - Never Code Thirsty https://supabase.com/blog/supabrew A light and refreshing non-alcoholic beer for devs. +<<<<<<< HEAD + Fri, 01 Apr 2022 00:00:00 GMT +======= Thu, 31 Mar 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 01 Apr 2022 00:00:00 GMT +======= Thu, 31 Mar 2022 21:00:00 GMT +>>>>>>> origin/master 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! +<<<<<<< HEAD + Fri, 01 Apr 2022 00:00:00 GMT +======= Thu, 31 Mar 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 31 Mar 2022 00:00:00 GMT +======= Wed, 30 Mar 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 30 Mar 2022 00:00:00 GMT +======= Tue, 29 Mar 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 29 Mar 2022 00:00:00 GMT +======= Mon, 28 Mar 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 28 Mar 2022 00:00:00 GMT +======= Sun, 27 Mar 2022 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 25 Mar 2022 00:00:00 GMT +======= Thu, 24 Mar 2022 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Fri, 25 Mar 2022 00:00:00 GMT +======= Thu, 24 Mar 2022 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgres-audit Postgres Auditing in 150 lines of SQL https://supabase.com/blog/postgres-audit PostgreSQL has a robust set of features which we can leverage to create a generic auditing solution in 150 lines of SQL. +<<<<<<< HEAD + Tue, 08 Mar 2022 00:00:00 GMT +======= Mon, 07 Mar 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 22 Feb 2022 00:00:00 GMT +======= Mon, 21 Feb 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 20 Jan 2022 00:00:00 GMT +======= Wed, 19 Jan 2022 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Thu, 20 Jan 2022 00:00:00 GMT +======= Wed, 19 Jan 2022 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 17 Dec 2021 00:00:00 GMT +======= Thu, 16 Dec 2021 22:00:00 GMT +>>>>>>> origin/master 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 ... +<<<<<<< HEAD + Wed, 15 Dec 2021 00:00:00 GMT +======= Tue, 14 Dec 2021 22:00:00 GMT +>>>>>>> origin/master 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! +<<<<<<< HEAD + Fri, 03 Dec 2021 00:00:00 GMT +======= Thu, 02 Dec 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 03 Dec 2021 00:00:00 GMT +======= Thu, 02 Dec 2021 22:00:00 GMT +>>>>>>> origin/master 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! +<<<<<<< HEAD + Fri, 03 Dec 2021 00:00:00 GMT +======= Thu, 02 Dec 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 02 Dec 2021 00:00:00 GMT +======= Wed, 01 Dec 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 01 Dec 2021 00:00:00 GMT +======= Tue, 30 Nov 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 30 Nov 2021 00:00:00 GMT +======= Mon, 29 Nov 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 29 Nov 2021 00:00:00 GMT +======= Sun, 28 Nov 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Sun, 28 Nov 2021 00:00:00 GMT +======= Sat, 27 Nov 2021 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgrest-9 PostgREST 9 https://supabase.com/blog/postgrest-9 New features and updates in PostgREST version 9. +<<<<<<< HEAD + Sat, 27 Nov 2021 00:00:00 GMT +======= Fri, 26 Nov 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 26 Nov 2021 00:00:00 GMT +======= Thu, 25 Nov 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 26 Nov 2021 00:00:00 GMT +======= Thu, 25 Nov 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Sun, 07 Nov 2021 00:00:00 GMT +======= Sat, 06 Nov 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 28 Oct 2021 00:00:00 GMT +======= Wed, 27 Oct 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 19 Oct 2021 00:00:00 GMT +======= Mon, 18 Oct 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 14 Oct 2021 00:00:00 GMT +======= Wed, 13 Oct 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 04 Oct 2021 00:00:00 GMT +======= Sun, 03 Oct 2021 21:00:00 GMT +>>>>>>> origin/master 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! +<<<<<<< HEAD + Tue, 28 Sep 2021 00:00:00 GMT +======= Mon, 27 Sep 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 10 Sep 2021 00:00:00 GMT +======= Thu, 09 Sep 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 12 Aug 2021 00:00:00 GMT +======= Wed, 11 Aug 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 09 Aug 2021 00:00:00 GMT +======= Sun, 08 Aug 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 30 Jul 2021 00:00:00 GMT +======= Thu, 29 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 30 Jul 2021 00:00:00 GMT +======= Thu, 29 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 30 Jul 2021 00:00:00 GMT +======= Thu, 29 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 29 Jul 2021 00:00:00 GMT +======= Wed, 28 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 28 Jul 2021 00:00:00 GMT +======= Tue, 27 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 28 Jul 2021 00:00:00 GMT +======= Tue, 27 Jul 2021 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/storage-beta Supabase Storage now in Beta https://supabase.com/blog/storage-beta Supabase Storage moves into Beta. +<<<<<<< HEAD + Tue, 27 Jul 2021 00:00:00 GMT +======= Mon, 26 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 27 Jul 2021 00:00:00 GMT +======= Mon, 26 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 26 Jul 2021 00:00:00 GMT +======= Sun, 25 Jul 2021 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-community-day Supabase Community Day https://supabase.com/blog/supabase-community-day Community Day +<<<<<<< HEAD + Mon, 26 Jul 2021 00:00:00 GMT +======= Sun, 25 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 26 Jul 2021 00:00:00 GMT +======= Sun, 25 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Thu, 22 Jul 2021 00:00:00 GMT +======= Wed, 21 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 02 Jul 2021 00:00:00 GMT +======= Thu, 01 Jul 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 02 Jun 2021 00:00:00 GMT +======= Tue, 01 Jun 2021 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-may-2021 Supabase Beta May 2021 https://supabase.com/blog/supabase-beta-may-2021 Apple &amp; Twitter Logins, Supabase Grid, Go &amp; Swift Libraries. +<<<<<<< HEAD + Wed, 02 Jun 2021 00:00:00 GMT +======= Tue, 01 Jun 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 05 May 2021 00:00:00 GMT +======= Tue, 04 May 2021 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Tue, 06 Apr 2021 00:00:00 GMT +======= Mon, 05 Apr 2021 21:00:00 GMT +>>>>>>> origin/master 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? +<<<<<<< HEAD + Fri, 02 Apr 2021 00:00:00 GMT +======= Thu, 01 Apr 2021 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-pgbouncer PgBouncer is now available in Supabase https://supabase.com/blog/supabase-pgbouncer Better support for Serverless and Postgres. +<<<<<<< HEAD + Fri, 02 Apr 2021 00:00:00 GMT +======= Thu, 01 Apr 2021 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-dot-com Supabase Dot Com https://supabase.com/blog/supabase-dot-com The Supabase Domain name is changing. +<<<<<<< HEAD + Fri, 02 Apr 2021 00:00:00 GMT +======= Thu, 01 Apr 2021 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Thu, 01 Apr 2021 00:00:00 GMT +======= Wed, 31 Mar 2021 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-cli Supabase CLI https://supabase.com/blog/supabase-cli Local development, database migrations, and self-hosting. +<<<<<<< HEAD + Wed, 31 Mar 2021 00:00:00 GMT +======= Tue, 30 Mar 2021 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Tue, 30 Mar 2021 00:00:00 GMT +======= Mon, 29 Mar 2021 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/pricing Supabase Beta Pricing https://supabase.com/blog/pricing Supabase launches Beta pricing structure +<<<<<<< HEAD + Mon, 29 Mar 2021 00:00:00 GMT +======= Sun, 28 Mar 2021 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/launch-week Launch week https://supabase.com/blog/launch-week Five days of Supabase. +<<<<<<< HEAD + Thu, 25 Mar 2021 00:00:00 GMT +======= Wed, 24 Mar 2021 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/angels-of-supabase Angels of Supabase https://supabase.com/blog/angels-of-supabase Meet the investors of Supabase. +<<<<<<< HEAD + Thu, 25 Mar 2021 00:00:00 GMT +======= Wed, 24 Mar 2021 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Mon, 22 Mar 2021 00:00:00 GMT +======= Sun, 21 Mar 2021 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Thu, 11 Mar 2021 00:00:00 GMT +======= Wed, 10 Mar 2021 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Mon, 08 Mar 2021 00:00:00 GMT +======= Sun, 07 Mar 2021 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 05 Mar 2021 00:00:00 GMT +======= Thu, 04 Mar 2021 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-february-2021 Supabase Beta February 2021 https://supabase.com/blog/supabase-beta-february-2021 One year of building. +<<<<<<< HEAD + Tue, 02 Mar 2021 00:00:00 GMT +======= Mon, 01 Mar 2021 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/cracking-postgres-interview Cracking PostgreSQL Interview Questions https://supabase.com/blog/cracking-postgres-interview Understand the top PostgreSQL Interview Questions +<<<<<<< HEAD + Sat, 27 Feb 2021 00:00:00 GMT +======= Fri, 26 Feb 2021 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Tue, 09 Feb 2021 00:00:00 GMT +======= Mon, 08 Feb 2021 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-january-2021 Supabase Beta January 2021 https://supabase.com/blog/supabase-beta-january-2021 Eleven months of building. +<<<<<<< HEAD + Tue, 02 Feb 2021 00:00:00 GMT +======= Mon, 01 Feb 2021 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-beta-december-2020 Supabase Beta December 2020 https://supabase.com/blog/supabase-beta-december-2020 Ten months of building. +<<<<<<< HEAD + Sat, 02 Jan 2021 00:00:00 GMT +======= Fri, 01 Jan 2021 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Sun, 13 Dec 2020 00:00:00 GMT +======= Sat, 12 Dec 2020 22:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Wed, 02 Dec 2020 00:00:00 GMT +======= Tue, 01 Dec 2020 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 02 Dec 2020 00:00:00 GMT +======= Tue, 01 Dec 2020 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 02 Dec 2020 00:00:00 GMT +======= Tue, 01 Dec 2020 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Wed, 02 Dec 2020 00:00:00 GMT +======= Tue, 01 Dec 2020 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-alpha-november-2020 Supabase Alpha November 2020 https://supabase.com/blog/supabase-alpha-november-2020 Nine months of building. +<<<<<<< HEAD + Tue, 01 Dec 2020 00:00:00 GMT +======= Mon, 30 Nov 2020 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/postgresql-views Postgres Views https://supabase.com/blog/postgresql-views Creating and using a view in PostgreSQL. +<<<<<<< HEAD + Wed, 18 Nov 2020 00:00:00 GMT +======= Tue, 17 Nov 2020 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-alpha-october-2020 Supabase Alpha October 2020 https://supabase.com/blog/supabase-alpha-october-2020 Eight months of building. +<<<<<<< HEAD + Mon, 02 Nov 2020 00:00:00 GMT +======= Sun, 01 Nov 2020 22:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 30 Oct 2020 00:00:00 GMT +======= Thu, 29 Oct 2020 22:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-alpha-september-2020 Supabase Alpha September 2020 https://supabase.com/blog/supabase-alpha-september-2020 Seven months of building. +<<<<<<< HEAD + Sat, 03 Oct 2020 00:00:00 GMT +======= Fri, 02 Oct 2020 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Fri, 11 Sep 2020 00:00:00 GMT +======= Thu, 10 Sep 2020 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-alpha-august-2020 Supabase Alpha August 2020 https://supabase.com/blog/supabase-alpha-august-2020 Six months of building +<<<<<<< HEAD + Thu, 03 Sep 2020 00:00:00 GMT +======= Wed, 02 Sep 2020 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-auth Supabase Auth https://supabase.com/blog/supabase-auth Authenticate and authorize your users with Supabase Auth +<<<<<<< HEAD + Wed, 05 Aug 2020 00:00:00 GMT +======= Tue, 04 Aug 2020 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-alpha-july-2020 Supabase Alpha July 2020 https://supabase.com/blog/supabase-alpha-july-2020 Five months of building +<<<<<<< HEAD + Sun, 02 Aug 2020 00:00:00 GMT +======= Sat, 01 Aug 2020 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Sun, 02 Aug 2020 00:00:00 GMT +======= Sat, 01 Aug 2020 21:00:00 GMT +>>>>>>> origin/master 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 +<<<<<<< HEAD + Fri, 10 Jul 2020 00:00:00 GMT +======= Thu, 09 Jul 2020 21:00:00 GMT +>>>>>>> origin/master 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? +<<<<<<< HEAD + Thu, 09 Jul 2020 00:00:00 GMT +======= Wed, 08 Jul 2020 21:00:00 GMT +>>>>>>> origin/master 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? +<<<<<<< HEAD + Tue, 07 Jul 2020 00:00:00 GMT +======= Mon, 06 Jul 2020 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-alpha-june-2020 Supabase Alpha June 2020 https://supabase.com/blog/supabase-alpha-june-2020 Four months of building +<<<<<<< HEAD + Wed, 01 Jul 2020 00:00:00 GMT +======= Tue, 30 Jun 2020 21:00:00 GMT +>>>>>>> origin/master 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. +<<<<<<< HEAD + Mon, 15 Jun 2020 00:00:00 GMT +======= Sun, 14 Jun 2020 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-alpha-may-2020 Supabase Alpha May 2020 https://supabase.com/blog/supabase-alpha-may-2020 Three months of building +<<<<<<< HEAD + Mon, 01 Jun 2020 00:00:00 GMT +======= Sun, 31 May 2020 21:00:00 GMT +>>>>>>> origin/master https://supabase.com/blog/supabase-alpha-april-2020 Supabase Alpha April 2020 https://supabase.com/blog/supabase-alpha-april-2020 Two months of building +<<<<<<< HEAD + Mon, 01 Jun 2020 00:00:00 GMT +======= Sun, 31 May 2020 21:00:00 GMT +>>>>>>> origin/master diff --git a/docker/.env.example b/docker/.env.example deleted file mode 100644 index 21304c2557b80..0000000000000 --- a/docker/.env.example +++ /dev/null @@ -1,105 +0,0 @@ -############ -# Secrets -# YOU MUST CHANGE THESE BEFORE GOING INTO PRODUCTION -############ - -POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password -JWT_SECRET=your-super-secret-jwt-token-with-at-least-32-characters-long -ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE -SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q - - -############ -# Database - You can change these to any PostgreSQL database that has logical replication enabled. -############ - -POSTGRES_HOST=db -POSTGRES_DB=postgres -POSTGRES_PORT=5432 -# default user is postgres - -############ -# API Proxy - Configuration for the Kong Reverse proxy. -############ - -KONG_HTTP_PORT=8000 -KONG_HTTPS_PORT=8443 - - -############ -# API - Configuration for PostgREST. -############ - -PGRST_DB_SCHEMAS=public,storage,graphql_public - - -############ -# Auth - Configuration for the GoTrue authentication server. -############ - -## General -SITE_URL=http://localhost:3000 -ADDITIONAL_REDIRECT_URLS= -JWT_EXPIRY=3600 -DISABLE_SIGNUP=false -API_EXTERNAL_URL=http://localhost:8000 - -## Mailer Config -MAILER_URLPATHS_CONFIRMATION="/auth/v1/verify" -MAILER_URLPATHS_INVITE="/auth/v1/verify" -MAILER_URLPATHS_RECOVERY="/auth/v1/verify" -MAILER_URLPATHS_EMAIL_CHANGE="/auth/v1/verify" - -## Email auth -ENABLE_EMAIL_SIGNUP=true -ENABLE_EMAIL_AUTOCONFIRM=false -SMTP_ADMIN_EMAIL=admin@example.com -SMTP_HOST=supabase-mail -SMTP_PORT=2500 -SMTP_USER=fake_mail_user -SMTP_PASS=fake_mail_password -SMTP_SENDER_NAME=fake_sender - -## Phone auth -ENABLE_PHONE_SIGNUP=true -ENABLE_PHONE_AUTOCONFIRM=true - - -############ -# Studio - Configuration for the Dashboard -############ - -STUDIO_DEFAULT_ORGANIZATION=Default Organization -STUDIO_DEFAULT_PROJECT=Default Project - -STUDIO_PORT=3000 -# replace if you intend to use Studio outside of localhost -SUPABASE_PUBLIC_URL=http://localhost:8000 - -# Enable webp support -IMGPROXY_ENABLE_WEBP_DETECTION=true - -############ -# Functions - Configuration for Functions -############ -# NOTE: VERIFY_JWT applies to all functions. Per-function VERIFY_JWT is not supported yet. -FUNCTIONS_VERIFY_JWT=false - -############ -# Logs - Configuration for Logflare -# Please refer to https://supabase.com/docs/reference/self-hosting-analytics/introduction -############ - -LOGFLARE_LOGGER_BACKEND_API_KEY=your-super-secret-and-long-logflare-key - -# Change vector.toml sinks to reflect this change -LOGFLARE_HTTP_PORT=4001 -LOGFLARE_API_KEY=your-super-secret-and-long-logflare-key - -# Change vector.toml sources.docker_syslog to reflect this change -VECTOR_PORT=9000 -VECTOR_API_PORT=9001 - -# Google Cloud Project details -GOOGLE_PROJECT_ID=GOOGLE_PROJECT_ID -GOOGLE_PROJECT_NUMBER=GOOGLE_PROJECT_NUMBER diff --git a/examples/ai/face_similarity.ipynb b/examples/ai/face_similarity.ipynb deleted file mode 100644 index c3c87b749f28e..0000000000000 --- a/examples/ai/face_similarity.ipynb +++ /dev/null @@ -1,484 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "7114e091", - "metadata": {}, - "source": [ - "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/supabase/supabase/blob/master/examples/ai/face_similarity.ipynb)" - ] - }, - { - "cell_type": "markdown", - "id": "2a1f181d-feeb-4b29-aabc-67a75234b92c", - "metadata": {}, - "source": [ - "# Face Similarity Search\n", - "\n", - "In this example we'll use PostgreSQL + pgvectors similarity search using the `vecs` library to identify the celebrities a person looks most similar to.\n", - "\n", - "We'll start by loading a dataset of celebrity faces. Then we'll create embeddings for the faces using python's `face_recognition` library and store them in PostgreSQL with `vecs`. Finally we'll query the database with a user defined face to see which celebrities they look most like." - ] - }, - { - "cell_type": "markdown", - "id": "3cab93f5-10d0-47c5-9f4e-64921461e7e2", - "metadata": {}, - "source": [ - "## Install Dependencies" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "a41bc3e4-ea52-43aa-9239-a431b49f029e", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install -qU vecs datasets face_recognition flupy tqdm numpy matplotlib" - ] - }, - { - "cell_type": "markdown", - "id": "4dbd176f-3b4e-4d41-a72d-1e1affe6ecae", - "metadata": {}, - "source": [ - "## Load the Dataset\n", - "\n", - "First, we load a dataset of celebrity faces." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dc6b0bc2-b95f-4190-bf77-fa2dc57fc247", - "metadata": {}, - "outputs": [], - "source": [ - "from datasets import load_dataset\n", - "\n", - "people = load_dataset(\"ashraq/tmdb-people-image\", split='train')\n", - "people" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "da15eff4-932c-4e0c-b938-ba188af62b63", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'adult': False,\n", - " 'also_known_as': \"['Morgan Porterfield Freeman Jr.', 'Morgan J. Freeman', 'مورغان فريمان', '모건 프리먼', 'モーガン・フリーマン', 'Морган Фриман', 'Морган Фримен', 'มอร์แกน ฟรีแมน', '摩根·弗里曼', 'Μόργκαν Φρίμαν', 'مورگان فریمن', 'Морґан Фрімен', 'Μόργκαν Πόρτερφιλντ Φρίμαν Τζούνιορ']\",\n", - " 'biography': \"Morgan Freeman (born June 1, 1937) is an American actor, director, and narrator. Noted for his distinctive deep voice, Freeman is known for his various roles in a wide variety of film genres. Throughout his career spanning over five decades, he has received multiple accolades, including an Academy Award, a Screen Actors Guild Award, and a Golden Globe Award.\\n\\nBorn in Memphis, Tennessee, Freeman was raised in Mississippi where he began acting in school plays. He studied theatre arts in Los Angeles and appeared in stage productions in his early career. He rose to fame in the 1970s for his role in the children's television series The Electric Company. Freeman then appeared in the Shakespearean plays Coriolanus and Julius Caesar, the former of which earned him an Obie Award. His breakout role was in Street Smart (1987), playing a hustler, which earned him an Academy Award nomination for Best Supporting Actor. He achieved further stardom in Glory, the biographical drama Lean on Me, and comedy-drama Driving Miss Daisy (all 1989), the latter of which garnered him his first Academy Award nomination for Best Actor.\\n\\nIn 1992, Freeman starred alongside Clint Eastwood in the western revenge film Unforgiven; this would be the first of several collaborations with Eastwood. In 1994, he starred in the prison drama The Shawshank Redemption for which he received another Academy Award nomination. Freeman also starred in David Fincher's crime thriller Se7en (1995), and Steven Spielberg's historical drama Amistad (1997). Freeman won the Academy Award for Best Supporting Actor for his performance in Clint Eastwood's 2004 sports drama Million Dollar Baby. In 2009, he received his fifth Oscar nomination for playing former South African President Nelson Mandela in Eastwood's Invictus. Freeman is also known for his performance as Lucius Fox in Christopher Nolan's The Dark Knight Trilogy (2005–2012).\\n\\nIn addition to acting, Freeman has directed the drama Bopha! (1993). He also founded film production company Revelations Entertainment with business partner Lori McCreary. He is the recipient of the Kennedy Center Honor, the AFI Life Achievement Award, the Cecil B. DeMille Award, and the Screen Actors Guild Life Achievement Award. For his performances in theatrical productions, he has won three Obie Awards, one of the most prestigious honors for recognizing excellence in theatre.\\n\\nDescription above from the Wikipedia article Morgan Freeman, licensed under CC-BY-SA, full list of contributors on Wikipedia.\",\n", - " 'birthday': '1937-06-01',\n", - " 'deathday': None,\n", - " 'gender': 2,\n", - " 'homepage': None,\n", - " 'id': 192,\n", - " 'imdb_id': 'nm0000151',\n", - " 'known_for_department': 'Acting',\n", - " 'name': 'Morgan Freeman',\n", - " 'place_of_birth': 'Memphis, Tennessee, USA',\n", - " 'popularity': 95.033,\n", - " 'profile_path': '905k0RFzH0Kd6gx8oSxRdnr6FL.jpg',\n", - " 'image': }" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Look at an example record from the dataset\n", - "person = people[15]\n", - "person" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "006d5900-547b-4ff3-ad81-3a2419d19a46", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "person['image'].resize((210, 315))" - ] - }, - { - "cell_type": "markdown", - "id": "955b2700-8242-40eb-ac3f-d479a0312693", - "metadata": {}, - "source": [ - "## Embedding Model\n", - "\n", - "Next, we can use `face_recognition` to produce a face embedding for each row (person) in the dataset." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "2929f431-278e-4482-931b-5cd39eadb1fb", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-0.13341002, 0.13275896, 0.16850984, 0.06553721, 0.01849797,\n", - " -0.10046144, 0.08926678, -0.10535249, 0.09548245, 0.01443161,\n", - " 0.29246074, -0.05078556, -0.09225237, -0.20251125, 0.06319536,\n", - " 0.13064152, -0.13121371, -0.14068669, -0.14239085, -0.07584596,\n", - " -0.00425112, 0.05749821, 0.03404564, 0.00690284, -0.05748112,\n", - " -0.30998233, -0.05940549, -0.12016021, 0.13422301, -0.09362517,\n", - " 0.00096729, 0.00121274, -0.28880239, -0.10776889, -0.02401398,\n", - " 0.02188838, 0.04223322, -0.05020416, 0.13429314, -0.06062891,\n", - " -0.15768167, 0.04524709, 0.09769595, 0.18990684, 0.16210739,\n", - " -0.04965826, -0.03221413, -0.03109819, 0.01347625, -0.18865313,\n", - " 0.04968366, 0.08835649, 0.12916593, 0.08170474, -0.01250134,\n", - " -0.10153808, -0.04734591, 0.05344258, -0.15603815, 0.05757158,\n", - " 0.03810269, -0.07773421, -0.11656785, 0.00838896, 0.11370895,\n", - " 0.10145531, -0.01232528, -0.19529839, 0.07950203, -0.16160172,\n", - " -0.0103126 , 0.10836543, -0.07068133, -0.08057274, -0.2873418 ,\n", - " 0.11391003, 0.38112539, 0.02767274, -0.24450374, 0.02405314,\n", - " -0.17997386, 0.0244493 , 0.01259282, 0.02163479, -0.0256572 ,\n", - " 0.00239573, -0.15525642, 0.02548696, 0.13868049, -0.01777178,\n", - " -0.00228858, 0.19361472, 0.00259691, -0.00303981, 0.00783446,\n", - " -0.01679439, -0.0077012 , -0.02348143, -0.09466386, -0.06156742,\n", - " 0.02911264, -0.00982514, -0.04479714, 0.08873156, -0.18456687,\n", - " 0.09431744, 0.06609484, -0.02497767, 0.09436633, 0.0584843 ,\n", - " 0.02720976, -0.12375437, 0.07636171, -0.17666884, 0.1997328 ,\n", - " 0.16992269, -0.05255131, 0.13182855, 0.00585927, 0.1533282 ,\n", - " -0.03610092, 0.01495183, -0.07237726, -0.01772323, 0.03974599,\n", - " -0.00466948, -0.03418808, 0.02540907])" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "import face_recognition\n", - "\n", - "# Display an example embedding\n", - "face_recognition.face_encodings(np.array(person['image']))[0]" - ] - }, - { - "cell_type": "markdown", - "id": "9e82862d-440a-4f66-9ed7-0eaa6a0f4062", - "metadata": {}, - "source": [ - "## Initialize the Vecs Collection\n", - "\n", - "The [`vecs`](https://supabase.github.io/vecs/api/) library wraps a pythonic interface around PostgreSQL and pgvector.\n", - "A collection in `vecs` maps 1:1 with a PostgreSQL table." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d2771545-d209-4ceb-a222-ed139a4620f2", - "metadata": {}, - "outputs": [], - "source": [ - "import vecs\n", - "DB_CONNECTION = \"postgresql://postgres:password@localhost:5611/vecs_db\"\n", - "\n", - "# create vector store client\n", - "vx = vecs.create_client(DB_CONNECTION)\n", - "\n", - "# create a PostgreSQL/pgvector table named \"faces\" to contain the face embeddings\n", - "faces = vx.create_collection(name=\"faces\", dimension=128)" - ] - }, - { - "cell_type": "markdown", - "id": "9ae030b4-cfd2-43bc-802f-e7ac4007d2ad", - "metadata": {}, - "source": [ - "## Create Embeddings for Each Face\n", - "\n", - "Now we can iterate over the dataset, producing embeddings for the faces.\n", - "\n", - "Note that it could take a few hours to produce all of the embeddings. If you're just testing it out, feel free to interrupt the loop after a few hundred iterations and continue with the next step." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bd134310-9da1-4448-8358-9fc491c98e1e", - "metadata": {}, - "outputs": [], - "source": [ - "from typing import List, Dict, Tuple\n", - "from PIL import Image\n", - "from flupy import flu\n", - "import numpy as np\n", - "from tqdm import tqdm\n", - "\n", - "# Records we'll insert into the database\n", - "records: List[Tuple[str, np.ndarray, Dict]] = []\n", - "\n", - "# Iterate over the dataset in chunks\n", - "for ix, person in tqdm(enumerate(people)):\n", - "\n", - " # Extract the person's image\n", - " person_image = person['image']\n", - "\n", - " # Some of the images are grayscale with a single image channel\n", - " # We'll normalize the image set by converting those to 3 channel RBG format\n", - " if person_image.mode == 'L':\n", - " # Extract the available channel\n", - " L_channel = np.array(person_image)\n", - "\n", - " # Repeat that channel 3 times for R G B\n", - " person_image = Image.fromarray(\n", - " np.moveaxis(np.stack([L_channel, L_channel, L_channel]), 0, -1)\n", - " )\n", - "\n", - " # Create embeddings for current chunk\n", - " embeddings = face_recognition.face_encodings(np.array(person_image))\n", - "\n", - " # In some cases the face is too obscured to be detectable and no embedding\n", - " # is produced. We'll skip those cases\n", - " if len(embeddings) == 1:\n", - " embedding = embeddings[0]\n", - " records.append((\n", - " f\"{ix}\",\n", - " embedding,\n", - " {k: v for k, v in person.items() if k != 'image'}\n", - " ))" - ] - }, - { - "cell_type": "markdown", - "id": "6ef285d7-dc7b-4576-ab2b-bf0a4ba06de4", - "metadata": {}, - "source": [ - "## Insert the Embeddings into Postgres" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "6156e7f9-b78a-4ab9-8002-b09ec8716be2", - "metadata": {}, - "outputs": [], - "source": [ - "faces.upsert(records)" - ] - }, - { - "cell_type": "markdown", - "id": "aa095a53-dd9c-4a3c-93bf-c54708c67765", - "metadata": {}, - "source": [ - "## Index the Collection\n", - "\n", - "Indexing the collection creates an index on the vector column in Postgres that significantly improves performance\n", - "of similarity queries." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "6b96d3af-5592-4fbc-81ab-f77b4228ccaa", - "metadata": {}, - "outputs": [], - "source": [ - "faces.create_index()" - ] - }, - { - "cell_type": "markdown", - "id": "371631e6-4995-484f-9d76-40ab5e7b2e16", - "metadata": {}, - "source": [ - "## Search for Similar Faces\n", - "\n", - "Finally we can load a user defined face and search the database for other similar faces to find their look alikes. For simplicity, we'll grab a random face from the dataset as our query but it can be substituted for your own image." - ] - }, - { - "cell_type": "markdown", - "id": "d4a0a7c1-8269-4b24-985a-57f7dbbbf969", - "metadata": {}, - "source": [ - "### Example Results\n", - "\n", - "We'll create helper functions to display search results and try it out on several celebrities. \n", - "Since our query faces are also in the dataset, the query face is the first in the result output." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "8673ff6e-31e5-4344-990d-bf3c84be5824", - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.core.display import HTML\n", - "from PIL import Image, ImageDraw, ImageFont\n", - "import matplotlib.font_manager as fm\n", - "from typing import Dict, Any\n", - "\n", - "def add_label(img, label_text, label_height=30):\n", - " # Set the font and size\n", - " font_path = fm.findfont(fm.FontProperties(family='Arial'))\n", - " font = ImageFont.truetype(font_path, 15)\n", - " \n", - " # Create a new image with a white background\n", - " label_img = Image.new('RGB', (img.width, label_height), color = (255, 255, 255))\n", - " d = ImageDraw.Draw(label_img)\n", - "\n", - " # Calculate the width and height of the text to center it\n", - " text_bbox = d.textbbox((0, 0), label_text, font)\n", - " text_width, text_height = text_bbox[2] - text_bbox[0], text_bbox[3] - text_bbox[1]\n", - " text_x = (label_img.width - text_width) // 2\n", - " text_y = (label_img.height - text_height) // 2\n", - "\n", - " # Add the text to the label image\n", - " d.text((text_x, text_y), label_text, fill=(0,0,0), font=font)\n", - "\n", - " # Concatenate the original image with the label image\n", - " img_with_label = Image.new('RGB', (img.width, img.height + label_height))\n", - " img_with_label.paste(img, (0, 0))\n", - " img_with_label.paste(label_img, (0, img.height))\n", - "\n", - " return img_with_label\n", - "\n", - "def resize_for_output(person_image):\n", - " return person_image.resize((150, 220))\n", - " \n", - "def render_similar_faces(person_image: Image) -> Image:\n", - " # create query face embedding\n", - " face_embedding = face_recognition.face_encodings(np.array(person_image))[0]\n", - " \n", - " # query database for similar results\n", - " result = faces.query(face_embedding, limit=5, include_metadata=True) \n", - "\n", - " captioned_images = [\n", - " add_label(\n", - " resize_for_output(person_image),\n", - " \"Query Image\"\n", - " ),\n", - " Image.fromarray(255*np.ones((250,30,3), np.uint8))\n", - " ]\n", - "\n", - " for person_id, person_metadata in result:\n", - " result_person = people[int(person_id)]\n", - " result_image = result_person['image']\n", - " captioned_images.append(add_label(resize_for_output(result_person['image']), person_metadata[\"name\"]))\n", - "\n", - " return Image.fromarray(np.hstack(captioned_images))" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "2e5f05e8-5fc3-42e8-9a3b-4b3c7ce0dc4a", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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xsTExMTExMTE7IfEam5MTExMTExMTMx+SKzmxsTExMTExMTE7IfEam5MTExMTExMTMx+SKzmxsTExMTExMTE7IeMkJrruu63v/3tQw89NJ1Ot7S0nH322UuXLh2ZS1f58pe/fMQRR4zwRWP2Ii0tLfPnz39vr4WIf/rTn0amDe83Pv/5z+PumDx58rs8c7FYRMSHH374/dk8GCD39vb2+++//92fMCYmJiZmBBgJNTefzx9//PELFiz4r//6r+7u7uXLlx955JGzZ8/+zW9+MwJXj4nZixDRpz71qfe6Fe8Nd911FxERUUdHBwAsWLDAvHz99dff66YB7OPmVeU+b968J5988t2f8D0kCIKbb775iCOOMEaHT37yky+88MJev8p7sh4466yzZs2aNfDI+PHjEXHLli3VI9dcc81BBx00wg0bMYYQrpRymKv0PX5soHD3ysp/J7OClPK8885zHOeBBx54l2f+YDGSppzhsE9tByPGSKi5X/nKV8rl8hNPPHHKKackEokxY8bMnz//Rz/60eWXX7527doRaEBMTEzMXkFr/V434V3huu7JJ598zz33/OAHP9ixY8eyZcvGjh170kknPfHEE3v3Qu/JemDOnDnLli2TUpqXf//73zdt2lRfX//YY49VP/P000/PnTt3hBs2Muwt4e5xMT9QuHt95R8EwT//8z//4Q9/WLBgwcc+9rG9eOaYt8v73LQxTPa5mpvP5++8885/+Zd/SafTA49ffPHFTU1Nv/zlL2GXLUvz0kxM+Xz+0ksvbWxszOVyp5122sqVKwHA8zxE/NrXvtbc3Dxu3LjLL7986tSp1TOvX78eEc0nd4tZ1N55551HHnlkIpGYPn36888//61vfaulpaWuru7LX/5y9Un21FNPnX766WPGjLFte8KECd/97nfN8a1bt5511lk1NTUTJ068+eab29ra7r333sFaG7NPGaLz9PX1XXzxxY2NjZlM5uSTT37uuecA4O32lp0wposhLvqhZbeDZfhjzTCYdMx5fv7znx999NGO40yaNOmuu+56W83r7Oy85JJLxowZk0wmZ8+evWzZsrfVPCP3uXPnLlmy5JZbbpkwYcJgP/l9zje+8Y2NGzcuWrRo9uzZ6XR63LhxP/3pT08++eSrrrqKiPbihd6T9cCcOXPK5fKqVavMy4ULFx5yyCGzZ89euHChOVIqlVauXHnaaaeNfNtGgP1AuJ7nnX322Q899ND//d//ffSjH91HV4n5cEH7mEWLFgHAqlWrdn3rvPPO+8hHPkJEhUIBAP7yl7+Y4+blwoULiehjH/vY3LlzX3vttd7e3u985zvZbHbjxo2u6wLA1KlTd+zYsWrVqmeffRYAnn/+efP1b33rW9OnT9/1cpdeeunhhx9ORGEYAkBbW9vy5ct7e3tPOeWUZDJ54YUXdnd3L1q0yHGc++67j4i6u7szmcz3vve9QqHQ399/4403AsDq1aullDNmzDj99NM7Ojpef/31Y489FgDuueeewVq7L+7qh5Pm5uYbbrhhp4NDdJ5TTjnlmGOOWbNmTWdn57e//e2ampq+vr5h9pbdXouIAGDBggVDXPTDwE4rexp8sAxzrFXv52DSMecZPXr0kiVLenp6rr32Wtu2t2/fPszmSSmPOOKIE0888dVXX+3s7LzmmmvS6fSrr746zOZRRe5EdMIJJ1x77bVD/OS9f7v3Hr7v19XVffOb39zp+IYNGzZs2GD+37Fjx8UXXzx69OhEIjFr1iwjC3Ojfvaznx111FG2bU+cOPHOO+80n//tb387bdq0ZDI5ZcqUq6++2nVdIjr11FPN86WtrY2IFi9efNppp40ePdqyrLa2tu985ztDn7O3t/dLX/pSQ0NDOp0+6aSTli5dao739/dfcsklDQ0NtbW1c+fOffHFF3f9jc3NzT/+8Y/N/x//+MevvvrqW2+9tbW11RxZuHAh57yvr2//G8J7FK654fPnzz/ppJPS6XT1hpvn6fXXX9/U1DR27Nj+/v5qbx+OcM2Hh5DmMKV2ww03lEqlU089NZlMPvroowPf3W2f3C8Z7Lmz2xE0WB/eVaC7FcEQItuVXSdVGnKuuOOOO2bMmOE4zrRp05577rl///d/b25uzuVyl156qVJqr92v4bHP1dzf/e53AFCdQwdy9dVXjx8/ngaX1vLlywFgoKZ49NFH/+u//quR4ve///3q8QMPPPDKK680/0+bNu173/verpfbSc29+eabzfGf/OQniNjf329ezpgxY9eZgoj6+voA4JFHHnn00UcZY5s2bTLHX3nlFaPmDtba4d2nmD3zttTcF198EQB2O6UOp7fEau4Q7HbKG0h1sAxzrA28n7uVjjmPmdyJqLe3FwAeeuihYTbvwQcfBIB169aZl1rrqVOnXnnllcOfCnZVcwf7yUPct/ecNWvWAMADDzww2AeGXg/susxYt24d5/zBBx/0PG/NmjXjx4+/6aabzKn2uB4YYumy2wUqDc+O8NnPfvbcc88lojAMs9nsgw8+uGHDBgB46aWXiOjGG2+cOXMmDbk8/oCyR+GaG97a2rpkyZJisTh//nwhxObNm3cyG1Gltw9HuPRWNXe30hyO1Jqbm6+66qoTTzwRAP7t3/5t4FuD9cm9eOveP+z2uTPYCBpazR0o0N2K4D23HYwY+9xpoaGhAQDMM2An+vr6MpnMEN996aWXoBJDYHjhhRfMYAYAs29omDdv3r333huG4erVq9esWXPeeeftsWHVrycSibq6upqaGvPStm3f983/vu/fc88911133ac+9alDDz0UALTWK1asaGlpGTNmjPnM1KlTza8YurUxI8zLL78shDjssMN2fesd9JaYPbLbwWLeGs5YqzKEdCZNmmT+MSMuCIJhtu3ll19uaGiYOHGieYmIxxxzjBmwb7d5w/zJ70/M8qC2tnawDzzyyCMrV678n//5nylTpjQ0NNxyyy1tbW0/+clPzLtXXXXV8ccfX1dXN3/+/CAIli9f3t7errVOp9OO4xx88MHt7e3XXXfdTuccNWpUoVD46le/mslkampqrrnmGgDYunXrYOdcuXLlk08+eeuttx588MENDQ1f//rX+/v7a2trV6xY8cADD/zmN7+ZPHlyLpf72te+dtBBB/3iF7/Y6XKnnnrqM888AwBLly4NgmDWrFltbW1TpkwxPkVPP/30/uqxsEfhGq699trjjz8+nU5fd911Usqqv9ZFF13U2Ng4cMIcjnB3YldpDlNqAPDTn/509erVJ5xwwg9/+MNNmzZVjw/dJz8MDD2CBqMq0KFFsKvIhtmqoeVy5ZVXHnnkkblc7pxzzvE874c//OGoUaNmzZo1derU6sQ7YuxzNfeoo45KJBJLlizZ6TgRPfPMM0ceeSQAIOLAt6oBBFJK27bDMByomP/xj3807zqOU/3KvHnzuru7H3744XvuuWfOnDlVHXQIhBDV/3dqgKGvr2/GjBk33ngjIp5zzjl//vOfq1/c7cNs6NbG7CMG6zyWZQ32lXfQW4Z50Q8tgw0Wwx7H2kCGkM5OMqVhuxsmEomdjmitbdt+B82rMvRPfn9ijA49PT2DfWDo9cCuy4yTTjrpM5/5zKxZsyZPnnzFFVcMFuo0xHpg13MOtkAdph1hzpw57e3tW7duXbhw4UknnZRKpQDgjDPOePzxx6WUS5cu3V/jz/YoXEN1UWeWc8byB281GxmGKdyB7CrN4Vt/WlpaFi9e/Kc//cmyrC984QvVHjJ0n/yQ8A5W1FWBDi2C95vtYF+wz9XcmpqaCy644D//8z+LxSIAeJ73kY985Fe/+tVdd931+uuvX3TRRVB5epVKJfMVs8cEANOmTQuC4Omnn97jVSZMmHDiiSf+/ve/v/vuu+fNm7dXWn7//fe/+uqrzz333E033fT5z3/emOKJ6LDDDtu+ffvmzZvNx9auXWt+2vBbG7MXGazzHHLIIVJK41KyE+++twx20Q8tgw2Wd3CqfTGWp02b1tXV9cYbb5iXRLRs2bKBsW7Dp6oH78WfPGJMmjSpqalp1/RhCxcuPPfcc3t7e4deD+y6zBBC/Pa3v33ppZcuvfTSv/3tb3PmzPnmN7+50xmGXg/ses7BFqjDtCNMnDhxwoQJzz777MKFC8844wxz8PTTT1+8eLGxVB133HGwP65U9yhc85JzPvDdao8daDYyDEe4O7GrNIdv/bnwwgsPP/zwhoaGX/7yl4sWLbr55pvN8aH75IeBwUbQ0H24KtChRfC+sh3sI0YiodhNN91k7NVPPvmkUurCCy+84oorzj///PPPP3/27NkAYNv2UUcdddttt3V3d69fv/6aa64xQ/HYY4899dRTL7vsshUrVuTz+QcffDCXy/3617/e7VW+8IUv3H333T09PWefffZeafaoUaO01k888YTv+88///wFF1wAAOVyee7cuUccccSXvvSlzZs3t7e3X3LJJQCAiG+rtTF7i8E6z2GHHXbmmWdefvnl69atc1337rvvtm173bp15lvvsrcMdtEPLYMNlnd2tr0+lufMmXPcccedf/75a9eu7e7u/spXvtLe3n7ZZZe9g1NlMpktW7Z0d3fv3Z88MjDGLrjggl/96lfGjc9ARLfccssrr7xSV1f3ztYD06dPv+666xYtWnTttdfefvvt5uA7Xg8MtkAdvh1h9uzZixYtWrZsWVXNnT17tuu6//3f/33yySebJ/H+t1Ldo3Df2WmHFu4eeQfWn0984hMXXHDBN77xDaOy78U16geUwUbQMPvwPjLAfYDkMhJqbjabXbx48TnnnHPllVc2NjZef/31U6ZMmT179h//+MdqFMhtt92Wz+dHjx49d+7ciy66yOy/AMDvfve744477vTTT29qavrqV7/63e9+94tf/OJur/KZz3zGsqyzzjpraH/f4fOP//iP8+fPv+yyyxoaGq6++uobbrhhxowZzz33nEktxBg78MAD58yZY3wHzdQ5/NbGvDP+4z/+Y2CSalPWbrDOc9dddx1wwAFHH310Y2Pjz372s7/85S/VDZrh9JbdXqvKYBf9cDLYYHlnZ9vrYxkRFyxY0NbWNnPmzLa2ttWrVz/11FPvrEbAFVdc8eijj06ePPnMM8/ciz95xJg/f35TU9Ps2bMXL17suq7ZUnvqqaduu+02ePvrgQULFtTW1i5evDgIgo0bNy5ZsmTmzJnmrXe8HhhsgTp8O8KcOXNuv/32xsZGs70LAOl0+oQTTrjrrruqHgv75Up1aOG+XYYj3D2e5J1Zf370ox+1traed955pVJpL65RP6AMNoKG2Yf3kQHugySXdxfB9q5YuXLlLbfcsrfO5vt+Lpf761//urdOOExMfZ39OMXJfsl71VtihkMsnX1KX1/f17/+9SlTpiSTydbW1k9/+tMD86Bt27btvPPOy+Vy6XR67ty5y5cvp0qQfjXOeuDLH/zgB1OmTHEcp76+/sILL+zp6TGfuf/+++vr63O5nJRy/vz5zc3NmUxm5syZd99994wZM6677rohztnV1TVv3jzThuOPP/6xxx4zn+nu7r7wwgvr6+sdx5k6derPf/7z3f5A41F2wQUXDDxoshoPTG25YsWK4447zqRSuuOOO5qbmz/QmRYMQwh3pxtORABw3333Gffc+++/f+Dx4QsXBmRa2K00hyO1XTMMPP7444j4xS9+kQbpk/slzc3NO2loJj3UbkcQDdKHdxXobkUwhMh2ZbfZdYYzV9x222319fXVr8ycOfP666/fOzdr2CC9v53JhoOUMgiCH//4x/fee+8IVGRYt27d5MmTf/3rX3/uc5/r7e299tprV61atXr16v3AGPBhYIR7S8zbIpZOTExMTMxeROz5I+97tm7desghh4wZM+b3v//9CFxu0qRJt99++y233HLllVcmEom5c+c+8sgjsY77QWGEe0vM2yKWTkxMTEzMXmR/sObGxMTExMTExMTE7MRIhKDFxMTExMTExMTEjDCxmhsTExMTExMTE7MfEqu5MTExMTExMTEx+yGxmhsTExMTExMTE7Mf8v8BO2W47sobD5QAAAAASUVORK5CYII=", - "text/plain": [ - "" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "render_similar_faces(\n", - " person_image=people[1014]['image']\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "1aa257bf-d1c9-4364-a6ef-46740916ace1", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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ejqOY845pzTDPPq+pxlwapiJh/2+67qmaay10zRN47js2u12G0Lo+36appITEex2h3Gcuq7r+wERm6ZJOZVSiKiIFBUBVYAiBYhSKUXF+WqYQorx8vLy+OTOarkaYnr69OkXv/jFd97/AA2N05hCSSkhQBEpMc80unVd39zc4Cv2lznINONnjDPGcqW2qRwQxpyjAhuBVwrLoqoimtXOlHKsSWZKflZVImYytWNnyBo0KCSFpDy4d2+zG55c/IAMW82O0PnWegXDrqory46p9sbNn6lZUyRAti4WvBnGH/z4g8NwuHdn7aDEmCPwFKE1vsyEwymhivfe+gpUS8pIOvNqIeCd86Mvvnn/u9/57rfMr927e9b3oSSpvfv1r325H6fNbre7udEimku/PzBh13bMxpDRhhvJXQyuW7z75GLT98en54xExKVIISayhp2vKkX8i+bY/JymL5o4gNAtVncePPizH/0x9QpYGWy6qm6aRYhhe+ibpsllEhVEg4iEhC+2qSnHady3TTMchvfee/Sjdx8fBOq6TW41TCGrHq2OHcKwH3JOTy5vnqucrpujVWtRESTFBACLbtG42lpbNa1xjQBoyXEap6EfhqHvB8AESG3XeudiDCGm/TA9uzzs+nT3/v2vfPnN06N2GA/vPHq6n8r+MIUpj1OomoqN6U4fXD5/dnUYasvABiWj3PaXEJHnINKZxQHm/QMxO++994JMbJpFlUMoMU7jwFq8saZkmSnWkZLeTgnLrNb+sztiviX+pDT3U1C9CqoQY8g5P3369M033xzH0RgzTePJyUmYxpKz9z6lFEMUERE9HA4KWnnvvYtFFHAcxpKzY1u4gDAAEZIgZhDHplst665Zn54cHR9ZJiaiFIeLJ9Y5maBpawuqKRrDlsgaNsao1dp5AHCVt84pkKSkpYyH4fz1h23bSJEpBkWo63oKE7Nx1htrbF2BlBxj23ai80MOJE85FsMmjAOjSipFZVa9zzlvd7uYshKUIjGmkrVCdpZVBIkNEmACUtFCxNM0Lc/XSoaZQwzW2rquFUBFfFVNcXLObbe7EELXLVUUAEopiDATEMJnD+f+ey/o/io2/ubGBhKqpqFfs5o0eFctmlbT1C28A7fbJ7F+RKGihxhihDiZDKpa+nE0DJVhckDDhGMaplSKlJKs5WE45KwxScozkSMRmVKkpMKEhGiIQLRrqrqyXetrlppVQDtLXVs7xn6/dQ5hTE3FjcFFdbQfoqANottDD6qlZBAmtjEXETCESUtOOoPFRcQYAwi5yLyLAFBAJUJUIATDGHMmVELx3uYshg2KspbWQNe2x54kpmjBGZjGoCWTyu1T/pdmM+vUbbnq1RxsLvB/xFGIxhgkUtVhGPb7/fHx8Re+8IXLq4u27fbb7TSNi24BYFfLk7vn59vN1fXF8/02IJAq5CRIiChIFGM0Bud00rmamPtD7yw7b6yxfd8TmThl611KqXY2l3KzuVk0CyKqq+pw6OfZPl/XuZQphIoqBanrOqU0b9h8VVVVRUTGmHnXYYxp6ianME79nEcBoLU2jsOsJU5EUjIQ5lSKlFzKrZwdaA4BiXxVDcNwIc+cr4nMyfFpP03OO2cqY81e+5QKEOUwFS1VVc1sG9ba/DlG0H7p9pI1xVW2aauiqTJWAJO1BSTmoiKlFEUmxCJANG95iBCTFEGVoqrqrCmqpWQpQJYqZ46Xi2Vboaphn4puDwNb9+WvfSWFqd9uJISqsio5x8nyDKBPiCwqgGzrRRT6wTvv/vj9x0Xl/HRdGw5jClHrBgAhTNEZw4QEhcl455zzUkpISXJEACQLIqjpS1948Oz57rvf/f4Y0hcfvqYKoR8lxLpdpKZ0TVtyybmkFBxhSjlnAWvEGfDNbrp6cnnZT+lkve68qZ1jRFWdYkJrRUHkJ4HU/9KN5llBUTWueu31N9+uXBwGpEEdo7H77U1BsNZM06FrTVV7xAIASFhkZg0CTUEQN8PwZz/60TuPL7PtthkohhAyG7M+On5yCIebS6dwvGpOzk5iv7/ahn6Ix8vaoGgpFbiVr3zrK++rpiHjiiABAmiYJimqCiUlMhxjAKSYy2bfP7veAtff+NbXjterlNJ3fvjeu08uH13vT+69Adxc9M8vn14ahsVy4a2xyALV9mbbVbV3jFIYqaACETBlhVIKKiITE80uKjmXUlxd1U1dVT6AbvsDk5KKYyVRnOFnbBiM9X7GZ83osp/PPiXN/WQzGgBmoh1AICIkFBFm3m63OefNZvPFL35hu90eHR89f/ZsFj0fhmEcx/1+N44DMxOUfn+ALNub6/1me7ueAUFVQRRZEXOSRKKAT5499/Wi7RbLs6PFeo0phu2VBvTOMpJqBkTrHAKgYbbOWkuITFRXdVFA5gAjIJ3fWZ2e3RFQKWVmX8spCQKiITYFUMkgIFk03gLg7fMMFgpQ+eawvZZpkhBDnoxIypmZz++cD9MYUlKFImNI02EMGFMpyoZLScawI5wARYr3PsaQIQGjIO73+3v37jVNM8tRKviUsrXWOVfX9dCPRMRMIi+bX7eTMZ/qo38vme6vYuOvV2x8Iu/5EKbw4iX81Hd+eMqnbGlQAQmwthZzicMYgZ23OWTL1hq4uNj04yEjEkguEnKKACLCoEQwMiEak8UaLiGWXAC1AETBMYQQS1AoiGQ9k8k55xIJUUUQsjXEUKiAUW+Rjtcr53xVVSXGMPaGOMTJMsQYShLn/NGiSYpJ0Fmz2e1yKTHmXIoCg+K8eVDVWfjKGKOqUgRECTCLlJIRXgJ3k4JhIOs8GwpFkIAZoURn1FhaV9yxFoIwXy1FUFEpBKAvKHFeuuZTffSyUf6hs14WaF9xgc6/N+DtZNstzgFfXZsvTVQh53lwu6qqEMKTJ0+QcNE2/X5XSg5xRITj41Nm/+DBw0fvv5vCIcURiiISE5WcnLUxRlUiMiklADaGlRAU+kPfds2sGgqMFmC/3/uqqut6mkIWIYCQkvHW2mYGHcYQ66b1zjEzMYmUtm2996WUlPNuc6N6S4Mw80IcDkMpiYhFdBynmYSorqoichgHALTGpJSFFBG998wUY8gpq+IMQVTVzWbz8M0vlyLvv/9+17UFYRxHNiwC4zgZa8MYZqq+zWbzUt/hU1fEx2xGLHwqPPfV93xsib08gh/67YWeB2BTO2ybaegNURQFxGnKhGqNebnFFVCcKa2RkFjm2TREIpwH0EKKjMoEgIq6H4ahsrb18Wi1enjvTSDeTeH47M5rb3zx5uLp5voyjIMqkmBddaIKzKnAFOWDJ9ff+/6PL69vlqvV8cmaIJJSH3LIkqUQO8tsiKwhZ41lBMWUM4MSYZYiQIgYw6QkBHT3ZPln7z57/70P9tvdg7vn56fHluzYH+I4dF13tFoXgH6cunYZQzxMYxTZDf07j55f3hyO18f3vE1xYgJLKDD3tSjmrGyYSGY9lk+7+L8U+6yb5CdN8UX1ERHIdOuTdnm8f/7cEhcU0BSjbMawWK1PTk68jqEUwwAI1tgUkrWulCLjGIf040dP3ru6Fr94tp3e+savfetb3/r+9394dHLyrW9+67vf/87u6urb/+pfFk24rD1B2zY5TTfbvTNYeWcVpKBzdd1WbIx1XtFIzsYwE6JqiSmXvGhbJC6AhyFsD6Nx7Rtvvl5R2lw8+vGz7f0v/9qXf/Orp4fp/N5rv/9vfu/Og/tX15eHoT/vVsfr1ZP338sxFXQ3/XTuO0IEJMMwN9Bi0VKEcG7eMBQtpQgKIVXO8hzBqoapWXR5yKAKWoiwiKI1Xbc+Obtze2/7Bdz4uUAL88Z6fqymlBAVEZfL5ePHj7/8lS/v9/tnz56JyEwM9Pz5cxWZxiAiy+Wyaernz59dPH2MM+mPKgDknKUUUpmR0QKz8LtWlW+b5q3XHt67//D4+LiuK1cfVidHZX8zpjHncQzBIDrrIyCBWuu5qhShKDhfofUMbKrKNQtJhdgqmbmTVdWemKZxSFLqumPjFMBYW1Iomo21iJhTilNgZ6ytihTbNAqSVZBqZE45zTsexwmkGOvmWQdAGkIouYQxBUloHSOrqDEmhABIU5IsxVYVIr773nt1Xbdtu1wuL6+viGjObGKMRCwlD/3AbI11iJ8i4vyx2+VfhZrur2Ljb1psKCohVnXFlEtJEWQ3DCbZUPIQckwwFT0kOIyHlBOhEeQp51IKzrk5ooJhY2iKla+MMUjYh2kMKaSSVUOBIAJQWMOc9s3ABjKsylKS7+rj1fr0+NjXzjiXc0k5h5RQRZWmKYUQC5BiUUNkjITkrK1c3fc9k2bRmFQIm3m2GYSZZ41lVVXRIgUApGRQRdD5byYU0SIFpWCBxnmseBr3tVUL2Rq0WGo2yXBd1c5KyZleTMLoR6quv5jdQqxf3vXnNOklNhfhBfvYbSSoEnMIYeaCJaKnT58ul8thvwdNq3WLiGzAWmeNvbq6JuLKVzlNM5rdGOOsmYf3Q4giyXnPRsdx8taCivO3822gyGRzznNXpO7atmtTlrbrjOG+H1arJQCmmBa6nOu1OWcmsraaZa5TSlJKXdezx733zDz0Y9O0KbMtZpqC91VKAZmMMbv9DgCss3GIDMDOVb7KpRjDaFDHKEVVCxGFMAEcwhTQOABYrRbPrq5LKYREpABIiNba+T8yh4ExJuc8D3p+Xs8gzuf+YjgiVBXLyJW7RmWEUtI4jf0QmGDRdfObPsTzzmQaMue4xAii8y2T1HKIEuMEB32u6hgbz6fLru/HfpjO7t41gh/82Z/9KKXTO/fa47umlO3N9c129/7lzTSGlMrNfndxfR1jYcLjo6O2sh7FIhoGpBTjOPXEXTc3Q0rOWnIsWclVxigCGYSkiCQi0zgoYlZdL/2ytZc3l3fv3d304/bwwenJ0fr0yCzXwlyQEMH7akoyFLnYHy4vr588fqxFX7t31tYeQBDrYZpQCZjGOAGC5DI7C0B/wXzol2a3O1sFQDJcdYvF0RkMybWLaO1Ysqgsl4vlanm07vbPD4gC8OFOyVpTQiglX+76Hz26OAiFNPzW7/zuf/6P/6feuZRzUzcXz59+70+/+/qDB9a3d+/f/fKbD568++PN8w+8dWxq6+35g3MCsWRQZtKHeZhSQHNOscRYYkhhVIAikGP2pk6KitTU7dXTCx0OgvDb/8l/9bv/5f/8nfc++Ld/8Id//qf/7r3vf+/+/buo4qxbLZd3z++M2+2TJ08zW0cQY24ql4RiKTnnW3IbQEaeAY0zgktEhnEQAF95Y9has16t0tjHIikXLkUEkooBvHv//unJqeonB0R+NvsUFbRPVICUGFOOhDRLKwlI1zTb7fbhG2+cnZzv94f79++FEKq6ubq6ZmNiCKJlnMYiqevaxXKx21aOuKQ09n2RUsrMvmRUBVUJAVSbpl2u1gJc1YuvfPWbQ5oY5Stfeuvbf/B77z96dP34fadl0TSOMWTRkipnoWgYJwTw1rBXTclaJuearhv7cRymYQzO2v1u9/7mg698/etkatfC8uROEmXDhmHY7CwAWZM1MbJDapYraxyU1JcsOaYw+a6JITlXEVEIY+UtM4QQu7pGUQVNquRNYoohM1PJYsiUGPubG2hCvT7yxlnviMhYG0LcbB6Lqqu8aso5DMNAxDmXaZrqti1Fi4gx7sMl82HK8pkEUn8R9qvY+OseG69UNl4gOT/0IALMwxof4js/2SVAmMemXzmiAgTOmjylQ0oxSx/3N5tDiNH6ulkuXd1Vq7PAPo3DZr8rEq2xBFR0/iMyjIZ13TZsWInJWiq5YIoKMesUcx8iAHhnCFCkgAoBcGWMwaqylvnq+vr5xeWuPxSVlLMlYgBDWDvDxqSiIrkCx6qI4HzVjwFUK+fGkKzBHHIuGEtBRdE014UAoRQRkblpeFuKIUJEBkSGAkrIJWdlnsLUdU1j2UFBZY2hz1tXvLO+qarTNTyTvRIqEMzozk88ej91Q/LRi48vPYi3issz8lBmr92+AjTvHuYuyMds/tB7d++O4wgAxpgYwuFwUC3L1iPSyWp9enSy3++bszrG8NqD195/L2x3NwrZAE7T2FSOCZ3zU5gImYChZFVCy4hS+9o5Z61r6o7ZImHTNL6qNOe669bHXdu01rm7hnOWGEJx6WU6OE0TSFm0LQCgcyNCChMZM03TjElQVWYUlSmMxlBMEQlDSAKSYgbFylUxpqoxaZ46BwTJBODZckUiGighQky6Pxx2+8369GS1Wj95/kxyTjGOYVJFZhAVa+y8pWzbNuc814zxI87QmQxVX9BbfCpj1ecBEX2irPtKOVdVAYxQKJmYRKSkklMpOd+qmACqqgDq3PICAgHFQkQISCoWaZ5cFIUpF5yH3xWD5v1hvLzZW4TKuXbxLhOgSEpJ//jbOYuI7kNKKYGoYetc1XTV3fMTa5xCGYeDgbCq/NnRMTFmzbuDiEJOOalYZ0tK0zixtd44V3eYQygCJCBiDDvnDv3I1lqmB/fOLjbbf/ftP3pw58Fr9x88v7x5vtsfnZw8uH8/W2+Y2Ug4jDdXN7ubGwY5WS1yigQZhZ2zZBgRFLAohpyTCJIBRSmJ5gGyD0fQPlpE/+k7f325Jl946qed8Rl2e18FBVBRYtcuj8+HZ89JR8+kyuqIGr/o2uHQ7zc7KDwr7hUpABpzQaUQ8rPN/rqPCfnsaP0b3/jG8frYV/Z41Xz/e9/77ne/P43jc9B2sXjra9/81te+tF4srt5rp37cbrb7flxHeu21B5gOIac6G8MIJRtryPkeceZLjgUKYD+Gqu3I+CHcPLu8OT01D8/vn73+haprv/Vbv+UMnZ6dGkPvvv8eG3N1dWWY7t85e/PuOeSpQsESAMS3TYHExqWYiwiytYSlaGFCZAGcb2HMRAAGAUAWi/b4eB364bDblZQIIKYCM+oIRQHuvvZGtVzNMLlfRCXic2Bz8YXvb79QRJqmEHK+vLxsfrN68OB+jAkRpymcnp2OYeoPe+8dG45xct6q1l//2tf2291+s91vNoDIhkkFCRksGU6SReH4+Hi5Pjo+Pf+N3/xtsnbVVFDin/zhH3z7j7/dOuuWR+lweH4YCaSrvUGckhxK6OqGQfZhKuyYilM8UoWUua5P18dxGnJOlvlouSRAX1WubcTYpluMfW9r47OCIHsLJVrDTETWSU65T0hsqxaRs6qzVUmZESrUYcxVVRfRFKMzJKKrthpiRiIPPgkQsaYMZCUEQZSm2WcZri/v3b8PiFVVpZQ/ePz49OzUOUcU5sb0NIa+H4yxxqAC5vzJksDHW2N/CZnuZ9mvYuOvRWy8Ctyc//3kvhg/4+vPdj0gKBNPoYxJ3338/HJzODo9uffam+fnd5rF6oOnz8aYgnq3aM4W6+lw6Pf7KSYkBcasOuU0ZrsEyJKN8THLMIaUNQuMMSdRMj6lMMWEiFoKo3ZNw4xkYHPo33/8nIw/Oj5t63VdV6uj1dQfJKVnzy+eXGymEJDQGlO5oanrtmuNMSULgSCBYYohEEARTSkzIWARQSIuqkXKLDEgIjqnqDCTfCiCFpC27foxxpyarp2GvQNxTZViqqw3nFNOTBaIFo3fTaN17jY1Qfm5b9AvB/1fZLS3GAh62eIGRCR8kdy8hLLgC9ADM29ubph5FvtlohBDXfvtbne3Oqt8vVqsY4wxJWtNienq+roUIUtkULOCqooCQlPV1toiBRSsYe9sXbu6rqx1TdMtl0dN247jiIjHR0fztg0AckoqWkDbtmMiV9cxRlWZfzfj7GHYlyJENAw9EZdSvPdzxomIUwgI4p0DgMpXwzAymzyPqCZBJQJi72LqVSHnREQihRS0iIgASF1XxhJyvrx6fv/111OK0xTiFI0xlGnOj4mMsXbmiplL+yklRDTGvOo4BIQX5Ee/VPuwNg+oRJxS2e13iFiySCkgCqKuspZNLKIzh+g82/UCpQ0ATMhAZu4c0JwHKwMwIAGgUhEiVFIVxKHvnTWWmRkNoals5StBc3J+9/T8TrtonTG7zdXm8vkwjEMKIWwqw42Fo65Wok1VWeYXnGYAqlJyzrluF9X6uDl9MF4/w5hQ53sFOed91qqqQIH34c7Z6WGMu83l9zbXpm68c88fPX37z3+IqM6a9WqNiEjqmKYUSgoggmhU0TlPCIXKGEIqc9IPUkRJRYTmMaePXNKf1T521s/5hH25cUEABSW27WLJBDJtAfKiPRVQYBNT2W0PTEaIAUqRMjPShpQcckwwDEERu7ZqPclhx2NgKCdtdbi+YC1d00pKv/aNr7x2vnry9vc++OH3NEzO2Pv3Tn1TDSGN47ReVGnciXpCYEBrDCJ670BFSklFC4BRENFh6GNMv/Zrv95WnopudzdTGt/+828/0Oy79d/5ja87Sj/44feH3X7Znt09PaGw211cQr85atwIKCWAs0URAK11OeQYJgAqQMCEhKRK9ILFD5UNr9Yr7+z2cjzsd5CilqKIgoQA83TE/YcPbdMqfvqW8vPbZ6a5HxYDkF71/Ux8ogopxvFwyCE8fvzIWHt8fGSMmabh/r1777wzTeOwXC7HkZl4sVigyrMnT8dhmKfteCYiVzVsrHd5HAwbU1dkzP3X7l1cPLPbzaJr/ujf/v7N5XNfNdvNRmNaro6YMIUJmXKJU8lHi7Vp29D3y64KUkTRCo0X17X3pyenrsJCVDV1yUlC2l4/d3XdHZ+KFsjJkk7DQJbJOAF1rm2aRnJOOVjGXOI4HLz1ULWOSaWUGItlTUYJc4p1Xc+6fIjIMQJiSdmJzbFoEVAoKshGcpaidddo4nEcjbUhDLM4AgB88MEHeJvcJOfcYrEQEe+rlMtnOQX+amAVfhUb/8HHxmdtohAJAIk4CH7w9PrxdX9+72697N5/fvn9d94TwVBwG9PdB19ojH/3hz86bqtV2ykN/WGvpM5VohJiBqSmbppuBWSWTXV1swPtRYhEp1JK5pwLgTACOwOMRfHJk2tG86W3vnT/tdeN9wJws9tf78YYAiMV9tQcWZezlsM4Pr/cE27Xq27ZtrWxTDOCAJ2xgJqzqgoiWmcBsEhJMc0kDFJUAbwxKpKLGmYFyDkxcS5FVYx1IiIKxJRLBoBDP56vm9YSAgpwQVl2Db5kb/ulrtfbxfeyXo8fZrSf6rJbMGtdz3nb1dWVMWa1WDbeVMa9dvfBF954s+uWTJSi++DpB/v9rvZmFuism0ZTZmZDXERF5UWYgYLOaKW6boio5FyKdF0nIofDYblcphi75SKXbAxDLpvrK1UtOc9CptZaAEg5iaiqOsNV06QpTNMUY+z73hhTSrHWlhRyzsMweF8h4lzJjCHOTNLeVVOOiOCcm9ECMSVRKaWkIkUgplCUm6Yl66+vr3NO4zi2bZM0T5tpxtGISN/3zFxKmS/XPCwLr/Q3BPgWbfmyVPjLLjK8pJATpAKISKoqKgqCqG1TESEU0RdNmVuc0m1UqEqpm5pUQQhm6RhSRnKMjo23rJK9Mc4a76xlatuaUC1T4yvDdrlcga+6o7P7D1+fwvT+j/6c8rjwFkH6m31n6P7RalV5BmFmBnCElqAUMc62beucMcaysc3JnTf/4//k6p0fvP/7/19MWOR2j4egzrkOoO2nthq7xbL2VS7l/N59YPP02cXm+qakMKZpf/1MCQHA+8pZ533VLOqmqb2xklMppfYWEGWKkKWUDEgipeTMOqtl/JL98gsZAiiwMdViwcbImBEHdIMkHBIuqmXVtArT0EvKmVVEMZaSRYH4EPMwxfWyOz87NSJvf++PNYY7D+8x5L/3O3/7ej9sNgdPsPC6e/97Mg2nnYHlcQzROwOQvNHKgqSoM67LiLEWyagIGzeDggCgiORSnBSU7A1KHFzn2bKp26Z2N8/ff/rska+6qq7fOPKLt+5Nh0Ua+v3mcRonI3rUOsDimccoh/0+TSORGWMqokyEiAKERMQ0I4LmYUUyJFKeP3v2TEoYhmkYNASjiZEQgJmZyPrqwYMH5mcRavks+7jY7yfB8rcw6le+vZ2AADg/Ov7Bd78bVN766lfHcWya5r333jk5Pb1/7345P3vy5EkIozEmxri9uXbehRhjDCJi2BCzZa6qKpeCxK6qrK/+zu/+TlO34ziSynd+8N23//y7tXfOcOvdYZjeffvd9XqJql1bW2NnAHwhPD4/Hzfbfr/v1kc5ZI2RhYZDv99t66aCyscUrMXxsB0PO9BS1c1+c+UqLyXvxpGsb5uWiPb7jbE2HfZXNxfDfqcA2nHdNSlHQgVG420CsVqVLIiAWIiFiZgJmBLiEAJqccRUREEQtMQ49AewrlktShEmGschxlRUWtMuFou+7+dB48OhDyEAMLMtJb8q5PuiMidzFeQv334VG39NY+Olsz4Lf4Kf/c7PhKwgEgARhlw2Uymu2wZ98s4Tb+itN17/6te++d6Tix88vvhf/2/+t3/6vT/7gz/+Y/R48+z5unJ13Q7DFEM0lkLKRLxerU5OzlzVaEmV/aDemj6mIeTdOEhKYxZR8M7M4wtX17tVs/zSw/uW6Orp4x8/enqx24QCQL7run2/3+32lomYqrpu27Y7WR763aPr7c1uOO66tq6sZVUoogqoOFcpGYBEdMaqzcVRS0gAKiKlqMwTd7f/X5XgfZ2Q+kNf2RlQQSJ6cXED0T04X9VV1dSNDqHONuZMhIqgrzS4P9Gw/sjl/SRo5OXSwhcvw0fz2pczSR/HKrywOafsum6326WUzs7OUkq73XYaDhWb58+fvXb/gXP+5uamxHB1dSFaQshIvuAtpUNMCVibuilSZtK9OTUMIRjD3kfnHDGnODGp91U/9GEajLX77QaRxqF33iNyyTnFOBMVDzGKiJbMRMw8TCGEYIyZ51NjjN77w6EvJcYwphxLzod+n5OMU8ypIGHKuYiISlEhor7vRWSappSzIsQQiygQpZiMM8yUS1ItxPTgwf0fv/12igkRiZiNSakIgIqklObc/aUKmr6cHQQR1RkXfYtdgA+9MA+iveriuaz+qd58ObL2MU/dprkApqqFDJAggIKIFmvZV05KmX+bW16bVyKBUJnQEEIpisJISJCzWlZvedFUtbesUjlnmLwzCOIYKutQtTa8Wq9905nFKijGmJ9+8P6421AOWuLx0XK7vWoWy5O27WqPROPQa0qWyDNXzq1Wq7apGNQwI5HxdXN6J0/DI1fLOIYwacklZ5ViDbOpzu+fq3Mhlr4fauZV7b7wja/7pru4uN5cXewunw+HjdIsngXGuPX6KOcipbRNlSIcDiGXgsAE0DYNhukwhln/ZIZaf/Jqv1hDn1hVnzHJ8OHxj377yTd8luHLbagKoBJb363Q+bSLnGNRMtVqvejaxaKUKnPoL0VUSVHmkntOu/6wT5G9eXB88vD1+6umkazPL95/78mPmqYipLpbntRkNeu095j9ehWS7A6jYgHAMIzL1XLZ1uNhY4iY2LjK1x07n1MgZGZjjWEiyVlEVcQRHC2aGMfrG22azhrKmp2vPCnHbZx2EyHEwNNAKujMIWEuElJYLtqlczeHMcWoRQqIIaysQaJcFAAF4cMZHkREdM5HydM4MNE4DNOhZy2KJSMaQMumcq5qmq7riFk/1LL/Oe3j1dzPKgm8aqwIqIZo2u//1R/+0b0vvtGuVt67/X5f1w0TtV13OOwWiwWolJIPh8O8xe8PhxCjzgSHqk3TVnWTpSyPjqac1+vjFPOofQnxx49/lMLgQKDf78feOcuQW0cyjYh6yKF2jizvNjfhsB+8g1Is4363Xa9WheD51fP+sG2qKo2uR2grG0PAIou2y9vNzdWFqlZNjUgKanxJ07DfbZqmsc6O2+1htwMybrGo2i7kwopsbT+NUnJIcRqmEjMigHVKmEEBTUxZmI33pkwA6NGOIspiCCUnRDgcDsfHJ0S0Xh9N03R1c3NxcdG2bdM03vtxGK21oqrAhAiAM9T14yvnU26Lf3n2q9j4VWwAgAoACINUVcW+sqRTlsNh+I9+57f/V//L//r+62/8P//bf/H7f/jt/8P//n+37fct42t37jz9YFwulxICSgHAylUMhQm7yt05OQLkw2HvWA2U1jGqEFQGcMPjNA4IQESb65tlUz28d3zY31xe31wdpjuvf/F/8V/8g3Z9+q//8Dvf+NZv/dN/9s9+8OT3//7/6G877/717/9eE2NTVd7Xnt1uexO2+yORZVuTyNzFZdYkEmJUVWssItLcKyNUKTLTj6XMTAQEWoiIGbJgLmXKUQGapkmHXS4lpwSg0xh2uy1haReL05PjPkxByy96e/40++gy/HDn+UnmjfmIiBDR1dXVnMMdDoeYonOmbpvNYWeePX30+EnK5erqcjzs33nnHYAEBksxwjgOo2VWLQI4hWkGRRChquSUsPZzzVVEc0oiaAzNrAuX40iE1jIAeV8dAGPOiCQqcwrrK1+KQMoFaYYozBTaMac5D768uEg5T9PElgAkpUTEYYqlABIpABmrqjGlIvlwOOSc50m7XEqZle5m6IJq3x8UEIy9vLy0VT1zNo3jOFeUSyyGTRHBF3AFa+0r8A8E0FKKIUHEmIsoEBsg+slKWz9Hd+VDx1pfAGdW/wZlmDnXUAqIwm2uPRfURURmrgUkZ4hAEW9JRpkMG20rVzmLULSg854IpeQwZctUlNg5Jia2yt51K78+atiO/X7cbaftJgyHqmtTDJRza2xljXezLms0xM65mf2NjSGcU2cwRHF/8+iP/4DThIhTSEN/yCUxGQAoJXvvO+axrrMTSGHo+5snHyy76uzBGw/unL1+787Fk0ebq6c5B1VIKR8OfZqGbrHc73Zh7NumjiONKc0TA6WkECYQBaWf4473l/MAVQAgXp096M7vbS/f42nKobgT76mA5HnslYgkKxkGRGNM3TSTHxW08u7o+PjuyZoJkbhaViEUZ2wKU84xxZjS2DXemHYqOoQSBepugSWcnp0sV0tCYAA27Lyvm85WjQAhCbGZI9wyA5SiknMyibw1TVVPRccQClQFZHu4cYbiNFSuLgg5Z4dQ+db4ZizlsN1Wbd0slgVwOwZrrVJhRMNmRjBG1FBEGZWMsbaUAkgioiKejYKGcYzjaAgtmpQSqDJbBJgrRD813/ic9ulp7k92/7zJZ8T9zc3jd99By9/4rd+OMTnnlsulc6Zrm5ubq5zzYrm4urzo+/6w2/a7XQhBVeuZHFg05xxiPD45aZddKtB1SxU5bLf9dvPs0QdN6xxDPvSVFqPApGAwpsk6y4yWVUpJKS+O6hhi01QgYrRM/TbnlHN2hqSYMESQJMFVxlLRi6dPT46XQ983TYWJQwy+afNwKCFoGGOeiqH9/hCLIpswxe3Ty6JaeQdY+mEXY0TkMEwSMxI4x8hmmsZUIKk5xJCVgS0jsijifAsiFRUVItv3/bzyvXNt0zx59iSEAAqL5QKJCDnnEmPkjvWWLOYTV/6vQJr7q9j4Gx4bt4C4khpvzk9Wl7txDMNxY758/+TewjY0fuNLd0/X7unT95hwwXr9wdudNV944zXO4kz1x9/5ThiH1958uGwbkIwgoLjf3vRDDyCMRFBYsjdoDSRUyUkdO+vXi8XzZ8+3uyGV8g///n/2j/7R3z+7c/Loavd/+b/+3/7lv/wfDjHX3r3x8LWY4sl69Q//wT/4g9/7vX6Mw5TZN1MO1/2Yixx1LTPlIqXklIuzxhgiRixKiAogKiIyV4bI8Hwh50PMRuBWbcF7ezgcKEXJ6q2z1iCXmNI0jVeXl6dnd5fL7nDT55J/CS23D01f8oa9UrqlOSH71AKh976qqhCj8x4Rp2li5uVqtd1et7W3zi7Xa1u5XPJmsylx9N4Nw4jWMVGKKYOid0SYShEFZrLW4pxjiZZSUkrO+RgjAkmUaZrm3HGaJmZKKapCVdXOe1AAZmOtMUZE+v2hiEguztphGIgoxhhjmpNdZu7Hqe8PuYgC6swxVMT7OubJWBtCMMwhRlDNORnmnBOAEqFmDTEBANFtHWjeSCsbnzXvD7EIIVpjSw6liIhax5583/czr1zOeZaLQwAVQdDlojlbNs4YZHsI6YPHz2fswC/dbncs1pJxMIW6qpZHy6wwZwBSsgLrS66N20U++10JCVSJbmEshsjYqvLOoCIoIYqCKAz9uF52WYpnJ8je12Ar063a0zvgzH5zs7++2F09C4e9YR6meHH1ZFlVLTMTq6qoppSyFGZDyNa5W0JJ0FxkHA745L1he11Zk8aDlKQpAxRfNUSUU3LWUSknXReTECiCTFP/+J0f9/3w4K2vLtdH3XotmsPhEEMwpKBUckHQyjvJJadYNV4GmQoQISmICCKWF4RqP9O+8i9pykUVkLr12cOvfP3Zu9+d+n1KYYLn21BWXEXF8erasgVJt1gUUFXx3h4tWxWovLNaCEwpGUtpnHPWZcaQMhhumzWIHA77YQgq4tsKAeuqPj7unOEwBeut97ZuWzJOidmYkgICqgACWGspZlAtOathtrxoqkpgFNoP4yDFWSeK7WIFiqUUZCgiSeRmuzmMPVvTtl1WDSHNICHHVFlyxqgKIBNLCQWIyDmyVnVmxwuIaJlDCHEKjODIMCOioIhlhluGRHrREvlFl9rH01wFRbzFe71og9ILAriX3UxSVQKQOIDEp++9c/3o/WW3Oj1/sN/fVJV//4P3r24ua19fXT7f3dxIikykKkxsiZ01BDimoCKomnNero7Xx2cxpevLy+mwu3r+5LC5gujzMMA4Nk3lnUkxIosjVkkWFGJy7Euh7dU1SEyTXXXdsDtUzhpDMo2HaapPzpnFMMQYchg9GV9ZBWjaxleupAAlHW4ujDEgBUUlSZhkDDkBAITDZpcUydpCgMzdYnGzHyWnEou1nqzZpynnOE25jxHJpOLGYVxXtdEoGlAAQY03QKQCCCgqkgVBQhhB5WS9zrlMU4jj2HbLEKXyjXNKxAYxlwL6sWzmBRMfvErW+JeX6f4qNv76xcacu93mprOj8KU7P2afda9/efh2cB9RVZnBe7N0hVpZHi+9Li7e/sH/55+Eh198qzs9/c//7u9+74dvh5ynw8FIPll4s79MUZv12b2T4ydXl194eP+sdYvlWtDFlBCkMgQGS8lJo1KJIWKaPMPdew+z4adPn7337JJF/8H/+B/+1q9/a9XxcZXf/86/ou70tbPl42fPnICx/N//839RcvzmV996eNTRt776+PnVv/2T7+1jqZtaEfuYcBqcNQjIhNYyExcB0YIzt5QCqOALgoXbCwtAZLToLAyGAFVlEalkFSmgpV0fGcbdxZMpKRyijztErhZrBSwlIYq+sjF5+WR92V79WOf0Y16g28xWVQsiwQwYIXqJyQTAlzRYt5mu0q2bFVU1pZxFD+Pg2KxWx1lSTKGqa+uMMxaIL24udtvNOAxt7YiAGZl5mhKhMvOUMjMZElZhoAKlSGybVhBKyeM4qeI0xbYtxrKKDkMPAMM4GGNVMOe82w+zTFpVVdMwzpNeAJBSmmIaOTRNO/Q9EPvGhSmEIYR+ZGPu3H94enIipVhrQwxSBBFySTGF7XbLxPv9PuckhWMIhtU7jiEAqgKIIiCIaMoikpNkh5xiFCRQMcSEZMmmMBlnARVRjeE5Z2KyIqCaHZE3sF7Ub9w7Pz9aqhS2/vT+69/58aP/4ff+7Wfde38yey68gvf96PpSxDkjUnaMlg0qaWrdonV+As25ACCCIcQZzaBgCmABMIgENH+EIAAiEQloKknR5VK0REsIkhVM5eocc107V/m6ba2p1FboazA+DD3GMFw92149VYVFd/r06aVEVYeu89awYzOqSMnE0jSuMjVbX5ALYEpCmnOKw35blzQRo6plrCpbNx1bd+gnEUlTMMYqCEDxzlnnDocDABm7efb22+leOr7/GlUZplJZN+63lbNgXMgTEZDjkBMgFoVcFIFQiyPqSwYmZEIQBcgAAMqfwE5/OI/7qe756Ht+6js/cd689bhdlS9FohUQgAEUfbW887Bdn/dPPgjxkOKgUzp68FbTrkdkUUVmZAslGlTDyFQ5ICLKpQzD5LwrKmSNtaCQreWmqVRyjvF6c933IwLVdW0sI8hqvaybmlXjFIHI1y2gAyAVVSkAOfYHLGLYMUVvSOakUkFiiiH6pmMgY/gwhv1hCM7YxFoEERlJigxTyFK8r21d5yLXu10qSlo6A4bBO2YEFApSQISIhMg4Z6ydR1aKydYaZoOYmJitZc3GGMu1kZxBtIhIJkbLBnS+1yn9AvJ25pUEBT/qsBdHPvrZiFhVvh+DZfTOpHEchuHb//pfPXt+ff+tx3/rb/2mSEHEnGWUYSboSSmBymKx3F1vrbEl55SLlpJyJsJh6Lfb7cnJnUXT/uDdH4d+H6fJEZXDSDEbY5nIs2EqziMShXEELU1VsTENUN8PjoG1lGkwhJIzIi/qmpEcauVMTNEwQQEpOYMqeGuNlAII1loElVyGoa/rOsS478cxl0JERmIISUBznrKEUvqQBYiI/XqBxk4xbA97yCVG7RNETUomMUvWY++RM2YxzCA6DSO0YbVcMPM4jsw8D/NO0wgvqjIppmGIzNy0bUo55/wTqOLwI3nHX+A29Fex8R9wbPwcTdXZVBUJc05O9HS9ODtatxqPapdjmvZXb38/lB/5N9546ytfeOis215dPn/8fr+9Ouz7lON2c/GNr33pd1a/qWHQnHzTuXYRd7sUpfY+h1AkkipIxpJqJnXu/v077zx99mvf/Obz996tSPP++eX7f75hGe+eDP3N/nLzj/7T/7harJ49u7q+ulhVvF6e8XDzb//F/1sVnl/d3GlJlvUQEiHV3qloUTAIMzAhlWwBmYmZGWd5nlueZqLbmQkpArcsTgIEKkiIKUfJxSCiQj/0bz588N60C+OQg0w5COxO605FVG71R3/u7ehLiMKL2u3L468c++h75s71CxZOLZIXXXfn7t3dzU5Lnm29WmjJfd+fHB1dX11pVEZcdLWoAGBKGQGtYURM/3/2/vTHtuXKD8TWEBF7OGNm3vHNJItkUVUsqapLjVZbRgMulFpqoy3AMPwnWLC/2P5DDNttGPBHAzZg2PoX3DAkoWEIUrsldQ1kFYc33TmHM+29Y1pr+cPOe999Ax/Jx1fVRTXjw8XJzJ3n5tkrIvaKtX5DrQakgirCxMG76lyV43q5UCNRMOAYS8q7tusMbAaU1yq1FsZb5YRxHFerVYzJ+9B1bc7FzJqmRReI8HQ6habpuk6qLPrF/fsPtmdbUUHEnNJy2Tvndrtd04Su6148f3JzU87Wyyq1ZDdKkpnFZrPjL3jPxDxNudSChI6hCqHZNE0BiLw/Ho/9ogPC4zga2GkYnfOIuFyuhmGoVRx7kUImjQ93t+tvvPnwzbt3wOo0jteXl/tjOtvevTjbvri6/FkWLb/iIKQZMp5S2u/3McZiAoiGdLteXzsRzahgIkJiA5xR/kAkph5RVKFWT7cnH0R0nhkteN80rQA6587u3eOu3e1u0nF/8+TD/fOnWiQslocx3eyOmy6AmWpFumUcLlPxZq5dVDExyFVINTCQibFQzTUhMJuaSe76JrQhVw1NQCNTQILGueM0MIfzswszfP70aS5VDZW4WaxWm60LbthfN0sb9nvPyIIcQkxJ1EqtSSSmnMrtiRQqGCCze1Xc/sKM6Fev3f4KRV8ERNe0/WIZgo+TpXG06jRPizt32fPh8rQI3jtics6BYyIkCsHMGIGdEwAickhk4ByXXHbHY8mxlFyrhODbtpu7D3funC/7wGY1Z5Xad41nklpqLc4LKNJr1I7ZKLmYmKlodc7Xkp3UpluAMAABoBjUKjlLrdXMvPehCYG7VMoUy/E0pBTBxJkGP++lsxwJEBqAmYmBmOlc9Z+3VsfsnGNmdozoUIwJCUAEqmpAJgQXvAstvHyM/Sr1vM+nua9F5pbd8inqopkN4wDEjHS6uWkY37i4BzE9/ejD7/zt71fT7fJssVi0XTscj47ZREopJefj4SgiINVEpFYDYKYq9Xg89vtdKfFwMwz7fRpPaThpGjvUzrkhTshdq74JHqQ6os1mFbyD2WtebU1djVFBTaqq5VzImrbzbQjBodQKquzdjNyiEOI0Mi3mT8fOEXLJsWtbAygiYhaaphpUMCYotZIxCMYxDTGvLy6QEEXH4VTV0HdA4h20peRpiKVWRDVYcFstAs11IAQE53zOeblcznTg2bjS+zC3zGbbHudc03ZzOYGIbukOP2vRvOxc/gqh//njN3PjN3PjC98fzRxRg7zoVgA4Xe6p5YttI2pVdarT1fs/AKQcyxSn/WFfBWIBY9/0zeF4HVC85DfeeGu9XiNCHofWudNYa45pGrUKGTTMEFi9Y4TW8f2zsze6MFw/WTdapyN0y2fXxTdbduQU/pO//bvHw+7Zxx+cdpeq2gTfhD5XYxBzIQqdUk1VAQlApVYi6prGMzMhgjgiUy1SCU1f9iuIsFYxQzUFYERAgyoV0BFSyQW0OFDvvUmZhv16tXp8GGtRxxBcTTlXlVxKC7Nz5a9wtz+FRviCsH46D55xQ6aiyFRrceC0lovzMzTIUxwuT00IcZxCcJv15nQ8OqY+dOcXZ9M0jsM4k6/mvo2Z1Cq1ZARs+xaRSpUqUsWpHMZxCqFpmlPTtDHGaqpmbdM0bcPsiAOazuDd9Xrd9z2z77sFIHjn+773IRSrzPzGm2+++iykCkTs+Op63zRNCM57V2txjo/Ho4jkmNCgpCxSUVVySTGehmG2580511qRnXfOe2bHwxAdMzr2nmIpjkhFCKltmlxLldoEn3J1zonUGZWrYt4xqWy68M6De7/7nW+v2vZHP/3x88vry+ubY3xc8aeA7lfMcT91anl9GDjXuKYdqlTRNIyncRJG75wa4K2Eshng3AKea7eGoGBigABaVc0QgB3WUhkQZwAugKmgg+ViwY4AyICcb9UwIB4P+xePPrx68nEZjrWKBLs8HW72p85vxLSaFhPN0bHzoUXFLHY4nQChdk1haggQpJOiUtM0BO9rqWDGPpxOUxXxrjnbbD27DBUI18tuiGXIScSAXEz55ubG2JHz3/7+7zXrTVGhvmf2427HQKpiaqJWDbKoESFhLbUWZXIMzI5naiDCK27e35gxd9oQ2Qd2jokCcWha0pTH3VypVyBiTwRIQgjEgM6ZKipy8GqGZlqr1DqcTqUUx362WVkuvarNs3G7XW9WCwYpcTSpTfBNcAiGJiaCpiCqVdl7do4QmNERSa0G1YzEBLSI1FoTAnVtIOZpSknMmIlITHOtacxMxEgppo6paTwRS6lahYgArYjorVvjDDhQuG0C2yupPu+dD95lp7OMmgGqlFKr1L4hh9j1y3a5+hlnll9ufBE29zNq8PDZRyYSAppKTeNp4Vzv+bjfrTcXfb8cxum99zY1xzsXd1eLZYpx9lOZBWIIsao6ZsnFe9e1jYFlUUf4wfs/rSmfjvs0jXkYGgJi1FpNahqHxBhC4xx6hmXfB+9c451zTehWy+WPf/jDrAWZUypEpFVzEcBKXGuJgCBmbFZFuVacRiIMbeucVzABqLN0JlhMeTZ5BEBHDMGnnE2yZGGQWuXmxVMkunvnfsCgKK5pb/Y755pFv3AIz64uc6nmm4ocluvT4TgTtDfnG2obVZ0FB5hZVa+vrwHAObdarcdxzLlut1t2M0YTkIhn9yUAeNmGftWU/KQC97VL2nzp+M3c+PWdG68/UV9/AnzJo3o+dn8uwkCAKMoAWlIuFkJQ4CdX16fRL/rWDGsFEVXgsdj1YTimMkQpxr4xG6/Wy0WehgcXZxfbLbNjNGelC5QdB6bKqNWKSmByjgVJ44Q1f/Djv7y/3RjSzW4nOSPt0DW+a8dxMq01xziexuO+W3Znd+/mnNtuERVGc6ckpsU5zlqYPWPlxt8+4RFUqmMHiEjgg8tZGWguDaoKgIEpEda5XgiKiIAIpjy/EAWC4JrxcAAzFRRBz8DOGcB8aJl7568Jab4CjXwSsi+sqb+evMIX5buvxuvRR0QzcM79/u//7ovnz477myoVTfe7m5hTTgkUQHV7tmmCPx4OatYsuv3+BsFMMuCclYOCEhOAOedAGRHapgU1lYq3mA6sVYhq17H3frVaXdy9M1OUkJCJEZEJ5gbFLP/c9wtmryLE3LUtEiIzEDLR6XQqtSIAiJhZKsV5l1OqTGY6TVOtNcZ4OBxQbBpynIoZ5KS1Qi5lPhzOqwYACNmzQ4Kq0jhfxNp+4UN3eb3PpTJzqYWd79vWzEQkNE2MWURqlVqr46A1rbrwzffe+Tvf/5037t+/vry6PhyeXL643h+HmH3bc9O/Wiavr7svt0D7dAS/GKYys+sWy+0NfXSK0flGCWOp1YDJv37OmZGyqmaGgFikVjNHbGKGwAi5VAbrgp8ni3PkGLUWJNMqCNz1K0EywOvLS41TmUYpxZzLRsDNk6vnN2PeJOlybWqgbKwJZZimPKSaTIc4AeI4UO+49+wZRHsDaEKooqpCSJanqmZktVbDslosi0KuNaU8pJwLoHPCXnKBYQzNCeDphz9d3H33PecDOYdLi+OEWlIss6wGAHnfVs2AFYmJhWa7cHa3eBB4xdP77B74JaH5wvGzlBZ+6TH/OcShCexoPv6tVn2DVeLBE8xi4U3TalZG8bOgMbr5D1AwMTORKtU51zVN4wMisuMqknNChMWiWywW3jETWCkmtZZEiAjOVJGdqaaUnScEImZkYsdM6NmVWhRATFEFVEvJakbOM2BgNs+gNfgQU0JidWhg3jkVcUom4oMjwspYCqpaNTURBQQjIoRq85YyV3PnLUtEmNk7F0KYmRKIWEqp1RixdQ7J3Xv49nJ9BoAICgCK+OWkzy8Zn6vm4qvgfknIAAEcAVSRON08e5YB69XzP/m3//Yf/KN/+OLJk/V6pWrH46mkulqvU4olR8e8WCwmtZozIjrmUkqtlUMzjeNitT6Mp9Pp4Im996Qyux1v1+uu8Z5Aam2aELw3qejYe8+h6c/vrM8vvuHdMB6k1nia9ofjfj/eHE8+hKmIJ/WOa42MWKZkVZi8qNRZBh6REDH4FKecchED5FqrmAKy975vmylnD0WhMiM6LLUGzU3nguEUT9vA4zT2603w7M9Wh5iTYsxZ0mRMaspgy/VqV2q36Mxst9vNAqjEXKbp4vxC1FQFAee/KOdsBnO5/9V4rZDzVbFDX2n8Zm7893lu0K21wWeDjmYMYKWACpKplKZfjBGf7g5wMyAiGNYKseoh5t2YK7CRNygb37/z4H4Lumlo0XVNv+qW2+F0cmCH4z6Og2cO7NSbGiB7AZhivnz82Lctmjy5vjKToDbGI4OgWdMG7wlURSuC+tYD2DBNRWw3HY5ZD0mP40SIPjSrNsSYEDV4H5w3FYckYGNMotK2AdSKisltpjKnunx7DDAzBTBiqiopTqKVVACAEInRyKYhT1kZwTO3rWfHaqaqZvr52HyFgbdaGvjal7dso09lwAZM9L/6J/+L3/+93/m//J//i8t6PA059O29e3d++Jc/jtN0cX6+210BWEppHIZF38cpAmhK07LvxpMZgBk6d/tXmxkTNU2AWVA2+K5tPPN6tWyapm275WJ9dnZ2ceeuaAXApgkAyMzMZKYxxmmaVquVmXnviEhwJoiiyEznuyX9SZ0LxVVhTtYbA2ioETFmn1M9P7u42e+m41CrEDkiUh1iTEQUQkBE7z0gSslETOQAsWplyuYcN+16cxbaxbMXl4bAqkh0OB5zzp754u6955dXcUrOoarWKmhy786D737723fvXlzvdz/64IOPHj85DENRzVVWbZOlmum8SbzKcX/WieWXHYK42J716+3uxZMGCL2vpdZS+iYY2G0vB28X/cwMExVVmfH3oGqFgIEcARISi1kV7QKrSde3KUVHXs2KyHKz4qZpTIbTIQ0jECeV87ffAb86/fCjqzF2u2PK02mMjXNotZRyGsvNMBiRd27ZsEOdnIvBM1kSKypdIwDg2HmHc/0viwwpy5U1YQ/AKY5MkEXVd/fefPcm1qunT1X1eDoR882L5xz8xd375EKNqekXYmUcj0hIyGiAZkAIzAyMIlIrIhOxvfIMfAmu++98vHakQXauaRtmcgiRjNvAUmQ8liH2/TI0HbsAksEymCKIY39rj46oYLkUqTmmSORCCCIiRWcUwWq16hctM5MqgRUVrZkRvPdAzkQQGYFFjNiI2Dm3WC1UtVRQoKpapEoVQFasSNOqCcwstQACM7eLHs0c8yxkolIbZiP0GGhW/1GdtKJxrgJiQAQV58eX2WxvYvDyEIhIImIqiEBzOSNjzHXKCgCNRyBQ3/6t3/+7TdfbbcvYAL46m9d9Ava63c/hc/Pj89PFzMCQwapnzDEXsN2jjxY/+dE0Do33x8Ph7GL7/PnzcRrbrr+4uDuOQxxG73wkRMS+60Jwpdam6zg0oW1v9jeH0xHZLxc9GZydbTQd82HPIZxyaoh6dFXtcDpdbM665co1fnvnHoSFWyxW7kEYl05l2O26vmmb4cPHT6/3exdj41zfhuDYoTnCbDJlxGlqzYi48U1SPY4jmRSppiQqMjupkE4lFi0lJwXzDgMTEjaLpcOy7nGxWqtuDvvD4MBkOqWDS3nFHLw/pJKK3PZIRX3brLowjMNqtQoheO+naZqVB46n0/E0eu8FMMbkvAdANSGjV22IT/xx/tp9IX4zN37d5wb9EvX+lw+GT6q+r97+M0NRi5VIbDGXcTqpQSolZ4ipTimJaCySqlVido1jXi3ad964v122XKZVwG3fN/3C2MWUj/vdab/PMYpqjLlWI+S+c2I0lApIZIhVSMXYZaSD2E1RrJlNmxTbwAxGDLlqzDUb1t1UFatRUirVFl2/6BtmEoUApqaeHQEYAjMwO+fD8xcvGM07x8CCMks8iggiyiy7MHPPEAGw1gpIjIzIBrc4EvY0pLEoEAN7ROfUAEQIAAC/uOv2ub7Iz0M2vA62RjNA/IJneanlj/7oj//z/+wf/T//7//XeLy5s1pu+v7R9UlS7LvOKqzW227RTeMRQS8uzkvJCJCiLno+Ho+iQkTEjACIZKoACMS1qqJ2bWBmVVO0WsU5cQ5DQ6Uk73HVrkUFgUIIZlZFmqZt21ZVa63MvN/vEbFpGjObBQ3AoJRSSlVVkTpnBSWX0ARHhEznZ2fTFBeLBQCIasmlqoSurcNpmE4pjyE4BWDCNnjvXYqZF513FHwQlZigb/2FX1RsqlLTcNt16DnFhMTOOQUIIRBhEwICGpJrmvE0eApvv/3WcrG4vLz6+NGTH/7oJy+ud943JreIxVLKZ0P48qTxy4qIffZbhgbo+259fhEP+yqFmU2gqLIz7+CWWohzLoczL5iIVURUEZURqwoRhpmoruaCA7Va1TtKMTMxOMsi5+step9LicPpcNir2pQrth03fVYEoFTl6jRIdfvjqZY6ZhuKDUWnKsS46tqH63Dee0Sr04RgQ6mHKXXN5B3dFh2dO+Xy4fP9X3z4fD/EEJpN41at2676avLb33+nWW4Wm3g8nE67GwRAgmxCznkOTd+LKhAZYWiaOkWpsVZwodUKVRUM6mzLTEzIgHZrUPSLlGR+ifH5XfRn1ey/VIaIXeiW6Dw5ZyUDmOakAIt20a/OtdTblE4rggckcuyY2fnZuISQEVAaNbWcMwA45rZpurYJTXDMaoImtdSSE7vgGo+ICgrGeiuYCFKLooqBGgIAO0NCYgeqRbTmwqoA2HYViACZ2AjJ3aoemHgmIAAzEBUBT0hYczEwBgRiBAUjMFEwURCbt02az+NVKiIwAREIGBM5donqVGuKo6Hz3lWSCfA73/3e7/z+HyK5W2Lmr3Zoca/gyK83015+59OPvVfRAlTALIJIDrESsWmKo3P0/gcfvPuu3bt3r5Ty9tvv5JKfP3v66NGjEFqHrLnkGFEMzYJ33WqFoXE+dMvF48eP2LGRU6P1dgO+6dqwXm13L17s47HGeNF1i+W2inLXQ2hc12fVjgzVasEYK2uM6Wha+j68+ebdKPnmEAegU8rrvmeTRWAl6PpQjW7N63Odaq1gnlCNDCjWUk1SziG0RSTlCQjOzu9uVqv1euW8N8DFagmMOZcccyHkwNNwuuhCYhyqmNQGUZs2CaQ4kTOt0i79i8vRzJbL5TRNInKzu+n6LqU0jAOxb9tOzXIu7JzJ3C/G20zGwF6F5CWv5FcJ+S8+fjM3ft3nBr2K0Od4/S9fvH69IaK9xKXYy39erx4jIqBpTSyZHbVdL+B3p+kYYypalc0v1UForPVhvd7ePd+uOn++7CBPw/6qc9CgA+PQLY041+w9Nd4dqsZcjX0tAqiERMhEZlAArHPUOo6l9m2fGPYAh5hTTDVHx+DQmMAABCgKiBiRC6Htl4u7F8tlE2rNYxxVITislQnIZkACGDtihXsX2xkxlgVV7PV8xebGMIDNXpxo7J0pooEZI4gSIrspleOQ1OacEJHdFKOUwky39/Nz5h2Gr91nfIlh+/zqRnsJOcEZdviq8fd5cKeZEZKY/dN/+k//5b/8/8ZxXJ6fbbebIYlDe/vNtz569DxJZcC7d+7F4XQYbpar1e7yum97ETNTnjkiCEzkmBSx1jon4KIw5WKKFJi8UzXvHYDFODjnTqejSF2tVt55Zu99EJGYYwhhs9lcX1+rKjMTUUqJma+vrxFxJrUcDgd27J1nJmZ3fnG2Xq9jjF3b1ZrX29XlixcxjnPbfb1eX724RMSuCblxjiFlabsFEdScfReYyTtqmwbATkQxFyO8OL8YkiqHYvbs8vl6c5Zy7rq+m4UwkNarZS45V9RpWq2XHkrft+M4vHj+5Cfvf/jx48dIAcCjRUeERCL6CvL3Ol7os9ihzwT9Jbzki8YnLVlCBHbL7cVpeTUdbwTQk8uiVdWZEYABzsBHAypVKZCqOedzSlUqsJtTCwNVBUM/V5lzrqiMqILoPCtQkrp0NO2Ph8vLHGMGdV2/2J7VnE/Hm4UHh7AfomjjiVLRoVgGFhcqiaqmScY03Cz8g0278oBSMUkbhSkyQ98v2tBNpX744uonzw43k1VAHOOG9e6qHdXee/ft3/s7f5DEKvq26X78gz+JeXLTxKFJMYFKKVlNDSxXA2ZCWPf9mMoxTiUXNQOkGV1mSPMpUG0OAX2+so6vr7j5O5+Pwcs4ffrKz1xoPyOdtddefBYMhgjs22a5aZeb1N9wLKhWa6mivNr4tp1sUlLE2V0IAQlQgJiYmB2zZ/KIpKqq2jQNEXnHjfeI6IjQhMxEaq2l7RbOeVVUqSiRvPe+YQ5MQbSoalVTIDFlRu/Ie5fUcq6llMYpAB+PQ7eQvl84AmYyMAMFzwA8gwdM0RiJvIlClSrGhLXI3D4AkNmS+pZ9plKlAiEBEeEsiAEYEIBxtn+viNi3gZwDlcX5gz/+z/+n64u7hgR2qyf2lREL8CVmv186aH4OuLZTYgNR0KbvReVf/st/eXZ21ve9SN1ut+9/8H5Keb1el+RfPH4aQtP1i5KyVQEXzu/df/ebv3XYH692Nxfnd/ZXl6vz80C83Z5fX1+d3zvnlCJRxzCQDSLPj2PM8aPdj3wIzAxazpb9anPncIpXL5585xsP7m8XpEoInuo7Dy887S53w/54LEUaJtAOGleqLpZL0cqAgNg2IZVcq6SiM/5JwIpBjqlqXSyWm+36/Oys79smtK5pgNzq7DzXimMMrsT9aZxuUAoRoYozgSJlrIJsQACgVYbTablYhRBm98icMxEtF4sQAgGllIgcEr6kxptz7tNL9FM96tfD8Ndd3f2Fxm/mxq/l3Pgkt/u5VwJKFQ/WNCH0qwf3ltH8R4+eXN1cl1qRqG2bZdstuubh3YtF60uKu90uTcPCkwNj5LZbdov1cnN2GsYcJ2NnzGPKgFQBPPt5m28cu2VfSkUCQ2sckMQu9Mvm7Gy1vT4cLneHKU4xTwaKYqaC7Jxzy3axXC67pm28N6kpjioVAJkdOgAQYhQDQiTA23KscznnGWYAiDqjHm1W40dCNjBEJEQ1u6UqI87Kx1Xg6mbIuXQdrTrq+iaE5snTF0SenfsVCRS3ZeTbjBZfh+R+csFrXzrn/ut//a/+9N/8a081kB2HsVus792792K3bzf+/v3703Aaj/tSyn6/M7ZpHAGg7VsCrcZVrfPuFUjDTJjAOZr7wLdNHVVEVNUYE4AyL+eS98uTg3PsvHNt28Qcj8fjMAwAMMNnc86vT+AY4/xWUCH4YAallOPxOOMcxmk0sKurq5zzarlKOXnnTKRtXIISuk4lqUopvuTkGDiw9x0aMoFzTtVUJq02xWPKsr3zBni3XCyHFMfTiZm22w2zE9XTMBihZydS0aDm8uDetqby+PGTJ08ev//xo6mU9aoDBgVrmtaxM/tURvvqQ/1SuIUvxObOdxgQm83arVcyHBCsbVyeNe1mgblP6g63/2cphW8zK5zDEYBMwRyqQVV1iCAAWru2EamAaKaPHz86y4UVAOk4jupYrXZdyHFaOr27CtfrxYv9sDslJEJiITCrwTkrBgRieBQ67eKLU7pYhHXLAaFhMwRFhL2mfHO9H7Iht227MAJ0Cg0lZFitln/4H/yBYyemF3cumGlzef/ZRx8MYwY4hPZytV53m82de/cTuzyNcTwScxGZodilFgWWWkStmhmgmpEq4M8kG/wK4zNn1K+yog2YuVmszldnd/PukvenUmtVUZhvLROzqjF7FVRVNzvUaGIgIMfMHIhISylqtyddIibCGR2EZuSoVmzazntfSlGBWhXBB9+QbxEdsodigOpccKEJTasiPlVOBqbEPqdasjlntYhkFa4OGYkNjInJo6oBomM2VTWZLb6Z2SrhSxDVLPz76iswmE3CnXNV4BXRwETIuSY0PEYU7YNvA7MPZvT9P/gPf/v3/g4593W567jPrjFE/Pn1YUQwNeS2B2YgUYFpml5cXv7j/9kfqepms/XelSxvvflW44NWuZyGcRzbpmn7vpbahrDcrEPX/8mf/Nk4nLyj0/FQU744O9+uNtM4dMFfP34kp/2436FDdGFXdX8YwbligAW5Qt8sQrN6cX2zu7quw0A/kutNt1x2XesJpGX3YNsrAhxxHOJQpeTEZ5sqvtYKIAKARs5Isk65Hqc8pGpAorXW1Hbh/HyzPdt4T1bHOEStHZfGNV3Ki35z3nX9zdMniLpahHFIJddlG3SKVrKmMolW14AqV51OJ+iPIYScc8656zrv/fFwKDmLCCFt1pu270/jrTq6fRnm/a8Vb/SbufHvzdz4XBH353z/Z/36/P+oKRl4pkXb+savm+XDi9+ZpuFmd31zfXm23bIqmzR1LwMautPpaLUuuFGxZrlsVufk+ywALsSsRRE5GDKRQwUkNxODvHNkwK513qFZYIBcuq6JVe9sV994ePfFzWk3TrtxOMVUq4oIEiBYwy6EgGDTdMJanPONd0aIYFLrjKppnDcEIlKZ2xaz3D+qgYExkSIa0i3pZYaW2cwrMwMlIMdUiiLjbn+8vjktGtws3WoRum65O4z7Q7y4v5qdKg0/61oHn0Mo4Esc9JcEFT894BPO2WvZEkJMcX9zKNPxztkaibrx1C9WJnW/u7l7/y23XDiy8XisImBaa10vl23XoNrdi7PptM/T4AkQzCE2TZixs8555xwCdE3wzKC3sFQAmCW0SymluBgnABQ5IWAVJea59ty27TRNZpZSmpl5IhJCmKZphjE45+bX81ogonEc27bNOeeUUkpzAShOU9eFEFgqAup2u5rGsWtDLb7WpMqz6JJIbdsQUyKH0ykVteNu3J/GbnW+PLsAvvtRisMwIKBjqrk4pFhq0zSr9daH4+GmNt6nadydhmeXV0NMgGgIgKimITSlVFED/mxS+/kE9/WF8/kl9rMWHSIYIrXd4u7dm8vnEBMjNt6VlyLlegvQnTWsZxM0yLWgATPVqoSAyHO/d57SasiEhqBmPgQkOp6Ovl/0bWtFro7HMacSxaGzGFsTD/pg1dJbd84W7fVxiCkBgCBWRQUNnlzf7YcxJalGx6LTLm76cLboWnNFypRSyScEXTTNqvHAOE1x9nEN3m0W7fe+9Y1t18kUHXlSXS2Xb7zzzmG3k3EoVQ773TAM/ebs8ZMnd87OU6nkQkzxdDqlVBE5sItiiji76N16as8nrdsT1+e4fT87Oq9+9Oq0/4Vx+ZWGGTItNhft9o5fLRfD6jiMyrxYb9j5uSen8zlWUWoVzqbExJXcbKqCCMwEcFvpYGZEdMxEUIvMGNkQgqmO4xhj9K5RReccccMcmIMZkPeSBdkDMpLzTRtiYjRUcewNfEy58da0DGKaC3inWHHmKCAQoRoQEnoGpWpmIkykTLcuOzMjEhH0NtklAjSaNzdVFVF2rCJgCI6ZsfGudb4PzjE57zEs3v2t7/l29fmK+FceX62aC4CmAN43wIwEJpaqHI/HDz/8cLy4+M63v71aLve7HSLmXJq2ncbp2dOnb775Ztcv4pTv3nvw4J03j6fTOExLR9NpP5WI3seU8qKmEvPxsHv6MUItIjFpIVeQ01hjOsZcYilIfHZ2/sNHLy7OlvfO7zx44204np7urq/ef+QA33hwce9s3RAv++4wxKZraypZapEyLwTn2BOjYYop1TKmfJzSmHKptQncL8Jm03e9K3nIyQL7xvsYY2g6GMfTadpcRDQddjclRQIlmrfLrFVIzCMSs5h4ZgegpYzjcP+Nt3a73bx+SimlVuc9Gy+W66owjDHnOp/UP3FR/9yT8BfIMv8GjN/MjV+nufFLb+loaKKqszZN9l1/Z901TZM72jb2xrotOecY27YXMwzt5f50nKojqwZ9aLcX9/qzO8dUGperaL/ejIc9hy74VhWCdwZCNJuVutC21SiXOk3jdtGd3z1P47heNKBytui3bTukvBtSNtsNpyqCxCpVSn5lAbDo11ZtTElBVSuRmYGCBe/UAIilllxrKUVv4SA8M8duwQQvbWMBgZCI0ECKKBACzNq6kFNsHKzbsO6atm3V+MXVTdM2bduFpjVEVXkFDvt6OzA/K3NCplLL5fVV2/XN4RhjEtUq1HftYTeVnJfL5c3V89A0oQlvPXjIxFrqZtl3zuXg43gIoW1CQKIZaTCXadGUkRhnRCjMNSUiN+eiAOq9EzmZQSk5xjx3kGfBvpwzIsYY58aFc66UW8+zGTECAHMVquu6mary4sULZse3/mdN8GGuuKcckVCkKgIQImLrO1WPZkTMjg2tlioFhd0xp1Jr4GYajsM4TTmFxWq1WpaSj4fjNEUTQaLQhMWiD10vBpvVQqcDID598fw4TM4HFXFEoIIAvmlOqSj9nHXzGQWGX2oYGBgawHp7sdqcDem5I2mboFleXvDJ/zKL5irIXN27nbGANmsgM1cVVvIEiIiEqioqu/3u/O7dzdnWRA+HgxoQcdwf756dQ0xt6yywWy+WbXhwsR1iutnvBTEW2A8pKe6nEVEuHt5pQnt1fbM/DlJrTuk652aW7HV0se7efHC+DF5qcs5PKWkRAr44W7339psP7951JpImdOpUgd1mu33vt779wV/8oJZYFS4vL5vVqu3702FfSx2GEarElHIWJVdKNfJiJmai5pBeEfN+7vjls9gvU8/4BQeioGGzOl/df/dw9WhTdHh6FWNql9DMwt0uqBRT1plQWAuRQ88gVUVmB6VX/kwAEEKYVT3MwIeGDIgoDsNhv4txatsOSAldCJ0PLTKTYzMABfZBVULb1ZJyyU3b9KVWhf1U2xBiljFLiMUhkBk7bJlpxtEQAwAQmc2KdrdqDTFOIgJwa8s3H8I/mf9IAKCmRDQrKqgqEBpY1QrEyNw2wTOKioKuVus33vsWe/+r3/NX46umuQBq5tqu6fqaopgpQhX5wQ9+8B/+4d8tpVzf3IBqSqnvF8fDfhhOTdOUUt5+693zszvLfnl2ce/+gzfevnfvwx/86fj0w7i/zi40fW9oT589vXn8cevcIU3ZcLle7XZ7Q1ystlg15XEq5d3feu+f/JP/5X/xf/g/il883cePP3ry22/d/+2/9e3di6vnz3dPn15L0YvNOktdLVb1OJmbAT4GoIjahtYTS9WEKiaxJENtWt9R8IHJYSz19OxmGtIwxEQgIm0T2q7vF0sVRf3TEPyi9cvG94HIOS1Wcqq1eufbxrucTRVACUlEtpvN3K0TkePxGLxv2k7EkECsShUkI2IAqLV+ZqW+tiYRfg1ACwC/mRv/Xs8NAyMkBKsl15w8c9+3KU7eUd90znAUWJxtuuUKnXt2vXvy/NGLm/2d8w2xX61WTduK2fr8zDX9/nhSqb5pT2Nc9IsYs1TJpSAiOa/kgFupmlUuj+PN7mBv3n/j/l2H5NAt+s2UJwRatYuYpzsrR8wGXmqdQbU5Z7NMDPvdcbFd7o+HopUbL2rIriqY2uxBkFICgBn0ZmAz65+JDEDsZf+NSWpVUTRjJhVVMkQ00a5tNn04X3SbRYfOf/zsOuW6Ol+wb5zz5cvgmL/SeB2rAHArAEdEZuIch6aJ4+n55SUi903IwO9+573terXsuz/70ytC8N73fb9cLft+seh7q9IF3223z55o6zEEZGbHTETMLCqA5ghNdVZ/986HENo2zElXSqlp3M3NdZwSEpphqRVx9jqJs36Qcy7n7L2fq7kzsWbOfecdYH4EDsMwXxxCUJGsBgBSujEXrfWUMjk3sz/RwHnnXEOkZmIipjjlLGAp5Zv98JMPPro5jHfunPumkQqnMV69eLpRrWYxJiaOcdKqwAyOidkHv1wtCTVBenF9GVPyIZTJwMwBVqk+OEM4xcnQf0lQ5xL4l/z0VQS/+AIENCAlDm3bLQaE2eTQEX5W9gRx7uA7JgIyAxElJCQUUSAGpCLiECph0hocBd/UWeNCtW0bMM0pEfEwjF0TSE1yUU/smBytXBuKtI1XsBeHsSI0y+V4HNo2oGkj8u133jjrQ5xizdFU2aDxDTKp1S7wd77x1nazvrq6Pp2G8+3Zfre7e3HnzfsXrSfPFqcjeSEnpqYugMF6u+nXKytNrXVKeZqigWXVnNM4TijZhwZIYhaEWWjKqs4k/tlBDhF/BZHqv7phNhsaunZ9753vnq6f5HG6c5f2p2Ecx1aBZ/Fjc8TBXACtUgqgIqCZETskRh8AkMiZKSIiEDOpGhMaKCKklK4vn5+Oh6YJwS8dk2+60LXOO2Y3K7OYGoNDaLSmtusRYELIuYSUmyx9YFivisgYU+uwa72oiVQEYGJFcc4jkcinzlnMLESIOguGzSZmcxsBkByxGSHCNE2zlO4MqtFZ9Y3cjL8tVZTMcnnrnXfffPsdvG0TfT0FXfc519BfYCAgkJBWYtcty+4mIVYwYgStbduM43T37t3FoleTn/7kR8+ePYFq6+W6Fmn65XLbrBbLB3cfXD9/Oly9SLtnQU5LlqfH/bFrVeXjjz+ymm+mdDyNzBRjWi7C73zvu4buL376oUTf9s3N4fr/9L//3zWi7771zh/87W+Ph5v/+l/8V3/+g5+8d7795oOL/bp59uIqVTACAnBGyz7wIjiCvnGNc6aIIaiMQMjsll3b95CKRIUpxmOcDkMsWc2QAPqzla02YwhHoNMuplRQJE6jaVl7vtPw+aLZLHondjpO6hpDNBCPFAxUsyXEIhyw8W4cp+BDGxryvojuj0fvfdWMgM6F2XDoNbaQvnxx26C022Plyyv4rzjT/c3c+DWfG1+ESfjUI9bwpcDuy4n0eXGGz7wJEnLj7GBlyqt77aKjmGJVQOepcZ6bBffbzZ0xxd3x+OH7jz74+MkQx2+9ca91vllsObTbi/PNnXvsG2S6fjaI1OWii6N0HoeaU56IQ8POikQZyfvT8TjlOp0Gkyeg5d0337q4d5+bBZeSUyTULre1xLbtlBgQjocDAZrU/f7GOaRFq2qFDPvFOCVREIAqWhQq4FxgmIVy5uzEVGmmgBioCdxyyMwTiykxF1VjI0IpaojI7DyTZ1ExwRgnx0IO0bfA3m4n2qdvO4CBzjjoV769L0v1L+N0Ww6Zf4NenmQ+e5h5ley+/gJcoKbVcTruT864rNfk/aMP3iegu/cffutb3xyH453z9eG4c56Xq84EV5ttH0IZD2iy6tumdV0TnMNa50SCRCR43zQeEHKa7ZG5VvN+BhbiOGQAGKdExP2i98g5l2GYiHDW/6r1NrtNKSFiKQWRQmhq1Zk5fjweACAEz4yqdRyLiLRN13Xt9c013tpVWz4V51zbBkLwIXjHIlkUM9L17ngcYi4SU7663l3vptAtfOjQMTlxzg3jePXiGXUrIgZH1SYgrCX3zRIBlv1itXTnFxfv//BPf/LnPwjON8GXUqqSIWmVNjRjymJg+EodCV8ltV/XboxGAKAIjORCUwEAUEVn624zMTVEBgAwNYNagQiRZqLQnEJQVajm1AhVa6niCMA0F6kSQui73gweffhx6Bbs/ONnT6ZpvL/dNg2LlpRNk9VSpFZB3k/5epLk2rBsnapLqeGmYXIA4+5q2TXr1VJK6Rt3d7t56+23Ll9cv//BhzHFq2MU31K/fPzhE+SwWm6e7XYGturbKdWLu3cCGNaSBb0DDyYh9Nuz/c2NCMRUT6dxvd3GOPimmXlZIgUBHBkz5SqotwwlQlMtBGqGfFs+/Cwq/ufV3z8ZP/cc8kuN20VqIGjoeHHnjYff+7s3w+T1wz6X60OsU/bNLbLEANH5mgGlAAiSgTpgQk+OkdEjGtxKjAkZMTlyYKI1TvsXzw9Xz0V1vVoCoGtbYvZAbIgI895lCkUEFVUR2JMLc7/GIzfMqeZV50NYlhJiHHjE8xAkFwxmBQK1CkDIzAqmIqJVQMUTGWBVxRlGA6gKYgCE3nlVYDUiVKlSK+Kt1DMTkUItxYgqs5TaEpnovXv3FquFIZp9beWBr1TNvT1Skpi6tjVEIdyebf9Hf/RHKshEx9Px4s7F9c1104Qc85OPn9RSVUREP/jgg/e++a31enU63NTxcPPkg3y4DFg3XdjHcvX8+f445VwYBNScybZtN8vFetnc6Rq3WD1+8jgxeZUSB5NpfefunWAP1+7Ob/3ue+fn//af/Ytn7394Z7s+367Wb3Uf3VzeDDEQPjg7653rnNtuFmfbtl8u773xtnf+tLu6eXZpOhABEiajyyfPr3cjM58vln7D4FwyvIn26Mn+8W6/H8am7zer9eWLFyE0F9v1WOjpMXXXsXe7++vVxbJHgFKyITpiZyZVJac4nhrvgw/Lu8sYU9M0wCxYz7ZnKVcDijHlUmabq198r/wrqhL9SuM3c+PXZG7MP/8kp/0kvfoF3tuwbULrwXsi5GGYpKL1LrSdd01w9XQ67vY3P/3oo59+8P50PP7WN99ZNcH7Jiy327tvdMs1shtTRAQGaxxvVgso8RiHXHIsxYFjBVSt+QiolBLXvFyujnH46OkzEq0xP3zrnW6xcn4haC2tJSdGALOU092LO1KT5JziiRCwccfj0eTWqVIVYlVDKKpFZGbLvGqxzVQJA1OFmcp9SzgzICLJAqhMVGpRnXlOkmspOXoIbtlrlSqlaRwyha4DniFtX328jsT9BQchA2HTLkqb8jgcTyci8l3b1uK9a7yPzt29e1drMdCYomM3DEP1/jCdTjcvQuA2cNOQ99gEpw6JuIhNU7x1zbh1iXNVlAFSLqVWHse+WwOAcyGm6EstpQLQarWa8biIxIyIYfZxAICUErOvVeaeba1lxoHM2FxV7fteRFRlnMaUEiGamQ88W5SgGTPHOI1gpZb94ZjFnjy9bNrF5eXVaTix88g+hLZULblqllK1FD3FE8ZKzsdcRJVQkSxNEzOb6p2Lba2CSAYWPDmHi64ZRFUFCL33h2F43SVnznFfpby/Qqg/H3tDxMV640IjOTKogQmgfhoNjIhqUKugu9UwRUTnnYrkWj07j4jMpqiKpiZQS1XksCT37NkzgevlcomEm81mtdmcb9bTeJotZMckudQxx2SUlE65NE6kZEAg5q7vFo1ziOzcmOpisej6xveLsFzFF1dR1XzY5zJeXb/x4IFxOMY8KbAk5mGKaT9Muym98eBh65sqZkxN8MNwXC+X0zig94xsCo8fP3Fk8XhyoGhaSjHAUjXnCtTMtxsBAeaTxtdzzvh609zbgQoIBuja7uKN997+zu7Hw7EZjuEUNUcCMFVTdexM2AzEALWaOiSb5QnwE7NcMzDEOXFXVNMSd1dPr58/GadxvdnOuxwhM3liR46BSEphcIRAoCLFTKSW2QqUAIJ3rZoyFgBHdna+ibE57ffHw/Fsu9ZqwbOKEsnMvZwryrNQLyGWmZost8BcJL5VU0Bkplyzm/9WkZfQBkADFUVU8ozMWpCIBSmlJLUy4O257esYXyXNfaUDqQjcdcAMgKdh/PM//8G3vvWd6+vr/eGgqncvLo67fYnpdDhayWaSc3RMjx89WvXtcHN5/ej9qw/+YgmJ2SjQytPV/jCOOThuCfveSXDb1fKdhw/Olh2pFskPzs/jWFLK3iCE5sH97W9/68Eb9867RXv+rbfvjH/w357y1XQ65bLy7vvf/vbzIk8++ni9XMM0BJXzttl2y2a5Way3JlKnTKIL7xvGgno8nIDg7p31wjmpklK52R8nIr84W603zSlvGiylTLubVWi25+d/+3d+azqdfvgXHz5P2hg9fvTirfPtwpPznIFEcus9M4uSihBT284GzeicE0SplksZx4jIyCxV4BdbV59U116TJfobMn4zN34t5gbe0vY/cZXA16qIP+f/UNBa0ar3TdO0AMzGMcWz7fmUUk6RTQ8vrp6/ePHk6eMpD7/3t779xp3z6XQVmgsKPYbeNR16Xvft1bOT5CQpxtOx1jRNMeaqhobI7BY+LDerko5jIK35upSwXCZJzy4vSYpMp3tvvh1WZ65fh67jpeVpsFoh51xKcGyOVqvFeDpO4wBaHcGYJmx6NQBCU8ulpKpdCEzeO4opIhDArBqAamoz2WJ2VwYzBPJOVOYCMICJCCI453LJY0xd1wFaBeh8YA5Nv/jVAQu/bI4Lc+oD5HzTdAuTWlJKtcRBNnfhnXff26y3Pvjrm6vjzf50HEIbjseTJ7x68eSwu+o9rxeNAAESM6/Xm9mDepySD62q5hxFaikqWtn5tmtqKs6RlTrlm+D83Tt32DERNSHM93C1WqYUZ0iImTkXahVVa9tepJZSmEOtpW0bEUYENWu7JqV4s7tCoKZpc8lMTpF4phISAbOoTadTKnU3TUV1tztOsQ6nVK4GAAUOFcC3Xa71+GJYLhZadJhKLppKQbHFJiAamOSSEZGYmhBSjCEEEmVHbRMYLXgi18aYVIsLbIS5VGB+fZl8hRj9nAjOfHUANVus16uzi8OL54iZbAbcAtCnMgA1VQVTMoK57ltydQSAWFWcd1kKqHTeIzEzxJTq6VQAsliq+fL6+v7FBTtnZlNKpyl6H045Xo+joa/oDjHtp9ys1zHXw+509855471Hu3NxdtjvUilTzFkVnT8+vZzEPvjw4/1p7NrWsty7/44Arc8urp88O5wmBl0uCMUYqZg9v75aL9aeXbfoETQwLgI1jGPJZxdnSKi1Hk7HxjlAEFFyfoqz1y9VNRElIjW4FaMholdy37/C+CuoHxkAkIEiChCGxdnD99Yf/bRcPe07h1bAhBhJyTmUQgJkCkBEzOQ8ExE6QrK5HDGXQs0QRaWWEvfXL3Yvnh331/1qsz07R3IhNLPfoRGkWshoPiVazSy55CkeDyoiOcZpGsbBxBzTwjWxVgRFFTbt2qbUOkyp76gWccDIhiDoWaqqVABD1VIzAIgKwLzf2cyQFFNQQ8dIPKMdZnbgnObWKoQ2KyN570vOVUAZFQCRwdC+PpfXXyLN/UzsEQDYhdWqafoVuFxT41yZxpvh1DRtOu6fxrFr25vLy1XXXQ2nvvWl1Cb41WarUoPnvg1DcJSnhllr2bb05tny2WEiwrce3NsElhjHwzHdXAKfb8+2FsjfP28dj1WMm369+t3vvP3d7/7W9vwigOlw4jy++9a97158b3D00UcfJaBxHMcp8x0XmrZz1DedD22/2rp2oaW0bZ/dKefcePRED+9fdBd3L58/z4cRuJOqC2x/53vf7h/ee3aMXfuXTx89ySkbAofwvW+/94e/+508nqikf/enfzlEFa0fXV7f3awXbRAUBukXzdVuEteO47QwQETnPC5IVRVdLnWcUqnaNCF4zpY/XRL4bLrxajN9nd77NyTJ/c3c+Js5N34WRenV+Lz60c9t7TGiqoCBitZcrUOpBaScDtcuhOlwVWO6fHb1+OnTm/3NO+++fb5ejocbR9q1oen6WcjGiFOMBFDiOI2nkqPWWzsGqRUhbu7cdWpYc0MQa1x4PNWa1bl2NabT1W5vpdRSF9vD4vze5uxcmWpJBtB1XYxTylPbhBUuh91NcJyjmIiKoMgUi5ILXeeTkGdUBcBbYpoBOWc6C+2b2pxPKCIi0iwxBjMR0IwQiFm0EuKyX7GVw2lCdojM7JEdt+0XKCy8FppXNO9XobFPJ0+fCdysWvAq3J9/fft+M0/fXGgXtWY1nWKk4Nfr9Te/+Q0m/+Lyxel4nOI0ix4cT0cSOe13aHUSbNtQx4zOAcJhyL3yGBOzI8+LrlWrx+MBqEosqZRcCjtSERc8ESV27uA9sWdnZmLaNM1c7mTmpuGci0h1jsyMGb1vvHfOcc5JTZHAOdf3/UxTCyFIrabVEQMzMRuyMY6pHKYkOZnp/ng65nq121/d7L1rAvtSCpHFGM10s9mYakzldLo8P7+oAFmlqkiUasYuACAhBe/btkew4N3xeHjn3fcef+hUhbxvQ6NAe0JEa5tmKlYVgOllIvoVxy+SSJmZIrrQnD9447jfkSmZ1lLmmM8z5XbOGMwqTjorKyOaQTVwSLkKITg08CQmVWvnw+Z8M8VcDYzdcX8oMe/3B20bkDJOAZkOKT+/vrn/1jsfP30ecymA3PftcvXRX/64b7rz83vDfuc9H653RoYIqcTjYZ8NHNNu+Oj6cFS1mkpgvrzZa82MvlSdxEDxWGS2qY2Hw8X2LN/sbtV1jDyRIN092z56+uzq8vmd+/dLzmAwjWPTMIGllKuqAdnLrcvMiFhNZwEr1a9SAPwr7YvevrnN7F0zQCPuVtvl9uIZADqexYnm3NAMa52XwmxBw4RkCmSoqsykZghGBoggNdUc0zBMx9NwGgz4rbe/0S3Xrlk4H2pORKoySalVFQGFKA7HmsZaapnGnHKtOaWUc1UAAEVyDFalxlMFI0RKRcgbV4NSe2ZT0tm9DAEQVKRKUVEAcOxUU61yi0pnIuNqtyw0UXVmqjorvs8sCPKkqqjCTJW4qCLhYrlh577eeHxFCpohoGExdcyOfaCyXS5fPP64HE9Pnz5pQvPu/bvtYvHjq8smBOcIVMYxS5Wf/OQn/9Hf+4+Ph70nXZ/fmc7u4hGXDa2WsEhp0aVl30bFRRM2vfddeJ5iYKwl7W4ut7Z5Y7G6886dKHZ+/603v/c974Hy+OQHP4T9db06nIbRVu6YTp4X3/nb3//46ZPxgw+3gammVeNbAgSZG5SOnRmGJrjgfHHeAbBNU64ZA3erzeLuw/vj7qCn4WzZNMt2vd1M0ymQ7vcTeHf3wfn3v/etVetT5m+eLfnthz9+8mwfM0hFE6jFs52v23ubTqVcT0KgKWcRcc5vNpuc0pRizoKASBRjRmZEeunb/Kq+9uo5+DOUUP4GYu1/Mzd+rebGV9rfxaSCAigO48hh8E27WC1SjNfXl6eb65ury/0pHmN68PDhnfWZSpnytAqu5tQ6dITOMXl/GI5pHKUUQqtaDIGYGYlRVw17jZYlSjEtokqmAes0jSM4FHCoMEwpPekP+/VuVy/uGnK3XkJwbdMwQIplTGX24UtjUjEEan2j7IKDrIAGbdNksVwl55JzRiLTObs1AJwJwgikVpFfSjghOma1qipz627OOLrQrBbbmOMwpRAaJvJNi84JwM8VIn4Vy18QkfILhGwWiCB2IXS9aY3jeLHZLNer6+ub87OLZ8+fipQYh6YJSDaOAymIQZ4idu1hiFOMUykXZ5tT2ku9jLksup4Ij8fjw4f3V6tlaLhf1BlKi4g5J1XzjSei+UbFFJumIUQzFamlpBCWZtK27jQkdhh8qCKm6hwBWNe1MU0GxszTNL2Ud5gNY7lUrYbIrlSZTimJPHr8LMYo1W4OgyDujicBqDkGJk/QdS2yMynXN/u+a4FczPHJi+fOuaoyxslhqBI5mPeeHYHKDPx1TCXncTidnZ0xMah55qxgBsyuX6wOl3tAB+BAf6ZK7hd+8/X4/twIztJYM5tdANcXd5Z37rx49FHjCJN+vkUwi4HMPQgiJGQAE6tVKhLPwmNZ1BQcQcx5e36+XG4v98frw2GMabtcBc+LxYI878YR2T273kFoHl0fPnh2fbY9O8YRGOLNfkx5u1o/fvw4D8fvf/dbwaTWIgDNvXt/9qOfxJTGKR4OR/K+qjmCTd+Vkjd9G7rgmTvfncbx+hRzdccprZad7E/eYNE0zeX1O2+9Od+a1vsu+KnU4+nYtV3nfYljrSmmEYnimAC5qCihqt3eWdVaK9UK9HUy9L+uYTMABSuZGZiCBkch+ApQkRBAVUx1PqY45wogABogAL3S8lNRQDMVq0WRvMNpOqY4lCnFKVXjh29/6+zizaZfUtOWmkstUmOJucRUU5ZSVTTGsdYUfFOrjOOgVVIpiqR6q3gtqlqzKZQigm6qZllcMFYQtVKydzTrlIGAITARoBS7nfWmKjKHBQEQiHxoYh5TSiE0NNeUX7r+sjKqoDozYO/n/tnZ9pxd+Hrv/1dLcw1uLZdg9iQ2kYv1nQz2/OmT3c31suse//Snj188/873ftv3/XA65DzFKRK783tntZS2bdHqzc3N9sHb4eK8Hm9I85LI1IzwqCSqw2naNG6z6rQKMRLh6TDWmMFZt1z449Xzf/dvxhhb7843y+fv/3TVrYC96xiQ7z58A5fLn/7FDx4uwupiSbU2TMu2hVrG3WGx3h6eP0PTOg2ewDEgmqo6xM7zW7/1HuZaJRaO7VkLVuBwaLvu+9944+56WY2rlAcXq4tVDzlTShcEeLFeBppM96chjeOC3TffuX9nu6xTOjhMgcc0lRiFnV+4mkvKJWctRZAAFBDRVF/qE71WzvkZjoWvbXJfg9DJ1z1+Mzd+neYGfpIV/2JHJkSRAlYdEzunoiICot7z1fXV0ydPrJY0TjeHY7tcPrz/4M752bOnj+ZPUks+7a+57QWhKnRNQ6pSstTqiApUlUogm0W36Rpn1QjilKrUrCpmINWhH06nWKJ0DjoyLWpDzWk63Cw3m7Z5yywcxxMBokItVVBmsl4pNTSN5hqLOBcAKBchcmkc4KXGwmxvNn9GQNO5cgtmSKpopsykqqJKRMSkIkCzFrpOcWCsF+fnBHaCyuybtmd28kU+gXPYXgNFf/Gx5IsSpdtf+wW65GgIiOhDl+L0B3/4h3/8n/7D//L/88/vP7jvXQjejae0Wi3Z0XE45lIc0hQjE09FBMpuf0wlK+DZdl0ELneHy/2hlhynmM1CCIvFsvGNqnnPzNw3PueUS/XMoqpIYFBqnbG8wXsmUq0h+JwTgnnviJANQ9OWUmKMahRCM091qVWk1Cpz1osK1bQK3hyvr3f768NpKDVX3e+PudQiEGPOtSiYqay7NoucTkPftaZiqjFOq+XSB3c4HWe9o2mMiELON8hNaJjQDE0leKdm0zQ9ffo0jxMCoYFjn6Woatd27NwUowGjkoEi2OczWrMv+OanAv0LjNeRvwrAjt98790Yh/2LF7FWA/b8WSNuBRNVICYAEQVTZBRRh4RMZlLVAG0Wz9jvTqFpcq61SNcvQtu54BLwzdUhlSIAp2wgOlw/P0XxUx2GnMq02q4ZVPMQ/OLtd9/oPTnVpl+dxjEWebBdg8PTePJgWoqV0q+X6TQs18tV0/Zdo1W7dScAyDhJnUpVV4thSyyW8pMnAhgIAyMaLLtuSjeiNZcySwRMMaaUQwhzMVfNSq1VlJwzQnL8t/7W94pvf/LBx0zua/T5/arj04IYnyx6AzAyrCKSE5gqQKm1ljRX4REds6/IALficXPl/vZDayEAcs6klqwlxhpzHGPM0i43i/WWfIe+q4aiBqpQ8+7502kYmUhKJYOqEnMursQp1lpVNVYVwCrmSAErM5HjHIsoVrSUiyD1y94QFYB9YLp1CDIwU1NRMROVeQ1WUVE1oxmiCwY6G/zyDByHWqtWMfuEDMJMCMCA5Jxfrh689RYy3XbYvqbxBWnuzz9r3hYoaJacNkdN39+/f+//9+/+25wyu9D48OyjDwGpjKm2pU6T5CK1ApLWMk3TnTt3EMQjai7bzbJ3dHr+0enZB745dWJHIWqXj3/6/nGMy5aziQF4Js0JEJBQan727HGMBVwQdMflero6nujEDL5xvukE3PObaz3u1t5czYG5Cc57F1xg31itpElKIhOH6BhjycRuERoyDY1zy0UZvRUBg6ZbAMK0vzl7+Eb/8P5qc/b4x3/ZnY46DNNwSik2zu6et+drMoN9Xl0fh2XjH27awHQA8wiMoCmXFF1opv3+eL1rzs5zNTPUOiuDgKm+QlK+dv9v0ZOv1sxnA//XDsz9zdz4dZsbX1BAetXsfhmz+e1+obmEAIiktWpNVUikBYPxOMZpurm8juN0GsaYyiRyb7U6W6/Xq9XVpWtDA4gpZwaZjruua1MqkNrLp0+ePvp42TpQCw77tnHsLs4uusblOOUYcQREHKYYTUSNtJaajjGljCZSAs8qAI7zeNod9g2GztT6xaLkWkrNeZzrBK5tixqwYxdSrrmasi9SDayUqmDIVGU2DSURJebbVBdUlQAhOIdohMzkilY1mOWDiRgRquZnL3Z9g63nai11i8XZHQR+qX/6qRU0Yx5e2UG8zFc+W9O119JfhBn+YPASBmE/G/Y7zxoAMQMk1/abwzH+m//mT7bbs3sPHnz84Ufr1erj93/SLTrmdtEvx2EyzVWrEbPRcZjUEAHHMbmQd4dDTNXQhnHou/7DZy+C8z7sAMw71zbh7vm21gyqhOTZOedHVQQL3ndtl4YxE3nvhUs2HcdRVdu2nV3mYpxs5sIUdc4BGKErUlUFmULTHIaTC81+fxqGeHWzf7bfHcfCLpzGQQ1SzillRGqa0BG9+fANk4qq3vlaCzGpiqqYFpWEaCmXkgWBslYs6oNDUO8bEXAhqFqtsj/u1Kz17JvgTELgYxoNreu6UmvWauBAb2tVn8GZvEpw8YvYoq9+9PnF+LlVJvPMmIERBtAs19/63u89Wz0aDsecy83u2uZ+AtxilYAAmJDQAJgRgFRUpFJwpioqoMqeTNWUS6nV4DhGMbx39/6UIixWT272+1MmYvDOr7dxSkUKMQ+nY05ptVo5q+ctrb1uWsQyLvyqc/1qvb17cRFzenjvHACebXrX9PvDPk7x/v0HtWrj/f2L7aOnT1jq/vLKLZr97th4j2CmhutlgvIipWW/GMqjBu1b77wVaLa9kDjFnFRy6gJnUaOg6JEl11JsXkdiYugg17zdrv6H/+Af/d/+H/+vF88uHbp5j4PPb4y/zHnjM7/7JT20z//qZ76cyxIGaGaIJIqlJAYN5IAUrSD6eWlXmUkBc15Isz5tNUGprOCIkUik1FykaBqTCDSL/uziTillGncuUBW1mjWedi+exnEaYw5tC0CSIgCKYp5KLlqqqUI2OBa9mWrRsll2nUPLUAUNsKhlMQcmNWt16rjkCt55srkAkFIp1UQsVRGAalAEREkNiwqwY4Cak3fsQlD9hKsJAKamagS34tdVFJnuv/Xmw3ff+RpRufP4ShQ0uF1diAjEm7PzXX3+8Ycfdm1Ta43TNCGUmlMuh5trBmAARiwpi2ga43Q6Xr14niVtN5vf/oPfu/fgIaM++uGfiBRHz1wczxYb4eas+87+8llNw6pr8jRVsUXf9suuWbTow2JzjuyH07DoF5biTk6H3X6q2vpl0/ZXTx41bA1rFvTsGueD8wjIiCE4BrBSoaqK5pLNTKuYiHOhZ3e4fM5NG8eYToPkanAjPoS2pf1QyY9jXfSr45OPA5Pk7AFCE4CtFBWzooVWTeNYa52qTlOcrQgFMcfUNZ4MybmYZYrFOz/rSgIA0CfSXZ/pbf3VSoZ93eM3c+Pf+7kxt9OYXa06DclsP+V6fX1VSzoNcYxpSNk8N21jNUpOje/G4xE91Dw9/vCn7fJ8d/ns7OLe1fH47MljtJJzneLQdW27XGy6zcWdB/2ij8Px8Yc/TnqdU1TTmGvKVYjBoFQZU2EDXTiDxlRLzm3wU67L1abtuxIjMs/yFMM4smNAVhPnvFLAIiLFAEotVWROO2ZmxJxWOOdgfryozmmJmlYRJiAicmQZECGEEGOsIg7BccjFLm+O682GfLe5+0ZYbQTmDt2nEt3bp93LuuyXDPo6Yks0U7jkT/7kT/7H//gft20bYzzuDzNR+nQ6bc42ueRAVKsWE4JyOh7X6/Wz691yWS4PR+d9yskAxPhqN5ia96Vr1cByjqby+PmLNoSubdZ955jGGJsQgnchl1pr613OuUoZo7VtOwu3AYD3PqUkUhHpJe7cci7ek6pOMXWLfhjGXPTquH/0+OnpOBnRlGqKk9mUZ1MJokUXNotu0bXLvt+uV2kaNutNCP5wOOScEPw0jTFhcC5RZdKCUmoFJLNbYxDvuPE+52xGRXSxXLVNm6YTs5sZWzVXx67v+pvjaRY8+cJiodlMScTPNF5+9WEA1bDpV9/49m+byIvLy92/PcyQcUKyW4FeRAMmVilGDCrsnNQCL1HdTNSyY0Q1FEAEFva+Ce8/ebpYbZ5+/BQQuOmqGqDb3eyH05jGYd371aoPWDonweudtx60jpeLxWa9duTIOQXr2na1WRHRxZ07cUrDcVDVpvF930/TdBpOIbBo/unHT6+f7VDS2aLPKRuiKAxZq1Sodph2V4fhfLXk59dny5ZFfdOaKICNcfTcr1brw+EwTlMuhYgMoKrCS3MuAPrX/+q/ee+3f/fdd969fHZ1uz3e3pe/IQSW14e9NPj1wasxIpqoyuwefrtDIKAzZAEkM4ez5ovNBh8xJinzaYUMbblcL5bLq2fPrx9/INOBfVtLnsbjaYg3p/z0as8hnq2WDXjSUkqtaqlCERKDm6Q/ebp7/9lOgTqPZy3fWy1d8IjGxCLAapZjQStkRI2RETLN6rgqteSUcy1SS61VFRGIpIghweyKBupcQy+fYrcIZJvbIQDzkZpQEAD49//g72625/B1P9q+IM39+RCi24qCGUBR61bryw/ej6Us1ssD2t/7+3+fVTmPy+16HI+hCW3XuVsLgMoIJY7PHj+6/9ab9+498P1yN6XtaknNAimgKtdU9peKIVfJKQHA/QcPbp4/y3EKLqSYAOpyvcI8NP2CG9I0nA6H/elYDNvNhTo3DWNPGqexFiWgvmmZCAGaEELbuOCAbOZeAAJ7D7U4ZqvVA6hpA5DSUIochzGeRkIKXafT+NHVNTV9FWU0BtksewfWdwFAjQBBT+NIVRvi9XJBplUMiNSwVEHPJUUsYSrVmnVOhdnp3P38ZfbEz/KHPiHK/zWN38yNX9O58XrgXlWVfqnQv/bWKlKLihahAtX8FKdpGkXrWNKp5N04LhbrkvP11bNpOOQiqaRaIMdiN6e2P3rPzz94f9YIJ0dDnkRlqro+u7NYb5q+nUm73oX1Zvs0PqemQ3CShyK3dF5DN1XEKSM7771KrckA2XSvIr5txIyYp5RiEVJTAA4NsXfA6/U6lt2Yc64FzKYpqplzDh3Pn29Ws7LZFnhmdM3aCwCgVuqtkU+tNYSQchZTchwW/SnXdBwfvPNGf36vGuotWfgXutN2m/y+drV+EtZXPb7XK76v15Zef/3ZQi/i/nj4D/7g9//4H/zxfnd9dfnidDxuNttUEgBcXl0S0RgTsMtxrKUo2PpsezMcD2Psus5E1bCUAkg5S865iiz6AoSlZjAbU2mapk9lt9uvln3fdgRjE/yia2stkckzOyZRzaUgghmknHEmMt5+FvTexVMCBEMep6mqleOQSpliubzZncZpjFOpkqu0IcyGLI7JADar1WYRVsvF+XYbnEO4YMdVddn7aRxzin2D+1OyMTKm+Q4TcS6zS0WtOWPbsmNfNXivgCISp4mJl6tlT9Y0bUqpbZq2bcvNzS2HHABf4gu/IJQ/A7Tw6qcvw/LZ0uDPLM/P5CUwAVAzco6ZpX6qLYOGKqKOAE1UQGG2DEAiUGNmkCpVXAhAnMT2h4NfLG72xzHG3VTJ+/V6c7W7NoFSZYqTlrJwdG/Vd54Emya4s7P1dr1iclXtFGutiYFBb4L3d+7e6dpO6HC2Pd82vaoa6HE4TnGcUt4dEpD75jfeI//o4s5dqfXJkyf9en19GqaUOTToEICOMSFHdxiyyDfeuHfKz8o0VEk++CLl6fNnXdcVqXNro6pVA88OEZEdIeVc/uxP/sy3S0aymfL/VZ+NXxKRXz39QkRAZOebxRpcw7UaqKkamhqIKjkCJFUoBgy3r8Fg3nZQREVLznGaahUVI3ahbUPTrLfbj/7yRx89eqHIXd+ryOXl9U8+fHo1xG57pvr0m28/vLcKKedcrRgaUiz6wYtxmOTuovWgi+Da4BUcusY7HA83DVoAx6pWSp4mBXEapJAjziVLqapgClI1lRkYQ6KoSOx9vcU2INNMLwEAMFW43aMIABFZDCtgQfqDv/sf/f3/5I+aplOgr/do8tWwuYg2e0ijAJILnQ9Sco3jdr3+3/yv/7f/7L/8f/+r/+qfLRiL2Or8rGvbw3AidtMU1STFCYgcuccfPzqOIxJv+852L158+JOuHFuSWipSbtE9n07DGM9WK++bNvQERoxkkKc4nMaqCuQPuyHmooSemkbqpqeV99eXxx89foHUfefh1nsOPrBjYBJT0moqXegqwTCNzvkQGjOpIo5ICTfOJ2JyWIR2xzHHqdWyXS2363Xo2tA0MY6Xl1ddv2m9a5tgoFJr1QIIbeuLqkoutaZUaxVDFEN2LDljKTEXbIjZz+3HVw+kn7V4fr1KuQDwm7nx6zI3vqTr/fMCDCIyluzQSZqmLACYpE45nUrel3KsWsZyM+bD8WCgYkDkPTOrdK7Jsmec5WZsilERBNT5gK4BaqU8ff7oY7aKoKdhqoD3vvEt9L7b7eNHH9RxRFQ2W6+WZ+v18Xh9fZoI4axr0GAopagU0HhdmrZt2q6Ijik3bQDCwEHnuioaAnrvFG06TuwcA6SSZ2NbpNtq3FyVU1UwUDM0cMxwW4mwuZRLRGGuSoJhCFrLfkqLLFtDA0B81XpD+lRre2bG/7wA/TLBMTNmtlsu86dcXRDR+2a7vXj08cfe+9Px0Pdd1233h50BXN5cnk4nBI4xgooaGMKPfvyX7F2tytSBVs9I4GoVRnBMYDIMR+f9fCukWE4lDlMbOOXc+skRLha9iqZIXdN4Zu9Y0Uw0hMBMRCQipWTn2DknUrOoc6xmeZpEdX84xZhiyrVIqnUaJxUhg2XbkPOARoBqulouz7br+3fPFn3HxIu+N9UpJVZhIlMlsDRNoMqAjh1hkSpqxoTzZ5FZsl7Nh5BTAuS+7/e7/Xe++608POhA0zTklC7uPgghvKLZgCmgvrIfeLVO/6p6LAaEaghmYKhN40MIQxzJzMzoFgYxC0aJqUg1RCaAxjmpoh68bwxMpAAFBUi5XO0Obpx80xBQziVPaX84Si2rxarmzKqtp4cXm2XnF8F3bQfEavVmP6IL5JxvPDgngCZYjOpuQBj4xc1qcXX3zh3HNAzDFGOcRlHLuaiqOn//4YPtaqUlbxYh5qJaH98cT8PYN816vW7aTmrZD+NxGLrFkskbcsxx0fcIsFw3h8OhVmmbNteiBs57mJl6aooGQNOYYhS83T+/5iB8ncOAnF+e3fX9Ok2jiWip2AQwQEImhzQ/QlFN4zS2bShapBASpFqlSsk555yymtm67X3T1lpX6/WDd37rRz/68dPnz0t90S+WjW83q1W32gi5w7D/4Y/+on7zXe/CzXBgFwTs6mafU3r3zmrTchyGqlQNd8djzSNbXfXhfL3ybAYiAnksTiq55ENw7IiIiA20FMm1qlpVE8BqBo4FsIqYoYGpGPnb85+o3qqEkBqACD689+Y//J/8D87P7333t793ce++IcMtkf1ru99f3ewXAACpqqD3Td+WGqdxPHvzzkd/8eP3/+Inz588f+uth8vN9lvf/vbzF5fdYlnqfowTEpZaiN2Tp88ePry3u3oRj8cTwfVPf8CnS0JpVt1qtVKkXOtmvVyf351yLTGrgLPceGy9r1X3UzrGpKaoLvT9er3ovD9btmcLn4ZpzJJF7yyo8bPyHBtYUUUpmgQQCcg7R4C1KhE551C1SPWhJbCY5TCkscjq4t7sRltvDsM0LdfL1br3jh7c2xIKAKY8FalxisM4plxUdLXZkOecUoy11oo4n8b0Yr1snENFc8HmSBMBgOpMhMUvqwD8Oo7fzI2/2XPjq9d0Ecn7ElVQi4gAlqJTrGOuSWjIOlQ71fTBblAphA6Ruwa6UIPKVLT1nkHMVAxizkUtiwBMQPbiZofIqNI4QpNiVjmciW02mzHGmUyGqqgVanFMbdtP4/Fyd5DanvfLKjmiUU6EPKZi+2NoOnQupkqOq6UQOgGbYgrBS6m1RiJStVQrErFjmiWKTfhVLf0V2pIQEYm5FpkTSu/97N3FTA5AARUQiVIqOmummwGYIr4qwv5yAfolq1H20hHt9ZjO4Ajv/T//F//8P/77f2+apu12TWDD6bBeb9T0+eXzpmnGIS1X66urFyal1oKgUKXtOpDCzp1ttyIVAEstMaWUUqllGCbHbr4/ROzYqWjJgpKSmRnUXNvWxZS9c0Sz0yh4lwGAiEIIIoKlioyzr2+quVbJKdaqY4ylakp1HEcgJud906GaqpZaibDtu9VysV4u+0WXSt0/u9QqTDjrGwFCipNDAlMTA4W5Y9NUKVXGGF+2+62WklM6AfSLPqfsfBNjjFP6+KOP7pyfu5KePPooeH9xfo6ItRSEVxCXT2Anfy07N86nIyRu2q7tutP+RlXpE2UxQAM0IGY1BUM1yVVBofeLmiuhzmhydDyMk/dhPocTGKEhWEmFeT615NbRnc1y3TVd51X15nhSZCR0PngEZvQhAEAp1TcNIkURE+mdj2LPbnZEXGutpSK1ymYuBPZQM7jp6vpIOm3Wi65tS9XLq0NMVVx4cbXrl33btPvTyTH/2Y8/uLsMy8bnXESH1aIfh5MCdIsFADjCYYqBCBE985QquOB9o1WH6WC36gt6S2D4GwlaAOTtxYOLh29/fPXctEipIdzuyLcdIEQmApVSc+tICY0JFBGglJJzLjnX+bzGLuVChGi4Ptt+57vfXq663W5vSJuzi3tvPHTsvA9XN9fvf/j+h09uKodahUgRMTTLb9+9eHC2hlqOh3Aa4nFMTeBlGzb92hMwQlUFVGBC5JKLFUliiGXRdaCaYi5VEVhNDFEUxbSICs1PrxkLhggoJrd71OxRBzD7eXzne9//z/7x/5x8A1oB2YwA4eul1/8iFLTPz5JbXLwDM6DK0J1tynjofNiE7uMf/eDm6rEPTdOu2m7xwz//gfeNc15Ma61E7NkTk0P58Cc/WnZdPu2fXV3q7nLtqut9LOIUFqt+oXXZL6xZfvzi+vLmtOi6mnKVkkQRaEw1NIvVYtEQMMhy0Vw9v+wcbBd39ruTA/vumw8DGM/3VMzMfEAChCpWSo2TAIBoKUlMmAO3Pk+RxMwRt8uP/vKxOXxwsV325zenfn99c9gNT26OffBt4NVq0TiHJkQoglOcQtswsWO3Xa0V9DiVgEyAUkvrm0J01vqK6MKizk3XW5rIy17ky8i/Dr62nwvfM/yi6PwVjt/MjV/TufEqcD9r0//CPt1nLr4tVhGJ66o4DyKgKcVcbIgx1nKM+RglFSLvsgZCfnZzfTOmvu/furPZtD5YnaZouTSeUylDikagBkVAySqWolTVyNQhgCoSf3y567smBGeAsUgF88HVmuM0tN755WqM0/PjqOY2XRvQtNbgLLjGqpWSmDRmFcDFcq2QxSCmDEhxHEqMJWdygYiAyIBUZswNGhIRSRUFBCCi+bMzADrniAgBikhwXmcSG7JalZk1ptGBmrIRzlgD/BSoAG7D+zlijL685JNvfeaK2/b0DBh++QLwFRcKEecU/FWyO7+DgoW2Wa5WH3344eX19Xtvv5Omsx//6C9SSTmnmFITwml/KFNkgsB+seiCo9b7NvjG+87xYrM0QEQcp2lKKedc13UGMIiZiAECqjLOhvV6PBxi8E0KXds0zjt2RFxKdp7nbkDfd8wMs5pFzN6XUmotdYonABaznGtVUOC5/4xmRaoqLBf9er0U0VjK5aMnV7ub/XHIuYqqijJR430zy4SBesQ+hLZtBKCqEbu2a0utTOSYiKkLnkC1lhjH0HTs/ThOAPTs+Ys33/idn/z5B88ur882682yP41xmJIAAc5R/NTa+RkAhi9bpF+KVfh8r/zVSYkMwTUNoCNAMDVCMxCoRMhEampqCkqI3nlPhgDeORNQUPThMMYx57YJ3iuT80T74wSAm7NNaBkMOsbGkSPIpWYpuUipyiH4xp+tWiWOKeaddm2LCHlITARmjjnnrKpFAjM7duQ555JrWW0269W61PLk8WPuuxzl4xfXm7ZvqTlfrgzGSTRLPV1ev/HGQ/Sh61sCefzi+p0Hd9iHueIwTZkRsaEqgsStb8xApRYzYALmpm2mlE6nE922Tn5mNfBLcCNfeOUrBrC93Hd/9UKjmTWLs7d/6/uXjz+4+uhHeRrXb/TctUTMgISOqappTZVAS86N90QUS40xSk4l5lQqedd0LbeBEGs1VQEY2MFbbz68f+9uklpnVWj25JuwWo7DEZz/eD88vTmcnd/75oP799bd/XvnLGW42QEl4xIa3m4vSIUBEK2IkHcGVgDNgMkBgYqVWlMZEYBBDKEAzsbERTWpCZCZAvKskqYmaKoyJ7eoAMSMCPMZbbM9R2YzA+Bb2uXXfWz8Bau5n1l19uq7iJDVluvt8PQxm7ZNAC37m6vt2dnb7753ubvMtay3Z8+fP2Oks7MzUMgx9Yv+tN8hwNVhX6dTC1qrpiqNo0SZaGy6dtH3i9Bit5iqXV9d3Ttfma5yHh2a5tyHTgG6zjWom647Pzu7WDTILsYIBi2ToTU+mFmpNcXigxciBWA0FJFpUp1Ldy+984DIezUjE0vDd996OE6Hd+9vphg7jytPxA+z2v5mZ1o/enoZQtsEsloa33pP5Pitt99pvGe0GAeP6IkDc3BGWUnqpuWbZEDkmNXw8z1JxJeNltfSDPgc8O5L4/LfyfjN3Pjv2dwwRNdEm7k8Wg1EbKplzOWUy1gUyG3WiwcXZ99888GTZ4+fH04v9uOTF/th1d3ZLiWdqGqjIGZRAcwE0HwTlU9Znx9OsQoieCYWWTZh3foai69FjWq1UmoVqVVryZ2jEMJqvX707OnzYRTE8641AZUCSKKGAPU4IjnyYYpTAIilANI0nGKMKScRRTJirqY8c1lQzWymrxExIllVEXXOz+UhnZXcqwJA04Rca5XZM+JW47337p03Hjx+fpNVAdFM6Ta3fZWpzAnop+JlLyP2i1QG8Zbr+QvFGBFEdLFYhBDu3783jkPK6cmTx2qy392kFPe73WqxKTmDmgu+8d6qhDb0TdM633etd75xoetbEVv0fakyjVNVjTGO0zSlGFPS/z97f/5s2XGcCYK+xHKWu7w9VwAkSIqLtpJqUZeqVMuMWZlV/9Dzb46NWZuNWfVMT1mPzZhN19KlUkmiKJEESYBYcs98y13OFhHuPj+c9xKJlSAFVUksOGBA5n33vnwZ7nHCw/3z71Mx0CJGc+ZNJCLjNE1TqkIgwBgiEgzT4JgBoWip65qJAKDkknI2wylNXZ/MQFQUDMyJmKogQQELIS4PVszuYrM7Pz/vhunZxWbbDyLatIsiOgw9ITCSZ2qXNQJ4MEfoHLWL1vuAyDHEyY0A5j17h94ToeE1p5yYFEQcx8lQnr84/+DR41hVt85u11X97OKiH0YFftVx12nQZ/rsV96Dn0hzr19FACCixXJl1zcyuv5BwBCQkBipkIioqEFAZk4peYLonBkTO+cjECHYsooOWZgqJvBuuVx6xxeXl6kK4zD2Bbf9NKQJkWOMXhMxadEpTSpSKA+bvXOMOP+56IhHZudcVUfvAzOrSkoZmTrGnMZxHLfbq7Ozs6LNs0fy4OnzpoqrdTtI6nd9Thmc2+53i7oSs7qqMw9JlIlAQcwODg60iHdeVAGAiMWMiUVN0FwIIcbNZptV+DOAnS+d9GGx4IuyKL58/6f55lcyJEDnT++/+eZv/f7TJ08ePXiQm91p04qYIwSgImICoOKIiihBNrOSSp5yTsXMBMg7t1i1yDhX7w3MtFzz77oQfEAzAUIfVqdn/TD4pv7m6dn43qNtoePT03v37rhhd3x6y6m885O3Q6yVElWUinhGkeyQEVkVjFAUiOanGQGZkQ05GYAjJKQkJQlMolktKyAjEpciaEBMCIYfrjZe/9dmqBW1i9ZUZxKxeZm/jAX+iP31QAsAACAGWrW+WcK+40BVXTexXjTNfr99/Y3Xj85Op6k4xxnJkwO0XHLXdbEKl+fnU79rvNtsryxPKXAsjvtpmvJqtR5twlGP2/XX7987XjTPHz8s5E4PlwG1326lmEppal5UzbKpYuD6cL3thqvdtqoCmKkaExriNCaZlVNE0HtiMMJ5yI+QDOa4QGT2wTkixRzZ3lgsTOvlok5NFTfbI++Mw26abh/eb9rmyYsXq6PT07OTksZpt2tCmCSf3Lo17vurF8+Hfio5IQI759kk9c1iebhaXL3YM3sBQCS8qcl/8Zvl30X7KjZ+/WLDEI04qU6ik+RpykVNDLtig2A2rut61cRFoMrS733ja92U335y+YP3H7z36PF5P50erB2kLiUwRXOMmAz6Sc/7dL7rRzV0jpiHomTUdVM/lXVbBTTvHCKmopLz3M4jokWsmf2tw5NN3132nRRtg6uY+nHKkh0hGLpAksuY9xUA+7jd7adpInYGKKYOQUTFxEwdOecYAMy0lIJAgGhgSDSPqzvHU5pmxgUwK6VIKc7N0q/qGFHx6uIy9f2d08MPHj9Toi/vZPxV/WVmZr//+79/fHTy9MnTN9742n/89/+uib5dLH7y059cXVxUMe73O0YCAmaOVZihq2amCNuur1ST6NPzyzFNacrDNEmRJJKLlJyZkfkaIGpqAIJwXVeGImAoMjLxlCZ25PwMJVAfalVREe+d8yxFzcxUmcMwjblkVcllACPHjAahCk1bT9P08NmDcUr7XadIuz4VJSJORQ3Ihco0E1GzWNy+e/vZ0ycvLi6bKraL2F9erler6LypVrFSTXX0ziGAScnEgMrsCJlSztM01osqpSn4cLxYHB4dBR+6YSpqMxXoS+TnL5g2+xLRhTc2PwqWq6UPTnOZMZyAcI0DVyPCOgQdJrnh8HXOERIA+BAWi0WfNo6oitETV8yxrdH5qWRy0PdDzqmf0qYbh5SKGIBF51WUYphErobsXQjOMREhkYCvXCkF1Lppp6LeuyH64D0AzMAfINxfXRBR13UhhO1z9FW7WqzPXzx/+OL5crUSsJxGQMo5Pz9/gSeniJS6YdxvV41ft5EATTWlzMQ+xFRkzJPO9/w56syQcMpF0Ij5Jb30JzfCq2v439bMVBFcs3zzN/9AqVr+1V82VYtoqd8iAiJmURGZ9QJLKYFDTikNYy42TWJgPlYHR4fOMc7PJmJDQvI6J8hEADjm0q4Prra7Gt3R3dcX732gQN/7nd+vT54CABJMkkWhiIpzE6Bvl6pl6nag4ohFlb1DMCIspRgAO4eIhsCOHOJuGIsYkTMBUcxGCgYIosYENiuGMwHNboJ5ckBVzeYKABBSjPFv+gHpvrjLX3nnRz5igBldc3r27PzF8fHR2PeeuO+7zds/qxd1Nj05OdNSrAiaIbP3PuVc9pkRyPTxow8CgIo413RTwuAXbTMKelWEpFoA4+3795um2ry4kH4PkpdN1Q/jYr2OjFUMwTs1mItxVYyimqcUvGfmqahIQnRgxOgIkTwqgvceAMDMcoH5+QoQggdGH5pIDpSg4OX55ujW2VosUZ9LbpeePamNv/HaWb0+cjFq7fagjh0Uv1wf7De7NI6sQEgpjQqgYCq5jj44VwDNsX24hp9oW35sWN4+fPFXR1L+Neyr2Pi1j41PHtKfrBB/gsMBDFHJFaTJuC9lmLIQdxmGgsiuinUTK1Brm3Ycx+X6qN4Mi2bZrqZR5eHFfhk4EIKiqRFYAbjohmf9aPPzGoANCKmufBtiTcwIznkiU8k+EiGhKSDyPIMypuNmsV6sHr94frG/ykitUc3E5IFAVYtBiMFxELHdsMulFDWRJKaAlFNWQiAg4llN1+waHKdm5YbEUlUVMCWZf+3ZlZyZGRDHaQzeA85aR/Tk+Ysf/tVf/tE//+dtHfZjJqSX9KavrvAnV/6zLjP4YSX4U+zlN/+s+SdVWy6Xf/RH/+zi4vLJ46ff+Oabt27ffv704W5zRQTeue1+33Xjom3btkaEUrKr4pTymDOPfhin7WY3pjSVkkvJpcw0a6UoAJqW4LBt6qat6xjNDAGCYzOFnOdhODRjQs/khCNaU8UQagQDtRB83dSmkMv8j2QpBlhUSylFgZEMkR2L2sPHT/b7LisU09v37ixXB/bTt5+/uHAuHJ4eMztmMC1PHj1s6vi11+9XjsduP+XkEoXgh2GMS0+EIXgQWixqJJumyeYBdylaihqYWckp+BUir5arW2enq+X66upq040ze8a1NusXqjl9JAn+HDjQF7c5eJq2rep6P23sxvOGeE3yjERohFBEpQg4JGLvvakAQt3Uw+OnhOjZqWA2YKchEihNuQwGF/u+7wZVAAE2WC7qk8ODZVOt6iYyrxfLo8MDxw7MQgjBeQrXGW1OudvvS8mI1raLGCMzE2HOJZfc9f0wDKa63W7HftNNo4q9uNo+u9qxC0kK1w2AllSmKTvAiuD0+KSK3jlXcg4hBOdMzQyYnaapaEF2oDpfQV3wM5WVGvCvtrKfsE/66HpM4hcjxr7Qt4e5Irs8/u4/+Kff/Hv/ELO8/dZf/ej7/7lIYeaCjAQqmqAYYXaSx2kY0qafFHG1WhydHLd1nfI0M71kAGJi9kiWp3S126/WB8quWq7Lbjjfdoe377/2zW9/8MGD0Cx+87fO/vz7fwZcgfcZQNTuvfnNrPDg0aOmWk7TUHKZ77lkxt7PKNupiIIiYvRx1l4BgX7IQOqc13lhCAnQ1NRMdW7qGojhjciRiJoZXT/FxTl3M9j5WcroX4J9XjX35rn5Kc7+yG8BMkBYrlenZwj46IN3+24X1ge/89u/Laqp656lR5ZLyRmJKucAAImKZDORnKJzLMaOKYkRDc5+/s67r43lW3dPl21VFJiYYrU6Op42V0OaImGMQYt45Cp6JGZfI7ksajqacVItCqyoAFMqYyqRPbNDmAcPHBIXUeccEnoDyFm0IIH3jhgZ2RS1GAh33XSEuE9l2SxaKFMepzypCBOOlxdxtRzFjm/dUwA39JcvLm3KwaCIFJGktu/HMYsBLtoFhzgUSIHmcQywX4ywJqRPrRb8bSjpfRUb/93GBgKS86NqKtIl2Y9lFBwlJ4EYW0e0Wi5jVSlAn3KzaEeg9ekZPX7eLtt1vRjHvt/uJqZZpse0TLnsJ0EXCAFsnohnRxiJUMQAkch5L2UyM0SKTYNmoWqLGhHFikL0fU51FVpb7ru+60vjaBVdFVwRKSXpJEQe2JUbZtNpGJC5aK6cNwSa27nOl5xmhgUzE1EAIESFmf7mmkOKmInIO1dEEIDZIRAAF9U+pasuvfveu995/I1F0+6HCZAMfvXrKb6Swn7yS5+fAb98W9f1//bf/tv/y//0Pw3D8O7P39vuts67VBITMVPwfqBprsiqylSSSEbAccpX+26369VwtVpyrLfDRhSIGBCr5co7LnksU79YLasqXF5sqiqC2TCOVRXAQEEY0Ts0QxNFMlQCM0dYhSp41y5aZspFSnajjV3ppzypQS6aixJ5I1/MxmGc0jiOCYC22+6NN177+7/3u4vlCsDSNIZ69cZrryOTah77/X5z8fqds82zp5dPHldMbdWoaXDOswMAVUmTrNvWkUc2C2CAKRUlGaYxNq33Dhk3m81quajqpq4bM7u8uLrc7oohEwEYgCKA3tBufFbOimZ/EwP/BsDEVV3vrq7Q0AgAwIgUTcFmhQi8ntQHAFRVJHTsyfN2u5vG0TkPZsVIxNiQkbtp3O66sUhTN6t2cXyw9kQppRB99K6pAgM6cm3TxBiiD123R7AQvYvBh4gGvKJFW3t2ogIAdV0zMyKKKDtXRIa+jzFOabra7jfd/vDi3Dn37PxiKrIbBqZkSIxoOfnKnR0frJragRBocEGKcF2Dat8P89+NnWMfckoGBkDsPDLPtBNg19IRX/rKf4lGQAimCAiMXDkfXYST2/fjWz/U/SUyz/cWAgCgXEo/DFL0qhs3Qz4+Pjo+PWmbCsQQGBEAuBRg8inLfhia9YFN5tpDHafV6nCx6fssY5bzzSbEKtY1xBhi1R4ctSenF5t9U4fjO3dd1fz8ybOwWK1Mnj18Hx0tF01T19vtjpwXNAUcshKRjJkATJSZgw9j1qmU+QEJQGTXOa6aMZCoihQUMbuZKriGs5sjYsdSRFWZPne9/nr2K8lDfKLYI2aJ3Bvf/s3jw8UP//z9br/7nX/4B//yX/yL/+X/+W9SzqvV4SxTPk8nEFMahqlMuduTKZiimXdOpaSCkrEKVR7GyxfnrIdDfrg6y1O3qx0xWnDsEBdNG2NbpsnM6qplHzmEcdfnAqK43fUgihUD2ThlZq9mphKcd0QqYuSCDwZWcgnMxRIDmaEUUTGBDOSIvCEs10s1vXXvXkD0Kv04bLv+6uoKJ4keJJej41uuXsUqGJw/efr+7ukzKtPY76eUpylfbXcWKseuCqHrc0avMMc1iH1iMQE+Tpx583X7LDb5vwX57sfsq9j49Y+NGWkF1KeSDbLhPpWxiBgUGU9WyxC8r4Kva3N+KHp1dTGCB+aDw3Uh3vcdx1gFT8znF+eMPni/xEoITAVUARmJEIHY5TR5xFCFOjpxYOYJMefsEF2I3rkpJ1fF3bAfc3aEq3qZBTbbTVYB4lEmRwBIxUQBxLJzPEsSABE5hpJTycjsgB2iSgk+GKgBqHOANqVkBswEAGoKNxlrEVERBHDOGaJkLVmSyH6clClG/+zpo6M7rzGhflYP9QutNMDNyfApJaTrEcVf8E0IKZc8I2VFJISwXq1/9tOHu+1u6HsVCc41VQRTQpzSRERlTEPf77phP2Qjrqumrlvn3cX5pYoC4be/893Dk+Plsr06f/7euz/73vd+487tW2/99Oc/+tGP6lg1Vd313fwDMlEuEJ3HwCamYgjWVtWiadumqhetc34ax34YtBRCC4GGsaSUiooP3hGnksyQXcwyOcajw6OhG86fnYPom6/de/bkyYur4enjJ+1yMXS7NHX3z06Xga4urg5X7eHBQsx2u847X8VoWkSKd05EckrEIKYINA+Dzw4VKVNKTnW72ayi224209A/v7jox4Q4Fwqv50HNfuGt8lMmDb8EM3Pen56dvXj2bM60EcFUgRGRDQDQnHeUSxEhCkRoqujYe9cPvYiE4FQUkZCpGOz6SYGBPSl4R4ERITvnPBMCkBYTcLGu6xqJxjQBIfkw5mLDyCXjNMQQvfNKqCaqIiqpV++9914NIBsz9SUn03Ec+zy56E6O16tVPaYJ2L31/uO3fva2mEbHqyrev3V8drzOw5CnZIhoDEBd1ztmZE4p+xAFLOdMSFmloCI7Ila9xrwjvNSP+1tqeCNyCKYGCGoC1CxWq4ODq36DxIBcJAUmJkA0kbLvx4td5+r24PgwhFBKMkFiz4Qu1FawWayfXTx3zaI9PO4E+6wnJ7enMXvmo3bRNDWw//m7P/vOb65ngo533nvwjddfC227XC2qut704xtvfvNnb731nW99w8eGraCkZdN0yXKR2NZ935U063lgDK6YmAEjqkoSC959SOSGCIRAM2cCMBEzqwJAuU5zVQAA2TPzrBeDfw2e419o7mOAFXu5/i/P1Jf465sX9QZyRDdfo5kXsm6r9XEI1fHR0T/7p//k3/6v/+uzJ0+PT45UMjkahgEAqBAXFinb7a7fbg6ijy4AJABRsN1UVsSHVQwwmtDV5fn6EIfzJ5MjWq5YLVYNofVTilV0wKpCPoaqSaVMk+4GOb/cDMPgvSMuCLYfBkJwZm1Nkocpg1/UTWxC1WDkcXslJTnmKeVpGs3MBzYlQQWYHKBzrKJHx6ea8rTfYWTV6id/8fabd46Lz/urbrE+6TcX0xavnj+VbgelTOM0TimJGJgPMaFzJCz5are32ETncIbl0LXu30tPXPdCXulmzoRE8xdfTW9e3lPtb/ICBJ8AM30VG3/nYuOTBAt/TdzLzWVcibiqmzRk4yI4CoEaEmPb1iqiwC92Q6imRdu4ZtlvduRDxf7Ri+er1QJzCTHkIpUL66aJwT189my5PsxTgiKA4L0fx6FybrFeaxrbth3HsVk0/dg7pJyFvBexDNkIMKtjh6BQSp7GKgQ8Orq6uLxKGlAClMhcADhWoqZlLsKJmXkiIs5FahdqH+bJFSkJ52KysZaMOIMQ5yU3InbOIRoiikguhZkRyBCK5KHIkKRy3O83FRPk5BFGNaAP8davruTHXvlY/YmuOTaQkAARkQDx5b82xwVcD33P7dSPSA0B3GBAgJgePXhYUk4pPXv6tO92ZJSn1Hc9qNZVdIylFDQTATUUwV0/DGP2zICINkUPt26dDn3/9PkLIldVbV23+2744OHDu/fu/cEf/hNU6YZxt7ssY9lcXS2XKzHtx64fRiJKXA6wiYu2qkJTV4u2uXvrtKpCXdXOu67r2+ixpJwaAxh2A6gAQKzCOOX14dF+u3/4wft1jHUVQ+UI8f13fnbxpGqa5t7JwcH68PXXXj89PhmH/dDvnCVvctRWL64uyYd9P0ApzK5pKkIL0REAGjJT0UKGZaavBzBDMppKEdXjgwNUu3jyeHn/7sXl/unlNhUjJAAR1S+C8kRE/XTRUrzevtc79+VGflmY/whm6dMQLGAAq8NDDD5P06woDahgTgVgFrxRMYVSNJWyDBFUEKiumu3+UlWjc44AiJA5iSKqj+Eg+nGYxrEnBM+u3+89O2QK7PIkTi2rcIipsMqE6Dx5K0VBPIU6xFjXc2I5E9mKzESqoKAiWZOkPJmRaELMQ98TIYFGR6Jytq7Gu2cXu75t2uPVoo3RI3EIVrIYKpJ35JmLSAxhSBs0YOcRWXI2RUUmVykQgs7rZdfk1J+ygF+CfWIz4y8PY5gPSrvOxQ0NgMxXcXF4dPn0gSQGDlUDVtRAmP0wppSNvTs+Xi6qQEZFSVSrQIrOL9dHB8dFYcmURat2Ffvc9VPxHgNtnj/FyxeipVqukkLXD5UL3/32d37w/T9/++13js+Ozu7eNeLY8MmJ/P/+vw/u3b19581vDt2uCWEc9nEqZbsPi3o0PTw6Or94YYChWQxXmyKaSzGTrEgCjknMChg5mr0gBgxACGaAxABkJqSmZkSM7Nh5ACCkL5Un9+P2q4+gfWy2ApHGJFPW5fqIif78j//jX/7pn1RtI6vlCCOYpZxoRiQzI8KybTwo5RHUvKPAjgFIFcEYjczMMBtOpSywbn1wZtt+atpmtVr0240H7KbUNE3RhAmm/bQ73zw7v3hxdbloGwOKVZNTTnmLYOQpq07FmhhcrLhtsV7zsg2+TedPLO3RQMW6/dA0NSEWtF2/88zLtm0Ey6S7XR8pVE2A/iqLxuW6WR3+5Y//3Pv379w+HcehbC/z7goki2KXcSw2ZikGAoKm6PzVVKD2M13UK+wwn/ug/JV989/avoqNX9fYmOddDJCda+tmLF10btk0kIoatTEu2gWhCflquXi27bhq9t0evW/a9vGzFyXl5enpuO9CFWWcbNaWC/FwfZCZl4eHl+fni6ZWU7DIRKvlahocIKaix83iartTNOcishumzHUoRbOmGGJKornE4EpOi1Dp6uDFdqOBCQwUkMjUfIyAlHJmQCnFxNBmPlxUFbCZ5gad90NKpgpgznEpYteDwtft6VKKc845JyJEJGJmkgHGrCp2crJ482t3VPXq4nxxcjuNxUx/KYfhS+KwL8mI6OLy4sGDDwDg6OgoBN7vL0OMPvhhKFPOoEbs912fRVBgnAZVa+t4dHjoGRGUUXQa3nztjpS068fHjz/YdJvN9qry7n/4R/9DE5rv/9l/+fEP/vL48Ghxq/1Pz56P48ie79y5e/H8fLvdmpRpYq2bGGJVxboOq1V7dnbi2CFiFf1mA9NUj2kcC1TVOBWxnJjcndtHl5dXJU2/9b3vfv2NN4ahT+Pu7Pg4MLd1VcWYRYYk3/nOd0wUTJ8/e2wy5TRc7Tpy2I9jGix7YiYCqWNsm4qZNYuYoBgpzFBBMWUiMOj7vpSSc1Ypy6Zhx10/dOPwy3pDVT9jBO3VEu/LBPeXM1Ot6mq9Xj978nS+nhmAqhZAFvTEhGwASCSiWaUOHpD7YSQmH4IRuhAAIVS1836xWBQzNWMEkxQJ8zQ6JDKDUrxzbCApD9OUnZtnjBCoqar1chVjFJkSGaTeDGJdI3JVRQE0ApGiYAplKhPbJNk0J0zjYRPPzy+L6DzzN/R9Xcd7yxXNE2RE45gckwGZXc/gN4vFdrOZUpr1on2MRHRdPXTsnLdXrh/waUj3vw2TZ59nZj7Eo6PTR6GyMjHzOGQ0YCaRBIBAyN6tV6voPZg6duDpxX6499rXFofH7erwxeUVxeqgbouYqIUqdsMQfBuXy363216eG3L03HW7QjSMw+/81vfeeetHXsWBfvD4yTe/853z50/JoO/Hul1OUtrDNQwhX1wKEIeqXR0cHB6sjk92281+txtFxUwQFdAMsuic8JuBAYoowazsBqozj83cljK4kUSjudz7N19z/5XS3Ju7C94EjgEBYCnlcntx/8277/746sc/+PMyDRp9ScmHWtUQcRaLZ2ZTNTGRcnl+frqoa++8o8g+kLGWVVtHJhfDwxcXq9NT7zwbbDdXb73zSBj/+R/9ExeaklMMdU7F0aSq2+3ug+dPdymtDg8Ol4tAtGgWe+1UwUwKQ1GjGDgEX7fivIZmcXK3avrU7XTsfIyomnMekkjJ9WKRFbd9Z8jNmIb9RjUXZI/Y1vzP/tkfRofbbff11++sIsPucuzHMiWZJin5ctud7wd0vp+FQZgUYTTqyCkxgL0s07z07sdmR14pvF33xvCmv/FxP/ztAy18FRu/NrHx6XhQADN03sPMEs/Q1qEMmg0V6PBg3S6a6MOd1+733fD48sEJnr7+9TeevTiXy4sq+jW0ues9gXNMhIvlwiEw0aJur9LY7bdN9AfLdhx6NqmbxebqMngf22XXD/04rQ6O+r6PsWrqervZDKoMWPswqRo7ZmdYlnF5sdk1dROnvB924qxxzrMTkbEfYhXVTFRUpKlrNSuTzH9bUWHniFiyBO8VCkAxMyJQVWZ+uSzzyDDANQ0VE5ppEuyHFD2Vfr+sq4OD9U/feffWa693UxG9cdgvs+z6kff/dU9o78Pp6enz58832+04dEVkHMZcipppznnKKZdcsqoVUTNzzp8eHdw+Pmwqt2gqZrcfsxr8zne/CexC1RTVzVXFYO+99eO//M//KQ39YdtiKZvLyze/9saz84vtdldEXr//GhFOfQemYEZgnmm9bB1T9Hx4cBhC2LetiXTbzWrRFnC7fTdOCQhXi9XU94er5TfeeJ0Qhr7r9juH2u+38eCg5KyO2Sxg2bx4WIfY1NXZ4aIf8DwPznEV4tVmq2KLtgnBS07B4cFqwYQ55SJFLAxjNrWScvCBQxyG/qXmxXK5CJYAMZWScv6lXPAhbv4zPzRLOb/kCvwl/YuIRGe3bj1/+szgJTszqJqokqABEKGYIgUFNGJgHqdpu9+zcwaQRWIMMXoRMSlWBMAWwcdlKznlMQXHTCQiJWfja768MScxJSZQHfp9v99VfmaUonl803leLtqqqqdpUlVmInKIlEtW0FzylJKK+BDSOBo5MJ7GyTvXEFOomJ1nHobB1w2IELMCgBkimQgz55np70ZIL+U8ibp6GZvmZQX3b26S6W/WDABweXDo6zYNe/aeJiJDAChiCghEdV3XMRCCGe67wR8c3fn6/Tv3X3/y/AWKqgtV46u63m63UkpVx5TT5RZ6sVHs3mK122xKv98jLtv20eOHO5VbyyaEMG626+WylFLF5vT4VlXXZvDk8fPKhWEY14cnZG7X7V9/7d57H3xwdvfe0d1103fPL38wTJNnFtJrnsWb3pKolpwdsZsbYchm129R1XmmBxGREADmZtlnou++DPs408LHhoI/ZvPQA6ohwg2FzOwgUpBi8o/+yR9Wtpe0+eD9h0UkpSnlKZSccwYDZt7tdiEE7/1+3wtgtViISRZ1RIbFOW5CCEQeoPHh3smJ9H1mbpqKit4+Wvm62j571BCBqXNODfrtvig+vupe9Pu2rk9WbVv52rm2qSvvLzdXl5fnlXcA7EPFzoFaUV0dnxy/8Y3Ld991bVM6LiUhEwglA1GjKbeLJRB1w3B1tXFNHdsWEXNO0eFydbjbbmtHv/G1e2bT+aNnoWo3u24/JnAOYkUCUy7kfCTOyNl0kzXVrRKTKQK9upqvru0vdtdHAZofU/X80u2r2Pi7Hhu/9Df5AvAGQyR2wXtUOlguimgx3Y27s1t3T44OqxDOTk4AoR8HBZCSx3739s9+fHh4XPGa2b948ZyIhv2WyDvngvO+rrOOdw9Wly9eWJoqglt3bl1eXblYPx+6w4NjMygqV9vt0fFRrKtQVZv9TskIsB8HDt5574iZcN/v7pwdb/uJgVfNYkxTYehLaQgJ2Tk3DhMiOnbO85QLXNOEOSkSgosxjsMQYhxynrluVYsIzNewUsoMA2AmZp5rugCgZkV1SJkIj1bt124drZfLd37207ZZWE7RcZ8+fIJ/7N7yaW78lOIT4suBs890Gd4oRLz6+vzdVLWuqrOzW3/2Z39KiN/85jeiw6tnzxxSAUAk8oFgRniac4AIDHh8uL535/Rw3ZJqXVVTKc5HH+r10fF2133zm9/YXl396Ic/unP7Vt/tq7oepty27bPnz5Po2dXls4uLzeUWBb7zrd94+6dvRcYqurYJh+tFFcKybZuqWa9WVV3nnNu2uX3njj55MhZbNJWCdWMGlTRNMfgPPnhPSnbMzjEjdsNwsdmtlsvD5SoGRrLdfjs63nZcctnuu36cNtvdxeXlOE4+htVq4RhBYx18HTg4zoxFXC7ZVHMCzy5JQVUz6/q+lPL6669hHrXfAcC+66dcDNwNSP6LXiA/Ngf1Uc/SDUrl83blZ1UiZ4DKwdFhVVdlGgFxvvMaIiAVUzUgolRylgJYDVlErambqtZuHFMphDilRCM3VWQwQGOmPI1tcJNmF4JDFDMkFhVQMgQkUAEBVAAkV9T6rjeVdtGqqIogmnOuHQZmHoahlOKcb+oGwETKLBIy05hMw2hEzrlUhBiXoa7MJtG6ruqq7olTziC5jh5VAYCZi8is/lVKcW5WYzEkJznVVc3By6syDjc74At66mP2mY++L7uuhK/i0AARObarxfrwcnehI+AM/4BrDkdRJOacS/GqRnF9dPrGN45v3X3/gw+A/CQIHBzb0Pf9flc53Dx7tlwfbDfbcRz2Xffw/Q9unR4ftfUw7F+8904t+WS9RE1pTM8el69977fGoUPv7nzt/tGt0+Xh6vD4eJxSEd11w27ol1X19Nnz1frw/QdP3/jGm752SqHoQMyGBpABAJDnMFQ1AGIiT6gAgIREVrKIiCqqXZPNGRBRjBER/0bLur/aCNonnrlYCFFNqqb+zjfe+J//r/+3822XilTEBtANe1VBopQSIpZSRDSLGbKvm9NlO1ycmxojEgKBopXgIms+XbTjlPp+31aOAe6fHTlEy9mYiLHrOgBW1ceb/TtPzkFsteKGyoK49i5QqRbx5ODo6uJy2A/aNNOUSNTx1K59tVgsT05fvP9u3dQjGKKCiZlWVXVw6yD1g0iJq/V+t91cXfrAaySOvkzDomnz0L33s58tiPzxcaEUY+iH7vziXMi92PTFxfMxt9E13vskz7a9hipxEFcB0BwF18zucxnuC+ycl4XRj733b2EX5qvY+LWPDTOr6jrGOO63BBaYDlbLIatjl0t5/VvfzCltrq5CqIh4s9mmqQ+Ew/aqjg2K1ojNoj2O1fPdPqeyOji4eP5Cii5Xi2VdN8tlHrsydCfrVRKIjvI0XG22VQx37tx58uSxqkbHy7Yxs2HomrY5Oj0e+mEaJ+8dGClgqKucyqKtij+92u68UzEJzhGiAM2lJx9C07a73Y5g5qxQuEYjeEQmElQ1UNFiQKZYSgEARJgjYZqmmQASwES0G6d+nIIjy+PJ0eGt27fef+/nMYQ8jt43WMoXf4R/2GzF69/ejPP/6i5DxM1m84Mf/ICIU877zc6yBOe88wRYVMijeBfFIxERmoGJmUgpqa6O1+0ipZ5I6xhCDNbva5Vn7/786bMn904PGa2pqsvLy+dXV+OUdrvtOOWsqgZsOHb9rZOj44ND1nJ0sDxYN21TxRAIKProfACkw8OjYZzGKYUQg98vFhUHj9u9EROaaGZHamgEu6GTqcQYiHnbDdvt7mC5PDhclV03Pz2GYZKiojIMIxE1bb1araoqmAmZOTIGtaJVCClnADIpnshikJSZCEBnR/ddt27iBHZ+cbHr9qJm9EXHOl8Co+3Tj+45x4UbxdPPKR18tkMJDayu6+Pj48ePHhIiqOrMc2bgyJmomgJiFhnTqOIwxmJKzl23iokNDMEcs2pmBAaYKSlmGsUYAxJ1Y8qzeBWRqrJzYDqVooimAOwLcJ7UVLWUkpOaGex9CCpiAG3L2YkjAEBIJUDwzoGBgDKxATgmABfrpp8m78CkkFndtNvNhohzKaqKgDODxzRNM0woxlhMdRYeZG6XS6SP04jdwF4/7hf4W3luAgACmkGsmqOTs+2zD4TZpEhR7z0gIyFxcORMkZ0Tc8vTW4e37p1f7c6v9q+/8XVDHqZhFfzD995HUyazNExXZfP46eJoKdM+g2yv9GBZBVBBFdPGm07Z0rTdnL89dLBYArnh6kJXy36zCY5KLmbWD+NyuUr7q2dPH5/evr/d7C43+7PT08PjszTlGJyTkkoB1XlIV1WLIiE7ZgeaVBGZmA2uASd8XcklA3POt21D+CvAm38Jc/ZKAel6tW9iYy5BzDAKnM9ehFnyBOCG/REBABmxWJlSevzog0fv/PDhs21CLIy+jsxuGCdyIYYw9H303jElU0c4jUUBnu/GUmwVK2fQKABqzppB0aYYPVo20cvLyyrESoOoaimm5MCryDiNF4M83g79mG4tmqDitHhjzmjMZlhFd7hebDaXRXS37ycQJPPTUERyKgFhv9+TGgGoQcmSU9KU28pvr3bjdmqrepfLOEyx2weNTJRySvtd6Tfx4KDfXS4OFmMeLafT9frptn+63fTqrOC64mkY+6yDmfo6hgZwpkt6udovpVo+htN6aWZgL+s016/RzRfmOsCnDTh8ifZVbPxdj43PH5H5HNd/OmLhGiBhCMg+ppQXbZ1zZpX7d283Byd102y32+3V1ZCGulqkNJ6fd3dODhoCAqsge4bVYbtcrybk/W67PD7c9QMTo6fN5urNu3dagudP07JdXGy2vqqWMaa+b7xT0Dz0gajrO2pryaOoaBFy/mC9Hvb7adxrdhWFi+fP98MIxFjs/t27TbsdNhvWzKYAEmKY0beIOI4jws20H4Kpak7BRwTzSEkUDRAYkWcCXWaHyCImlkyNkTx7NRvztO2miunsYHnQxhDc9//iB8dnt5bLxcNH77725ndWtdt2ycjNW2hOgF4RAbneRB9rzVyfyqZIs8baL4Brf5YZgCFmLY8fP2KirtuXcnR0fHR4eLTfXAEigEOadXdVQJnIDMVAy7Tbdc+fX4DCnbMTSdM0Tv3uqmkWq7Y1w2Wz6LreiHZ99+jp06fnF13XBxeWy6VnFFFJBVFLGo/WS7ZycLCsQqh8qOu6bhfNYrVYrQHQgBAJCdu2Hko7pEycCSGJmVTL1QHiNafSyfGRFr04v5jSlIZh6rrdbv/i4tI5do6d9yFEJprGhEjeex98VYUYfB4FtAQfpCRFYselpJwyIhAzqrXNYhTph0FV67rpu27z9OHJenF+ue3GLK+66hcavpR7+lRnXd+pEF9689W3vYrcvRk1fOVP/rAbYMbs79x77fmzZ1YK6pwmWS6Aszg1MRiIQgEO7FIpOEwKgGoApiLIqKpD1zUxeO81ZcdoIszkqnjTVEYmBDAGctET4ZQTGCBaESV2bbXwziNgKVlFDExQQ4wiuRRxjouKmjExIwEgkScEVgVCZi4lV1Vg55beIXGWYlbAoPKu70dk8iHmklNKKiUE3/eZCFLOwIgERRVD1azWgIR6s5FupvTAPlwx+NuJ8XsVpGQGYMz+6OzO0/cP8+7C2IEmRARDT672oghZdDtKe3S0Pr2Vsu72fVW1wzAycb/ZDpDNSun33W5DIObDwmN3eaEl7VK+enGOWqoqrg/Wzaq5ePasTEOaEhJtLy4K4OLgEHbbzQPbPn1UVNF751zpN0+fDlUM+31yl/tS7J233zlYHxQjXzUGBXRebCzFiHzRIqrO2UvBQGYiolkkkokIkIgEDcx88IvFcs4kPgSq3zSCvywYw4dp7if35DV+4hpyfj07j5+GoDAAAtCi/+Z//r+vlu0//Jf/4/Nnz7SM03arKYdYkw9HJ8fvvv02GJhImsau3yHzvh8vxrEJrpt2KfDx0UKkdCk1oY7BocGiaRBsd7UrNORpXK2WBJbHUYuMU9qlvCu8nYqqMQOBmDqZikXPsXXN+o2D42nqhrEbpgmY2jaG4MZuB1ouHj3sLs6H7ZbUtEjJSsTsAxGi5WUTvEhRbep6GEY4v2wWjQ+eHDPYvVunJU0K1vf7kkYm7rfbfrO7e3y0y/rs8WXAmoI/H3ZdlqZp1ccbj71c5i/iv48ebB+ecC97Yf+V0tyvYuOr2HhpaKBqSg6I0zS1dQQAWrRHt8/2/fDsyRMreZimixeXBIaMlMud9RIlV8Gvl8uSC6OJx9y4g5MTiM1FNzx6+qyMu7NVfRjdrVV8fnFpi+rw5OSZFjMoYFPK034TTV0dqEyeWQnFTFN68N57w9B7H/abbVwfAiIRtusVOz8NQxXC8344aELtPXtUUe98LrmUMvQDMROyqIXgCHHWxRqHQc1KzrN6quh1JZVojnpQE1M1QjUoartumKZp1QS28p3f+M3X79/79//u303T+Hu//7vnf/zHl88ffe+3f++HP/tAwAzpQ8Ide8Vln+qwmwznZW3/MxOn+X03+IQZJQkAIoIzLQOigf3s7bd/+7e+9/jJdtvt2iqenp6eP31Spj5Gn8bMPsTKiaQYvHNhMhiHoeT84uJqu+/3+/7k8DDECAD7NHVFu/0gRcaUu3F49OTx8/NzZD45Pj48OHKOJE/EfLBYiEpbh1FTHeKiqRd1VYdqtVg2i0WomiIaYy3ShxhjCFUVQh8Y2VOhOrZggUhMFu1CDQ6Xy1KyD+HurdOhH7rdLpcyTWmcEkww/63nGVbviAi8dyEEVR2GoQ4eRBjBhQCI4zQxM5Gwc5oLMY9TGtJkoLlkEwWzvusfdd2mG7oxGdAvORH4Mj39rCm0T3H4x3Lcz7H5eiZqB0dH6/Xh5YvnTNdwfVEtIsyEQKaS0caUq+C9dwJgpnP6qggEKKIKZqVw8PNPKyo55SpWM+bBeSaCWSjOETnHhBBDFIW99UTkSBFK8KGu6lhFBAh1KKUAWE5pVmLxjk2NiRCQmZsqTOPI3nnvc3HzNYwQg/eIICJaincYvDOzXEpKeeYjnyVabMbEAaipGISq4VjrJ5YNP7FZ/jaWcD9i10+G9cHJ8dmd/YtHamRmIgWQEYEd5lyGVMLSr4/PdvvBixvH6enjJ2jW77ZscnK47Mcuby8wJzR58uzZUGCQYsQigAKqZVClGMa+++DhI1FDRWYylSKl78dcZNrvQ1UP0wjMYmYcsuJutwVySYoLbtcNDx48fPL0aRXderV88vCKCQFJlWYJFQBwTIyoasaMjlQllzLXv+aHUpECSrGqAGG+dH14jH3Z9btfIA9xjZn43L03M78RUnDh7QfPvvnm131sbr325t2T1XD14k/+w/+xOlhfbLbb7TalzEhqllJWU++CC95UzHSaRoxNP40+UN00QJBEqSiggGnb1DPfRE6JEU2hH8YhSUKfDZ++uFhFRwDecXDMSOji2f2vbbJunz+pYozOMVJdVVUVEZBEh/NnxB6nftrvOWdVdMwZ4ODkjNlHlrw99zylKQGTiPR9z4yO0UBzSVhKcM7AJKXK+75PIuWgqXy7vJqSPy1apgLKjmITfd0q0ss991l3yr/ll86P2Vex8d9tbBiBENaL9vkj8UiMtFoswuHherW+vNpMY2Iwh1YxjWlU5qHbtZoZdT/1aepRAQSKWRvCkYfb92998OLCW9IeQ96DOSxlwXZ8st4O24PG+xD7aUwM3EYwG9OURF2IRdUArjbby0sZc/EhJtHL3W51eNAuFpurKxcCsRtLcd4xOx8cmnomMKhdMB90pkhAukaRMSJzyWUusxGBJBEpBhRjlVICADNxzCBqOHflQ5Gy6/rjw1VAZTRJ6fGjh9/8xtcB9J2f/uTs+KioOZS7Z0cfPL1Eun7e0hctDP6Srvms+AEAAOdcrKqUpt129/q9243nqor7ca+mvqoc43LZ1IEdIwCOYqN3FxdX231fyu7Z84u6rmKsZkXunKWKdZrGq6vNlEZCXi2XJydHy+Vy0S6uLi9u3zqrm+rnb/+8XjSOzNU+MHrGuq68d2oWY6iqSgXGYUBEZhdi5MHXvnbAitxULFKi89td70BWBwdZBBDSNKnZyZ1b7rV70zj2Xd9NU8pZRHLOOWciIsackorstlsAOz5cVp59tQAtU0pVVRFxSomZAQoA5JyHcSqqORURNYQp5cX68OnDBxebnSh92F/5Jd3xxTasXf8Xb37xKdWCT/8BmPj1N97Ybi5BRE3nsCoi80i7mZliytIP40xDDDeI4ZmvVAUMGdCQiJxt971jJmbnvZTCRI6ooBEyIXjHVfCiJKLIvKirvu8T6MF6WYUIqm3TVCEuVsvtdgtgiLjf77PkOX0zMxNj4jxlQq5ik3Ny7EVFzMZpSilVTT1X08fNTlVzztdgIWAREBEDACY18DprdOBiuSbndFZa+DUwsxDD0emtJ83KuahScp7QQVIpollhXTU+VsuDwxeb/c/f+klb1XXwOg3njx+s67AvXdpc7S4upSQ1mxSMKzBUJCEFACA35NT3Y9rtkeN22IXQkiEAmQtjSqoMWXO/U0BwVlQNNItN06QIYbWaptHHcHV1WcXg2fr93jMXwyKms+yDavDsr+cW5jsZ5jSrT9o8tyOlFLCIBKoP3n+/qpbLg4PQNN4FxJlr/MukmvmUNPdjMygve5+mH2biH3k/ACAqoK/j0elp2u/isF8en5T95q0f/EWeJjBTESZW1SlN85UxTamoAaJjhqJNFRkhF8lE0UEqomZ9kRC4Dr7xngDm1aEQjNDUOLg02rsPn1zu9pEWOQsjmRSK3kCGsSdfE2HbNoumQQAEE9W5ITJdPg/M4+VzyyVlgfmeako+Lu9+/TDggx/8iQvRiYpaLpLz6IP33jVVJWJ93zWxAoQiJYmYuXFKIQbKCfp+7qajGiE78t5XRu5Xgld/PLl5ddbkJZDzv6Z9FRu/9rHxcSzEDQTlVcyogrlYcYglT/t9V7dNNG3qJqfSDyOU3NZR1YZxyBmk378QDc4pKnvnnDcAMlg2tQKqJFHrnz64uLx4kKboWFTMwPtIwQcXk1wm0SpUzhOomCQC7LotsTOV4HnKmdnv9nvvPHpXRId+Cwp1jH1KfT/MyuyqVjEzYc4JiKQUAhAAREIiUTH2alZEAExNRYQI2FgMZkSg2Qw4NAIjZgNC77vtXkRrT4fL5fd+4xtNHf78z/7su9/59ne//Z3/9//2v735jTf/6T/+x3/8n//Ld377H1xt+02f6BXGBvhi95aZCfR6WsVmcdOPeOdjk2cvsaEvNykimuHZrbMQAhCmPO22226z8Z7rpkaEerE+Oj60MmkeCLCu65X3RO7s5DQVffDoyfnF+eV2r7pXUwNVM8ItAbRVXC0X69Xy+Pjo9q1jJmJ2pwfLpo5dt7t369gHv91sY1Mtm7ppYmCHAFUMiMTsyREYBI/OBVMztWmaYoizTgRiSCljExRyE5yPjZjlFHLOhNZEv4xhrKtsMo+xzkkwObfb7RCM0KahN7D1oqlDYDRTCt6xj+OUiEjHUUVV1TkXg+22m2EcU0rL9YEBjlm7SaYCxl9UPnbm3/joHOlnbsOPun522We99bM+BWp6eHp8cuvs2YOHRDgLrKKZ3ghKq2hCGzMRgtl1pR8BpmkiwilbmUbQEkNU1SkViBidFykqQo6QqG1qMyvjCCqOoyMsUIjJAONqkVQ8mkdlRpiGXPKI4AGQqK6jM+2ngRybQSkqYt57NBDTlFIuxTmHNCu2YF3XMyfxbrefiRrm2GZmNXOOp5QALIZKSlZVFWNft6sDQ7KZXnquh6t9fNUAAIB+ecDPx9z3SW/+DdQdDInXR6ft4dnV4/ehTJCnlCZgzqpm2A1j9/zFt5D3/fDi2dNU14H5atztLp935/mhwdT3aRicd8hegVAKAA5DN6apquq55D+Mk4oqMpDfdUPORaWQ4ywC5IqiGIhJsZxEVIwBiXmYpv6DR+1ymfO2qUJgVCiWE11j5NAQRAXBPKIDUBNgQmJAzDnP8isAUEpRVWJHiI74+ePH+22/PDx4/c2vn92640MgcoBk8KVdXX513txXjZAF1ADP7r2+efDuv////L8K4PPLi6Oj4+Oj40ePHoxZspSqip5ZSvHei2oaR3YzWbchoQIW5GQ4JUMQAnz85OnBqj07PpSiiyoQASBqKciMPliBMQ/Prq66LPtU9lNJAsQWQa1M2/On1eJwtWi3588Cs6l5R8SUVVWE81B25zbuEQ2Y930fvG/ryvl46979y3d/GpiTqgGKGYdaye37YeZrcQTMIRdhx6UIqALZ4eHhNI2qwozRnCH345iLoPfsYzb8Gxwj/NttX8XGr1lsoAEC+lC1q4P+8rmiEsLR4eGjhw+uLjciEn2cFJ/vdmRwenBQB7e5uFyvD9eLlhnHKW/2nQBue0HaiikTj7tuN5VpLKKjmqkplB0YELkCRsSMFNC8gywmgMUAiERNxLppEqRZUJSdEzNEXCwWiKYqZjZOE/E6OpJxUIKqrlLO/TAAofOuFIiOTUVLBmYm6IdpTFM21RtdX8SZQLd4H3LOYBqjSylr0c1uu1rVeey3ZVw03ztYrw7Wyxj95eVl2y7Wy/WTRw9Ny8WzR7/xja+99e6j7b6bNdV+5fPxF07SvExzb34/g0Xxr/7qrw4PD0T04vLiXdTIfHx89KJMzrnj4wMi3PYdkznvCbAi3ux2RXW36yNjYFRG9AEJnSdi9o6rUAXPi6Z+7f7d5aI9Pj5M4wSABLbbb/clnZ0c9sO4aOvguKoCI3p2bVXnlEsWM2B2pRQA9N4bgKgiwsuZA2auoxG4XTdenj+5c/9+XcW9phDi2PfTsGva1rGiSl177z0iEq9i8IC3+m4XmJlQSi6qpWRGE5WUy74bRNTMTI2IvPddn4qIqs1jhSEEMXj73fckZXDBAOET6h6fuuzXK/9p1djPNbyGIdjNh2+Ef67z5s9w9Y2b6ej4+Pzp0/kaZGYGpmCeeYaVGWIukgkJrwlYmDmJlCzMAYG6YQLYOueAeEylpBIdO2ZGQtAQqpISeQ9mRYSZFW3Wc2XmJsQQYl1VeZxEpZSSUgoh5JwRzQffgKoKMAfClAsRKQADSc5ANOXsvDcDxy6lNOUUQjDTuUvmnPPeq86IYky5eO9LkZSKd5QMQtNWzcIAfw1KuYaEs8w7UmiWh2e3n/68naY9AIjIvOmJUVVA5MGDDy4vd6XkMaG5cHl18f7Dx8Num0wDURtD9B4woaEDlCJpHNM0xoUIgiIkjamfhnEcU87DWHl/dHCwWC2LWlLdpTRMKZUsSGJmZoG4qHoH3ThJDio2dr2PLJrbqlK1UgrCXLMSh+AImVBE1RCJVW2+tyCiqMJ1f4QccfQOVcZu9847P/3+9//0H/zDP/jWt7+zPjgk9oj0uQv2S9iXk+aqCRPFUFGs/Nf97ulDL/r3v/fb9+/d//Ff/oDSFDEsmgUzDvt9zoWYssqUk7c4614zwFAgMjGglJHDggyX66OmCV3X76Yx3D6rQ83OjeNIQNnKvk/nm+2mH3aptCIXw3Q0pEa5wNiGoNtLnbI5l1NSkylNjgJSmKWkqeT+6rlOo4teMg4pEePSLyLB5tHb5+/9iLcXkrMIjEkL+4PD42dPHs2PiSo4UwUREiFiVc1TT2ZMmFTZORZJql2xQRVjBCL7VSQ+cHazfah39XfSvoqNX7PYIABTELLV4eH+8rmLoZTCYCZFJMeqqpxPMp6eHbZgd5fL1+7c2Q79sqrPFsuv3b3LSA+fPvsvf/7Di81VHvIH3bNSbBzSMMvDUTCwwAQeAKBqmjGnummXdbvfb4skZPOOsUhWITRAPYhV3TYKOJWSxMaUz05OVaVu6kmUhinEOAx9U1fRe0Abx2kq2ZAMQHJxzhOCoILBMExmqnbd8wVAmye9CQHAez+jXQ0oKwDxdrNpKn92enRQh8a7/X735NGD3/re954+e6Zq/+Dv//2/+su/+vFbb/3e3/+9nJPl8Xd/+zd/8KOfXF5d8ixp9qvYDR/rZ398hud++AG4FuMSka7rQgjbzUXtOTNVjpkdM1mZLrcbKdkRODOom5zSsmlcCMH7fdc1lZvGCdGJGrJVVfQuHB0empbXX7sfo3dM62U7OldyBtOrNFaeHaFjqmIVPBHTDNkUFUTyIRAxAJgqIqqaY4+IhkZsgOC9r2I1dFuwMnOzbrdXK1yvVotxGP1yUXIWyU0dSzJAbOrgvY8hEFGMLrdh1TbT2I/j0E9pGOcpGY+YUpYi05RzSjmlNCVNqXT9UERmzjhEvLi4GKbkyOms2vIFHIM3mnPXBPm/hL3y7a8/d+2+Gz9+BvgBwRAIsW4bdk5ymv9cnfsOzMH7PiVVK6ZFNRiWuY4wU+MxA9I8IT+VooDzsCN5h0yAEJwnx0yshEoEpgrAzpWUADV6h0DeB2aHxK6uGaDvutT3a+eIaJpxPpIdsxYBdG3bppTVDAn9LHuQcz/011cOpnaxyDn3fa9qIYRrctyUgDD1GRCLChAicwHFGFZHx+Rjsc+rmv+dM1VzPh6c3m4OjobtCzWdpfdmlL5z3Kfppz9566qbLq6u6lgh8vsffJCH/vTgZOFs3TZnB4dN8POw19h1dazIkAHY8dPHTxer5VTSxfPzwfg7f+83+3G3XDQpJ0DYdf3Fdpckc+UFgpgaoJmYyG43VggUK83a1NEh1p4iBUc0pYwvx/4Q2aFzjACqUFSYraSccjIzUAUzRmJHTBS8r3zQIiGERVX99N23/5eHD3/n7/3eH/zhH96+ez/E5suiX3B0c0+9uQ99gtnBAOeu5fUexk+9q5pZES2lLJYnr996zVTf/PrX0zhk+KEVW9RVSdPFZuOIQwxTLkRYRIU0OG8GJuqZ3JR9hexgLJml0Kx65Tm2B4VdVp8T7Ic8pa5drrLoMJSUdJ/yoLRX96BLlbjpch8c3z4qZ2upnc+gPepg4pGVgsyc70OXc54xRgWxXa8QZEwdPn13++TnOo2acxEbi267nhZLZAbm/ZAQUDQ4z2QISRhFpRSRKcmkKoBDkb7ImHVQGCi0i5U4flX08Rc2Pl4eUfNVHl/mNKDziC78onbYl2VfxcavTWz8stHyah/8ZXv95pVZgx2rxSq2y37YrVzIfT9utswmJXvHwcXKNxGylEGm7eliNQmmNA273UFVfe/O7a+1q/2UNqoS3A9/+CNNWdRunZ2VnL3n0+OTKadqufz5gw+GnBUshvDi8mrMCcBUCxGmPJlBHStCykX6aRpFLvZDUbAZnsmhWLdarYf9tgmBGRxhEWFHtW/3w5WqtU0FKP3YzyFnpiJFS0GkG4E0RiIzyzl77+e/vifLWoT8rhsOls32+dP29PCP/k//41s//tFue3WwWrzz9s/u373Hzl1tN8wcfGQH7/z4L77zu9W3v/udP/4vf6rTBEwKQK9sLXuFRBMA7KMa7zOnmNnHgdrX9CY3r8+qr4j4arJrCIg0jenRg0d3791+/vTh48fD/Vu3ESCVnFJJ4y6EEIInAxEpkpkdEoxj39T+7Oy1GKtpnFLOpSQAOzg4qJu6ruppGIP3oHa4OpgPv74vKck8AaZSPCEwSJGchRH2U2qZ0HsiHIauoaZp2xmoEGLlXCglO0IhiOxMJE25JCNDMLGUyjCQ90erZRFJ01TXtXPO4+pqu5n1JmrnfPDNoqWl1TGcn+fovXcDARSR7b4XMeecWqcqzA7JpdInKYBUiuQigMTs+25L5BTm0vIXLc/eHPYvc1X89PT0FfcR0SvzanCD8/r4pz6xf2eOLgMDJKzqNlR1P400jzkCillSRURQUaCMOGVxTN4AYUafQ4jB5ul3wCwKWFC0imHGNYiUlEsgUFNy3oUIAITgvItWl1xibAgJmAVxLCIisaox1vvtBqdxWVeEhKoUm1i1ueQpZxdjAcBccsnEnFIKMeaSd7vtjLyh4DebHSAzQpYsIqqFGfs0IaGaMV8v2KTm20W9PlL8SCkXP/TCR9b5izjuk7/91M/iR2CjH/H4X8cIrmU+5k2+WB8tjm+fP3kksAFQVDB0WQyRag/bqwsoHFBT2p+fb6J3949u3zs6YGdTETErQFI0MtVNU4XIQIfrNSN65rt37xTV/b67urx67fXXLy/Pd/sde3+13Q5pSpJEM3lPSBU4EumHoUsToBmT947Zpzz6KhhYAQRTATMmk5mkhRBJAIqBAQugAaY8iggamiojOgYGAcJYVY6CTEUhNT6sm+bp82d/+if/oe83/+SP/s9fe/M32AWja8kkMrWPs9F8UfsSqrnzsWpmM1p8HMdcChNdbXaOjJkR8OrqCrxz3jEyIrHzzvmbeRL1xIMWzBnY0ZQcx2jgERxiUQvBuVANqYiNJgpM9aI1hKIF0Hxwab/f9N2iijJyv9k/ePp80w3Ou4Nl+8bp6rWT42joxNGQifrFIhiwIwAEVUhl2qfcZ9j100wSZ6WY5CZ6RhDVLHL32F9eXSK7i6urDNAUrRxW3pFZ1oJmopakZIUhly7JbtLtpJ2gWx9Xq5MZnwL2mW2vz0pBPnme/aoVoP9m9lVs/PrFxkuQBbM/Ojm7eDLt+v7xkyfqo3fMEJvg05ic2vHBQqdu7PtF3VYhJrVnu30uGQjvvXZv0w+vHx4MOd8/PpZpNNXbZ7e2m+3z8xfdOIyaHz3+QK3M88WX282URwCrvCeFyjvX1pf7XSljLmoGkRHNjppg7Pvt5cnJ2ebyfOi6g4Njiv7urdNxd+WYFG2/64dUVEXVyjzUQp7QpnEQyc45RMwlG5DC9bKq2dwTV1UVBUcIdHVxcfvWycl6tb86d8xPnjyuYrx9+/ajRw/v37v/wQcfbDab73z3uwjwk5/8JGs5WK7f/fnbt7/Vvn7/3rMH7w8pE9JMGGkIhi95qH5Zf5jdYLKvX8FPFHSvSRhkt9sfHBwAgKleXV05Bs/oEGdZOGKnqrGq6iouqrpt26ZtDGy9PiDHzvvdbjtNY9u2V5vLZbtYLVd4AOM4zcCOIsV7L6L7/V5mslWEIupDyFmszACS1HXDrVvOTFXFOT+DL5umAYCcMyiIiJr241jFCpCKKCKXXIByLKXv+xBC2zRSStM0833v7PbtGZvpmadhKGlatA2YOkQzjTHmUrpx8N6rpmEYc8oAmHO6vigi5CIzq6cL1XK5fP78/IYX+a+xUz53BO3ls/GvWbAwAO9907Td1cUr+Z6ZKSLNwNaZMOQ6cgEQ0XvHxFIKAZopgJkqMRaRtq6tSAyVGeRcAJCZl8vlDE/POdV1NVEm55qmMaSqbra73W6/71NZHxwceB+8KyIh+CoEz47IDdsJCYdxVNUQfJFrpRVVqaqq6/ZmAMR9N6Ypx6ru+52aFBFAEylqCIbOOwQCI5E8GbSLVagbNbhhKP47djh+jplZ3bRnt+4+ffen48arkagCGZIzAEdUOZScThZ1P3TWRECsnDmUVb0g54ckhpSmSYmdc9041jFebi6jd2Ly5Nlj58I4TqXkRw8f7KdxmlKWsu16mzUuY0NkDg1FRUtOJQvMd3JCY1QfPRNKKUaohJPkLCYKanYzBKmqWhSQWcSGMaEhmKGB9+wIDdSRWy2Wjn1JiYEQrQ7RI1lJP3/7LULnQ7x7/w0XKgNAw185x4VPprn26XOev8Al8Mq5O+OLQ9NcXl0GRiIyMyBUM0N03jVVzVJMFUFNdZzEfESiQSwy9YJ+ErRcB25DSGKkNqQU2AECe6rruqrqzXZnKtHjyWqxHcfddvuklHW7KGqKrM7tUrk4v3r7/OogPPra2a076/akiSNOh0yDFc+IiFNKXU7P9+Nb7z977+n5dspZ1AEsPN86XN05XjeB3rh723tfxgkJjfjZtj9om4PaASqqmoqpiNpUbBDbDmkzlW3WbeGO4/HJbfM1AILKZ63e51wcPzmk8rEH4n/lufuvYuOr2Hj5pwFAEWmW68uLc0bwbdMPKU+JzCg4kuGN+697KKOy5dLtLm/du1egKlRpu3y43b3o3l2u1t3Pf77dXnnEZVUtVqt33nt3c7XdDIN5J8yDUUHKImrGng9DC1Js7iwXy1NhUwRDhz4ERCJmARizdcFrnpaVN6sXTZUsS5lEyiiQSkFmcgCqs4pvEgEwQUVQRwYgajO1qRldh+i8tvNMjPO+SOmnPo394uxo6rvf+Mab9+7d+vGPf/T6/ftt0yLi+vDw+3/1Vwd996/+1b86Pz//wQ//Kjj3jTe+9rOHj5d3vr5um5Pf+MajJ89eXFwUNUC2v94d5eO+vhlDfPmTz28wg5xzVdVMTIgI6JxDKFKkCb6qQls3aRpjYEYLntumPj45cs6llGL0MQbGlnk1DENgRjVUYObVcjlN0zAMMFnT1Mw0DEPKSVSkgGRNSUKIUor3HEJMKY1jP00jEqiKZmXiOdkN3scQdtttKSJqRTWJJDXVFGI0szRm51xVVSGEGOMsROe8X65W3dCdHB+rlLqKjqzkJGAx+mkYxn6YpqRiCFBKMVVml8akamaoaimXlJOIFpEqhrppkD6vEPtF/XL9/1mwdvYM3CBxvzQzVSJaLhfn+BGU/yyKG0NMJYsIGBQRTyhmVV3VMRZVQ/KOwJxJAYZZsZcQFZGYvGdVAYCqqpxzOeeZALUUWSyXMURiJ4DdMIpBrNspZwH03qtpFWNT11UMYz+IlBDjfG3o9nskappmmCYAIGIfwmKxFpFhSsMwmkHOCRGIuIlx33c6E+4iew4AMOWiaqFtj85u6Yxl/pvUif1vYogIgGd37h4cn3UXT/PY5zQiSaijqqIKafYolnXhQ1i5YlJ5HoaOJa8PDo5XSzEYAk1J9mMy0dR1jpARpmFg5pxyXdfdviuXl+CcASCR834YR8/EZCRZ8tQPaRLMgIpUpDCDI0LN7ByCzQNnxSBrMbueN3gJ3VHDIoLIRVWyoBGABkfeExmoQAxVWy8RUUVSSsQQnQvOZx094cP33/nj//i//9G/DGe37iP7m13zK1473cc2s91U4F89NT/WBv38luj862EYCCmBVFW1NwOiWFV1Xad+MDDJ2RM5BGMcixYRAioIfcrsXRAMRZ2jYqLoYGZfIyDCWEVGGPveIbUxriq5vajZDvuUVDQQ+ioetZUx7YZh34/bNG2H9BcPHj7cLd88O7oji6usdZyiD7lMUmyQfNUNUymnB6tTgDTmLmfHVErZb7Z379+5fXAAmh1D9OHw6OCHP3tX1AyaJgCKmmZEENVJbDumXdZNtm3BrcLi9Ni17XzOEJJ9WubxqWnKRxqXH00TP9Yc+ZvGLXwVG782sfFZc0u/QgjZjQgIGJAPoV2dP93gbh9iO5WCql2vK0ab+mbRkEZl1w/95fnzo7P7zbLhuvZNW8bx+b7LZVREJnqx6570o6ip4+rWaWyacRrJ0TT2WnIRHYZRsqroOA2quhszM9exRsJcMgNUwTVVPeXMVkw8V80EsB9Lv++Olm3lqfhr8i8F8LG2lJhRJJmUlCdBjISOKRUpakj0MpVPKS0WC2Yex/EaGICsIr/53W9rGl+cPy23jm6dnPzllFQkpRy83213p6enp6enf/zHf0xE3/jGNxggpbzd7S+vLjcXF//od777j373N999/4O333vQpQnRwWcMpX30PjMv+w3rwsu3fMxBL6fs57b1K810M2Mm792w20Ri56Dv94sqMHMdoyMC56LDKnL0ziSXaQxuUVcxxlCkWBEkbutGi05jXi4WADBLKiCCqOScu64rpZjaOE5KruSChmYoRc0sBO+c7/u+6/alZFGdIZjM7L2PVVVV9TynkqYcvE1TEgEzzFkLqveGiH3fD8MwTdNqtQohXF5tQoxN0xJzUzUjoKQR0KSUNKZ5k5ipmopoLoWY1UxllgkjVZUyN8gLIFZ1fXF5kVJ6ub9+Yb774fDZvM43/pizTlV5JQn70B2vfhw++iD9hVOGHzMiWi4WSGQiOMMZgOYAYGa8MbWZtMzGaXSemJzNYteIxRQMSikC1nVdYIchgMEsyoqIXdc554hIxMzA++BDLKI+RENerA8Aebffl5zzNMQY66oK3hOS815UHSIzSxEDnKYUYjBVZr6ZLrBxHPphZHbsOMaYpgmJspQkZZ4DjTEwQi5FTdj7W/fuxjomMAM0tU8pwHwUc/Wp9llf+tCb/9Xbpzc3UkPEZrE+PL395P230UWkJCoiBYFUc85ZVZEDAFTBIQcwyylvu52Bri0vFsvYcE/QAWRD74KqDONUgKAIEfXTVEzIk3dMjkSEkMukRKapn8n5pix7wUmBEJnQexfYS0ki2aFjZjDIpcygKDBQk/loKKqoCMSAlKdkQKDmmLwnJgA1Ql4vDxbNkoykKIIgoCNXxcqSMAFiee/dnxz9xWH7h4vF6mgmIvuVV/XLGUH7mM2bPue8bKu4Xl8wa8nd2Kuq5lzFKqUpMAYCM3MMWYuhZ4TJJDocFSJwYwpgiKAqPvjg3UxUTexwvsKattGdLqoI2ixO4VqkQAUsLhYX230SeLHfPdnsH2z655vdvusvjw4Pmzo6nvHZ7WJ56+zWvdeCdHsbOmdUCojaMI3T2K/a6mu3T2ooybQJwVc+tM1+TO+898CIks2aQQIAuZSh6Gacdll74K0gNKv12R1kAjBUNgT8tIvIp3asPvcZ9/Ea3t85+yo2fm1iAxGLwMHJrWdPn7w436wOXawX+/2my+mQyVLWXDz7jIRSX2w7wsel20zNylytRn23lzQ6QlVAdpVv0PN6vVKV7cULy6MMm9IPYJZyGobBDBGJELOKAhBgniYXfCmlbppl00rO3jkdRRGnlDfjWAx0nHLl333y1Huvhgo4pmlIxVSLqUlGs7apTDRPYylgiKqipsyhzFILRKUUuxlByzlvtl3bVMeHa2eLhcemCm/9+EeHB+s0TScnJ3/2Z39+fHryR3/0Rz/68Y/efvtt7/2//tf/+mC9+jf/5v+Refng4eO//P6fh9z90z/4h7/73W+t18vv/+itTdcD8Cd00D5iL8cN8Qbx+fmH9Kf6q+v2IrJeH+w3lynl5aKBqlItaIBqWnJTx6ryCIagWnK/3yJYrCuI3rNTH0SsaZoOhpPD5dD1oYrdft/1fZESgzezzWaz3+9nfoMpScm5jg0AmQkhzyCBuauT01RKPj4+7rouxKiqVVWpivehHyabcacuZktWRNWcc1OailR938cYq6pi5nGclovV82fPnXf+/n1SIGIIUfI0jPtpHEvJ5Bwzl3Echl6kmOrMb5VSzgJSLKUsUgwBCI+Pjp4+e9H1PX045fkLbE4oX0WJvGp6Q+Nl9jclaGpmVVU7dlnynCbNuG6VOQEEJjaVIqLmmDl4KiklTUjMCAIwZ4WOnWqB68YFEJHz8xjw9XCemTnnASBWdYgxIIWqGfqxquohpeViSUiSBjNFdCpgROxCyWOIkZknHYioqOSccs5qBohqAqDMCKhEllLepamUpIACwM6JISKgacky/2zHx+s3XrvbqUuTEdL1ZMjf4VPxU8wMyPn10YmvGl81kkaZ5hEPEAVRnFUz0ZQAPYEpuBjHwn3Kev5iuLqoq8qFakkhOyXHLjRTDAAoUtBUUqLGMxEj9n1X0lDGsXQ7AxOwXCypGxX6kr1zDGCOTTVZQQN0iA6lFDMgQEMSvXk+XRdAQAEAuYiVoqBARN6z43kG1aq4OD488c7PvQhTFQAz8i5mLc4FYChl+NGPvn9659Y3v/1bVb385SVaPrQvlOa+UkmAT4+mT+xeZioli1XRueD4ar91TWtM0TfsXB2r3vkqBpKMaFZgnpUsIvukBFx5P6mNuUTvnUIRAa+qIkpjyY5JVZnJez4grsgOj1YhRFBTyN67Ycz3jm5f7cfDZVyuFqujfNmnLLLbXPV9Vzl3cnRwdnJy7/U3bp8dvna8mi6f9RcvIlfeVTVD3++HcXSOquhKLs7QITBAAHvz3u3Nbvf4YpuAIiPkDAQlawYYlAbDQbRQOL19j2MDSGBwzXZiiPiR3MXMrrv2n2GfaEwjwvUk7+yELwX5/te0r2Ljv9vYmHMuZvetb//m0yePHj5+Etp2nKSqvRIamg9OtJQint1uv39R0tUFFLExazYMIXhG75yomaEZsONc0jT0lQvLRauWUiqT6L4fUs7B+aZuQoyG6EQQ5547HrTLuvaljGK23ZckMKS0mfqrcWwWK1O92mwYOaecDc3QFERzCGEak6l6wDQMzjkzBERRMyRVI4YQvBRDkzINIA59RABVMy1vfu21pw8fgOR/+k/+8eOHD3POuZTTxSJNSc1iVb/3/oMisD44PDk+LCW//+67zWL11k8/6D54SpLrKr714x9utlf33vj6b3/7Ww8eP33y/GJIgjTTtYHB3BU0u74CzT07w4/qnH3oiJt99urkzSehn1NK/TC99sbX3n3nZ4lTPwyeQdRSKUXUeS8qRFFUxzQagocw5Yk8j+PUdwMT5SJpKsSOnev2e2AygGmaDCxWYd/txnFQla4fktqkllIWxbAOShYqD2ClZEJidj5WITab3d57h2qOGa+nGw0QVXWachbb93vHiAkWbWtFnPPM11TTMUZVbZvGtPgQVC3GePHiOTsqWaYpF4VcTNKYc8kpZ5FxSmpYcpnSVNSGKY/TZIAGaEBEWDfNcrVqrrbTMJoawC9GlCBdb+NP3XLXyf11bfcLIRZ+ycIVAmBo6nqxSOcDwEyuP0NWzZQAZ/A3FdFxSiCEGBwBEjERABbNHpGRnHNStJTCzo/TiARFcwxRTYh4Goe6aQBsVuVl82BWprRaLgWwDZ6AzCw5lCIhRlOcRJq6UYCUk4zTNA6xipDZzEgMVAGh6/qu70SVkG3WNivFFIBAVG1uHZGlkhnZeWKi0+OD48OWh5wlpYIKswNuJvmu1+TvvBlxs1zFdjHuIrnIRQBMSkHHAiiqBOKcc3xzGJg5diqlG8Z9nqIfmjpG79g5KGHot0QOiPI4ARgjbHc7AgjBXW6uNrs9sS+iQFzIJ5BRJBk4YiZiBEDLRRQEAYILAPMAw8wtBwA0y46QGaiZgaoAYy4iIjOHhyd0BGBYFNar4/XqEIHAcL4mmiIZOCbvHc2T2ab77dX3//RPVqvD1974BnGAaxVJvEFQwhd09Idp7itHptnNQYvzhMScSM/7/ZU76fVuRLCPbktCwLlWZQbIzrnVcpWJD4+Pb5/d2p1fXA2DATC6SIpOc9GpCARGJjUTxZRkb+bAhVIAXI0koiIJAGeGH8eUSgFyVQzBU+U5OCJySB4QtMCibaXoYrHkXdfL+dmt27Fq9tsrBm1COD0+Ojk9+dZ3v6PTiP2G29qGyGIVJk2ZJK0iE5OUEoj6VAopJFNkNX399q0X2+nZ1W7Z1sFm6RqechkVR4UiVi/qZrUCQpx9j3ojPIivtsA+tVY3L/urHvnIeXa9g29GS/9rle6+io2/67HxC9tzX7y19wlaUPNVXa9W+dHDcb/r9t3921/vhss+JVVV1ZISs2vq6mK7IfbDOKYppZwBIEYfvM/jKKpJtKTkCI+ODqtF/Wy3STmb6pAmFWl9YAKRnM1MZB7Zct6h4rKp1XJfUio2JNuOqRfNBkX0crOxabxzfNjUzXa/jT7shpGJVKXbb9UMTb33OSXTjEiqZIjIDkHNTIuYgkMEmHtm1vXjZrv7re998x/8vd/+4//jP479pCr90J8eH4cYf/LTn73++uv/6A/+8ePHT/7Df/hPq4Plv/hnf3Swav/9v//fh26oD+88u9qdX3Xfeu3s619//c7Z8Ttv//z9n7997/5rJ6vFk5PjJ+eXT56/GFMWIEBCeJnmzqC0WQXlVY8bIn54n7n+0kcuS/DRtrsBvHhx/rU3XitihphFcsqkOXCd1byZA1KFpqmQSBFyKe1iwcz7/T4ncc55HxCRmaeUyPvLy8txHEOMzaJ5+uSxmaho1w27YepTmXHPzLwfO8ekKEBsWkzNey8K6HyIARCsSAwRTNkxEYcQxinPx18xHfuJkZC4bkLXD6pWxSgq0zQ2TTuNPZqWUnKRB48ekQmMllIicu2i6vadTiOSFCmqOo15P4yqCkhZ05RzKaqiSCyS6+WirhfOD6KqqgT4KawHn9hDgLOK84fl9pv1RzNAZLiGLX683GsfE175JbAKr/5QCIDkfbNcXr54Stcj+wpIwAiAaihiiIRgRUGMp2IZgFhrh2I6VwXNREVMbQZdqEpRqUIYx9FAQwwmWqkamScGsWHfASBVCE0rJmoQHZeUxaBqF8wupwKACiSqKeVxHEFFSYdxBMCU8kxaDApTKqLa1E3RImZqJqJZzJgA0TEbKigQOtGCZHfv3mobTtKnKHujIRsQ4zyn9Mr6f3F71QV44/EvAvj90rtnr+xWJHbtcrlcH+wvnlftapwmlVIkVzHOFBmIRjx3YsAAjJAVVBXIqcPtlLbDsGijd15lJuOxbpyGlIGwbpr9bqdFPFNW6bOiqgF79qoiYAIKYLMCM5gQEbHOTLgmBghELDMzOSAgmwoRMszDYgRkilCkmAkReUJHhmCq6Lk6WJ/Ogmc0k2TPeYMKocbITCSqKqoATx49/P6f/slycXB4dIaObpg0EUABv2gx5/OquZ/fGvu8D4KpqBnmlKvA5IMrooh913d9v+/22/0OTT0hkvNgYlrGAmbBB5BsYOSYmIrZlIWIdlPOOQfHZpayIDEhs/MllZRLGxwgpJwcS4g4FuxEIyJ5J0ie+aBtX3vj9dX6gBGWMQzD7u79+5fdEKvGiERTKVMB3l69qFCDC1qkbmp2LFrGNCh6MfUu5qlMOVfevXn/1p/99OdjiOBdyZOZjCKDgoA5puDCDGMyfbl6v8QafioQ89Uv/W0ALXwVG3/XY+PLjaWTk5PVarXdd4u2nXIexrT2vN31SFYMUj+g84a8n/JVN8a66adipuNUYMylZGYHgKGu26bJiO8/eSYiaGClhOijd3UVmdHMUh4d+5IteHJI3lORPObpqpt2Q05AycAcl0n6lBDJM19uNqWKRLzZ7VNK3vE0JSR2BKpaclG1LOqZ1AyuOZ4w5xxjZSZIDhEVaJrSME4Itm7bh++/f//unWkYHn3wwNROz85++tOf7fedAp6cnPz0Z2+rSVtXTQzbq0tm3vbTW8/e2XTTrePla7eOfviDv4Bvf+vW2fGLF5cP3n3njTe+fu/04Phw9fX7t99+/+Gjp8+zZEOeyaE+ttQfQ4J+jr3E+b2s6TLzweHhvutCFWeChiK6qCpDELMiCqY+pZR821R+HqU3G4YhZylZnXPMrGqqmlJKKYlq0zTENE0pZ1WD3ZB6sfN9v993ztF6tWJ2jp1jQoCcksXgvSeinHKaplgF71yeEzezmUZ3llxWJCNlF/p+IAQbJ46hG0bvvAYgcimV48N6GDozQwBT67ouEIbgVRQJxmnMOSGSqPbDAEDsmIiylDGnvh+L2MzsNqWsAKv1OtbNbrfv+iE6BjED+JWYrf9a9sXz3ZfYa0JerZaPiK7nseymO4RIcCM3gawAQykK5IhRhB0Dk0cggHkukdghmAGQcyqqYoykAGmcgvNa1DN6ZiYys3EctVqUUsQ0FcE471AJEdFgTBMApqwl51IyomUpUz+qoffBzEopIrLb7WaeKUJI40SI5jirqioiiakUjcEHx6jQp3z79PjuvTNgi57amgxgHupX4l8DkYhXzEwt1u3R6e2nD95zYabbk1KKhsDOgQjT/5+9/3627UrOA8HMXGttc/z1zxu8B1cwBaCsSJYhWcUSKRqxJVGtbrWiZ3q6p6P/kfkP5qeZmJjomegeuWhJFMmiL7IsysN74OH5a4/bZpnMnB/2uQ8PrgpVqqIMsSIAHJx7zr3n7J1r78wvv/w+QgARtkQI0HX1rTVIGFXFYkq0CGI5BR9VIXd5A6ZSDm04bKcceUVrpu5mix37OaWQUoqiREYVVKUrpxHQdR6W1Am3wTERXUWZhQ2BMWYldidGkqqCAhhA56y1KyPJyXg8nky6ViaiwdVVTlmFDOV5jpbYtx0XKMX4yssvDYfjJz7+6eF4w5hMRYEQ4EcpFL1jfVBu7urzvnve4e1rteuOWzNJBNAJQEyp8u3tvb3lcjEqe0hoEDKDObmkkpgriCmlfpEhqkpqY+i5XhKNQA7tUdUWFjNjbJaZrFTAyApRJcaepdyZIEzkQkqtaECXsmJvuiTnoshgONpxRQjVZHIGRZbT6eb60JBkhp5/6umt9Um1nI5yR4ONw90jI7DT7/XHRdvUxmYpxYq5PxrXTX3YBN8ma42m1C/ssF9O6yX0B86YwNyqCpoyNyqaFz1YMbHwLVnMHwnU3fnRe0J678hFfkSu8x9lfRgb/8nGxrt/4Tuh2Z98PuPdS1UR8J5Ll1586eUAYX9/32qkrY2FD0WetW3kGKyINUZDZJHWB3IZAhKRgrIgkHGIShhYfNUqQEpCCKU1RZZlBjUlUQJEhNVklQCmxEmCsbRo20UrVdSIAsbWgU2eRxZQUQRCncVQliUgtiGEiGWvTDGKMiAm0KJXhtCic8lHEcG2Ncb2ej3vvQhkeRFFU+S6aSbD/rnTlzfWxi+98PyD999fjkdH06PBYPD88y+Mx5N7Ll0GwC//yZ9MJpMnHn9sa2vjO9/+duvb8/dcuj3nV55/VpkfvOfc2e2JcNy9fatfFqd2tp577rmD3dv33n/feDLpuXL44L2nt7euXL9x63AeWbTTRwYlAgAV4Tug4DuC4T2j6B0xo6rf+fa377vv3rLsh2bRNO2wXyowi1Z146wxSKLQti0od1xkUI0pEVlQ9N6n1AE6eOeP3rhxYzAcKkISrZqmCjyr2qP5wpBZX1ubTMa5zcs8A5WUOLdGVY21zJJlrmMdNE3TAf9dqwhEVZVFRJN1mdPMZlld1W1ILs/7RZkUWbSqmhQS6W00gKpNVfkQM2fatn311Ve2t7b7vaKuK+89Ija+VVhJIvV6ZTtLLBBSSowsmkQFARBH47EirG9vV3VztLen3fVKO8ni7iXvnEjT926trJhDH2Tv3H2yPnjx+c6NDFAWpSXSdKzcwiokHYGTVtccUkRRaSMbUmegaYNYEkJwlghYwXQ8WIBO6RwVemWJqiEmZGikdsamEJml7PUIaTabGmezoqi8t0RdSZNC9Nx670W4lUTIIhxjDCmQNc5k1bJiZhHx3jNznmVdGBCRsMQQQ0pgjbFGupE3FgWNkZ3L7r10X1HkPtbWYG4Be2iJFo3UnEQI4Q6f56dkQncX55/mnT+jdTega1w23tjOe6MmxLzXhzqlxL71hEZgpSJskBBRmLtWnjHEysaSA2uNFTQpMaD1PvhQR9aYOLEYY/I8Q4UojIgCYgyRSAwRDJIhUhHovD6BZRX8pmsnirCqs5ZFjmVdBFCNMWQAEJOCKISURMQQOmecJUMmRLXGbW1uF3mJiF2CS0QAxJKiMFhymUm68nlGAOUY2+r5Z58q8uyRj35iOFpHNKAgqB/8JP34NPf4iOtPVCodG/SByTMFrKuqjSHL8vF4zD4SURQ2ChlpTlbRzH30bQDWzDqyqAg+Jle4NkmGtj/p93IXEkeAYji+vbefZXnusgQaDWhRLAWsy03uIPlZ4zdPn27m81YVc4eiztp5tWzq5Xy23N29bXWzmh2pHbTVYh9Skbmr12+AQAX57uHevk/nd7ZKKtiriF140QTF2vZ0ttybHV08efboaFcN9PrDRhdKIoBJlBWNsRaUMleORtZaQFR52/3m7ccT3vGjnyhnvVPEf/C3/DzWh7HxYWx0S0X6/X6v358fzQg0L3uzJkKGpIBkQUPT+qhiCCeDftt647JFVauiy5wztpOO6hcZJ+bEZIwoA2iWFcoSklKWKQtL15QEMEYltlG60XHP0DKLoSgEgPNlnQ+ssU4BlBlIiUxgrluvqom5bdpOKUlVysyJgiI2bduRcWKMWZZ3YFKeWwEQ1sVymaLnwjzykct5Zl9+Qbxvl4tw8dI9Tz3z9K1btz/+8U88fO99X/6TPz04OCDEz332F2/eunFwdNgEad+48eK1200TL5/eOrO59tCD9+d5/vzzz+7u7j704IO/+qu/8sZrr19/8wqAuKxgoe3JcHPywN5seeXa9bvuuXeNeNw57D9yTrFb7wih2WzmfdjY2Hz9lX3btzExWQAyIaWqaUxZxJjyzKFCaFpPRlXJECIrmFAH51buZcaYwWDAbTvo99umQUPT+awJ8ebu/v7hIaE9f/bMxvp4fTKRJG1dxZiyIieDRDSfz3dOnDDGkjFFUahIJLLGIEKKyfsQQkgpiZrMYb8oCDSz2WJZJebAGiIL113rfA5Ll5sUvMnypmliQEih3++TIWGJMaaUkCgJG2uXdZOYQ0iBUxsCA/gYY2IWEQWb55tbO4uqPprO6rZFIgRd2a6IEr7z2N65+r3nxa+r/X7iffRTIRdd33g4HJZ5WYXFHaYqKQhL5+GHhCsWpQIAiEISRRZriAFZNLEQs8my4D0jEBlC9CGISLcpTEaG2XvvfciKMqSYIovoLd9MNtZFdBkam+UxQlHkqtLUCx9aFDYgWZ4jgYgAgnCoqsoYw8xt23ZSG1EUAUIICtDNfdrMASIJkUEQDiEQuEc+8tinPvlL8+oWIBFaBM4zzTNTlNmsiXXDKSEAyYq6858EDPQfspDcZGN7tL7tl0vrskhGVZlXCirCjGStM6gIRIlZuRvOViA0lgwaIusxmjwrnG1jMKxOnULeYbigUooFhDaEbgOazAYRNBiZhQWNRUIQNMYYIlAV1k5ukVNCFcLOJGo1FA4AqixCKxldUGtMZo0hEOUY08b61vr6Zqfg0eW4RLajJwGBcxYJgZlQrTW6kvUR3yyeeer7xmQPPfzR/nCMxiEcg0UfYH1Q0sJPGC9IZAwZ6zJVsJlzzp1c34DM1k0zKHt+Cb2yTFJZ0DxzYKGsw8LHEHyZ9QwQGSRrIysIz+s6L8u96TwfrZ0+c3Y2m7WCiNT6sKjDIDNrO8P5YuGDX18fpRCbBEMBU/T7vX7ieHTz1nA4WrQNKhwcHPX7w16eG8Db82k5KFRhb/+gj1qWhU+p8n7qG87LPoATcQRlf+364dTVfuvUWctmDgaG6/2ylx021LRRODFEFmsds2YICQCsZbkzXbs6IO84HT8JDes93vVTvPdnuz6Mjf9MYuNvjr0tLOfOnjOKqMIpLZpFL+8HUQ3RGudTYlZEROaCKHLq9Ype2TuazpzLDKiEkIRjCF1bmQSBU4rRuQzQhMQoao3N8kJVwGBMSQkQXApStVEN5XkPGKeLqiz7jQ9NVbOqRVCUiEDGhJSUhRBYlFkAhBBjiiEqIlhrQ4hItixLY0yMcTAY+JBQ0bc+z7PRIF8bFovpwV4IF+65GFpvnN0/OizK8sTOqRjTN7/15GQyyfP80j3nn/zWN2OM5y9eurY7ffrlK6/e2Pv04w/ef2br1pU3/uzmtc//yi9//vO/fO3qtd39/a997WsnT5wQgFdfe+3ypXvzvAjNkowdZfjJR+7/v/+4VOkOM+EdvO13rA4iYpbxpHzkkUeefeaHKXEIoXDW5FniUGRZ7GzAAGKIuaWOmQAADrMYWzIZMxNx0/jJZKyqs/m8E/YKMVZNfTibz6t67+Cwruv7L1/a2d5en4zGoyHHdMDRN7WKiGAIQUWYhZkXi7kqxxgz2wngOgRQFWONFdsG5hTX1yfWYuayvChms9l0NiWA9cmkE7eq6waalGdOiVCUwCqzcy7FBMwxxhRTEk4SQ4yJOcUYYlosqqquWRCQIkcfI4uuj8dZUbTcJOZef9DLcokpxJhUVERSUNEOXe/Kjf/YqN/bFgIO+4PhcFDN513IHNtbqAisZhbxONPtJodEo7IlMgCp4we0bYpRRSyhsxZUrSFMbKwJiUVazQQIi6JsfYuRqqp2zgizbxsBsHmW56UIVXMlwqapWZIkNogs4lNQFSSMbdvpNnTDlDFGImLhrs0XQkBrnb8OtbAAAQAASURBVHUI5H0gJEKjMWbWnDx57nd++x9kfbdsDl2WTBDEKBJdZiZlVgzsfJ7mi9SEpAr4U7kJ/FR3tJ/vKgejrRMn965fzYsytXkInogMWVUADQACKoQECEbQZhYAlE0IHtGggiEpc0OGev289T4mQaAkrArCrCKSWFTRGVFQIOcIUWOULAOIvGJ5ExlrLZGKEooISDp2t1F9+4FetWKSgogCoLXknEXS6EORlyd2TpRlr/v8qopoiEi448mgy5wgkyIREQqDgioSqMR6Of3hD76TYnzo0cf6o4nNHCJ+QE+Qd9tDqMKq67HiYisBICAxqkEEfYtJf4dceMegAhUB1CCKUm8wSql9/sUXSw4iAognTp/N++V0bz/UDbRqjSWMGQhZu166KhifRATGRa4cRNkLekUqnRtODpvYn2z0tk/sLuvB9k5h3dHRUZPEJylmoW11WU3nLV+6dLGZHlVNMEjz3YOdUycSQfSVVQ7eN749dWonAeSZlTCtY7JZFurGokQf86I3nmx41luHyzMntq0zPqWDWZUNhpAVV/aOTl+4JzEfHexWTYMGMgPW5swCDIFThsmZXFyRD4ZgnIreNTHyts7UO4LiPZ//EesOOe9veH0YG//5xsYH5HH+RH/rzhIQQFUki3TixM6Nmzems+nOZMSMSUjQqCbX6dCDRh+MMQJgyAiLtVZFAcRlZIjQ5hYRWLIsB82EhS1YAlZ1xgpAG32e5UQEkgzZJOSFxWSISsYsDudoqDccHt2+bfOstBZFqsU8N2SUVcRYkznXNo2CZM50c7vHugWU52WW5yF6VLBkvY+eZfdgOuz3R/3iwumdC2dP7t662Tb1xQsXss2t559//s2r1z716U8TmW984zsHR0eX7jn367/+hZdfeeWNN94EVjX9qYc3bhxOcrNe2hMbox6eMZQtjuYHw4OyV1ZvVoToXPa5z3/uxZdefOG5Z86fPT8YjYwhqzrb3+0GjLrOIBzz4Top1lWPGxFWPsAdxoNyrMlAx0AuAogqI/UG44ce/fhw44QrX2clVW1aH5o2M5Dy5KxJISLiZDjwIVmXa4gsiaInssQSU5rN58bYxClzWdPUDNyG1IRY1+FotjiaLY11p0/tnDlzcmNttDYoncU2MqkIMzMbMkgGjUmRQxts5rO1NVSs5jOOYTlfOLKEyszO5Yt6vra+XhYFiAxK08ZISHXTzKtaRIeD3qjfVxZnURBJFZWr2lsia00boyHjkyaBENNiufQx+hiamBofYlJmDFF81BhZAZIykanrJgYmcpwaazIVIqC8c0wQMUSKGlNs6pZFVBhBAYRACYGFAbWbFITV5NoHukr/FOAFKoCqoAooARjCDAwyE6EaVFQUAuzMThgRGQC1470QEa7iQREAVtweFcTMGVQBBGRRHwICihqyBMyi0KQESEnaJECIZAwhdLOkISVjTQohtG3mMgBgkaZtQdVaG0TCLCROhowi1HVk0dSZ5wgbQykFUEFQFSZjBchaKwpGbWGNQc57vf5w7Ytf+vsX73v46o1XrXUxAZIagyAGBFCltI6GzhlaVLFqY2JRIEQUAQSDK+Wy4xk1fBvau6IIdA6PCMdkbHpPY8IVteYnXu9Iu/XHhweCABjn1jY28zIP0RqbiY+sYA1ZsKhqSFEYSRERSAUIAMhmDkhUDahBJcIYE6o6IpcRIqkaEVE1zKxgOQl5jTEpkqoSAqCiMQgIaLizUQFARFFRVemCDsAAsqIocYoGCQEFrah2dayoWgJHkKFoUlR7YvvMxtq2IUuEAoBAhIbQKLFAIgtoUBUEUNGQUZBOqAy7mR5fz599+rtNWz386BOb26fJZscaGwrdPLfie/ZWfha6uXeJKHfyN0m1P5qM19e/8bW/ev3lZ//OQ/fnWXbzxs1p2567fCnL8jwvZvPDDBEIVdmi6RU2qzAJpBhdaXuDPov4KHMfNjY3BmdOj89f2Dx9cn545JmX0/mg17Mu64/XMmdvT+cqvFwu++O1Wd0KmapqyrxA1qPpUdnrNfNpryhS2w6KwjcVuN5ysQhN2wqMx0O/POqNhq7Xq8EklyeMAk7Lcncx840fjSdLYYyc9Xqv37p59vzFjezsmy+/0MbYy3NCrNmTMZh4UDgV7fWHWVYwWj7eVD/m4L3/Re0dlK8fy8v8T3F9GBt/C2KDFKW7Pjp7Yn1na3vj1Vdeictl0ywLZ0yWa1KDyCzMiYiyPM/IJJG69hbIWCuqPjaA0i8KUhVgBCVCWxhAEObMWQRkFmFBZo6RRSRJE2KbOMvLzgopSEqsGtp+v1f0esKszL5pRBkSr1IPVQCw1jInAnBFocfybc45UHFkfEh5UdY+TKs6z7LcUfKVr5cPPfDA7evXDFFd12Wv70Moy55vfdOGvMgHw97W9uYzzzzTNv7suXOHi+b5Kzefe/mNtUFxfmdSWEKgT37yU9/+9ne/890nX3p1+Bu//hu/+/d/5xvf+MaT337yhRef+8SnPnX/fffdunW7PxxkzsYUBoPBW7yg94HncaUqepxVaZfeAHWact3LDbGoyYszFy+Zsv/Sq6+PJyPjTOKU505ZWh9UuZdnpMaH6GMyhsh7Ee6GWwaDYe1rBDo8OhyNRgBQVcvESYkOprO6TfN5taiqvNdf6xXb66O10XBQFmWREVkUcM4BgLCAM85lAFDV9SaAy1zX3DCWIiff+m4ikFlCaDuxsF5RjnoDEZ4uFjJSAIopLOqKOXrfDns9FiFLkICZAUAM+RgRQRViSr71KhwjExlFw8qNj4DELCFxTCIALAAAnS9U1abMZca5EGKI0bdN58jMSWzm+oPeYNzvjyn62DZNDG2MPqZECABKsGJS/41pPeJKbhEya6vpPIZACKpAhApAiAKkqiAqoCJKRNZaACBEAFSRmBgIUQEwIlrnVlNNicWS8SGqaOZcSswqyYhIxGN/GEOmHPQAwDrbbZ+2aTglVRXVzDki8iEgYtcWUOWUUkwSQjSGEMAYBABmjjGQMQk0AZF1ZCyEMCoyYyBzxfrG9md/5e9+4tOfR1sAoHXWiO1cRVQVFZWZEDNjoGeyzBQ1Lhtpw7FcBjDoirvR4X+qoG+BMnRMLxFdVSfHjZEPPMv/81kKgATY7/WLsvRzcFnuYhThxExIKiACYDthaCOiUUBEidDkGRnjCCVGgM7tWay1nXFgSom5awFhTAlQ88wZohAiIilzryzaELG7uggAUVQBICISVQQxRADKSqzgo6YkeZEhUSe+xNJV12qNsWRANEVZW98+fepMWfaNdd2NChXJICIoCBq0zgCBMrwfRx2BU/Ivv/Rs0zRPfPwXNndOurxANHdSW8X3vq/+TOwhFFBW6DEiixa9/vnLl1977dXnX3iuNDQcTaqjwxB9vb936f77x4PR7tVrQOTbSMQZUJFR7my/zNrYGlIVdpgNR8Ob04Ubjz/6i79AxhLA9Vu3D27eClVTlD0gs3c0PXfxntl06pfL4CPazPX6R4tFbpCQ9m7vlr0+lY6QuLvUGpcBtYsF9osUE6okH+qZnNjYDr4NnqMxIrpYLFRlOp1nzrXcqk+T9bXD6dHJ/nD34FBv7545caq/ttHLDMwO/bJa+uh9yIn6mVkGsWU/BHZlrtQ5PP+YXfIjMpV3P3jncf9PP839MDb+1sQGAhrVUW7vvffe1DYvPPO04ehIFQwam+cmhEBMHY5ijEWRQc8YZxGNAswrQ0hZ5qL3QEY4GICOz+ecIwJVUEIASgBgHGtklgiaF4V1NrIE5nxQakgAMOj3F8tquVz2+/3hcFDNZ0jQDUvEmMqy9KFVVbJGRJjZWrtqoQZvyAjaJsm0qtsUP/3YI7GaN4vpxmT49FM/XFubiOje/sHB4fSBBx8KITz73PPT2fyeey5+6tNPXL365rPPv5zZ/JGPPb50y6e+/ZVBnv3O3/3c5bMnn/nhD7/77e9eu/Lmxz7xsfWdDYP0wnPP3bh6dWNjo23atbXx9GD/1Jkzjfc//OEPz5w+vbFzArCbN++O2PvVPMcWUKtRUKQVvNEhwB3cSzbPTp49v71zsvYx+OknH7t/NBrNp/t100gMBgAQjUmIWLWejIkheO+std39LMapczYl7sTFuAQGbkNoQ6oaP5/XdeuzsjccDYe9YmdzY200KIu8KApQzFxezOa6shp2AGCtddZ2VnMi6owVVmOdqNZ13SXWKSVjjCE7Ho4smRAbEY4+WmOyrG8tRd8qoYCKSEqcYFVEGVukGEQEVvlTFGEkEzguq2a+aGofF8vaxxRiCkmSgKIYMmfPnhW0i2pvd3fXWAeGlIi7oThhFg0+JJARmf5wUpTD3iDF4EP0vmm8b1NsRSIc93BR9SeYkfkpdxwgIAESoiGoq0qSWONijKoCaBDRECqAHHd5mAWAjaFuAAiJQFMSUe1SfUUgZ40iqQIiJebYeuka0IQxiUFofGuN7YbDBNUYAwCdAFTXnEHE4L2xtmmaxGJdVtVtR6Jg4SwryqKIKaokRJdS9CECGUUjSGgdOacx9QqXoQKaC5fu/a1/8N9euPSgsDPWElHXDe+omcYYBOosIhDVEdic8iwfDkxVpxhCZ5EhAkk6cGEF8YoKA4MSAKmg6somsKMuwx0tuf+ovJQu2SNEC8gxkXXWZU1dx5jKomABAbGEzGKMcc4aMLy6YiAAEJEBZREFABEAMAAdqcA6p6opRkQ8Tn8NqCYRA4iEzhpDFFnIGQXUlBInEVjxvlTbwFHJCzYhGEBAFAUE7cKJUJEwM8aQiUnycnj69Ln+YJwXJZEVFVGBjlxLKsLGGZNZBkVlZKV3KpGuFqGKpDfffDXE8NHHP37y7IWy6CG5Dn2H9yEx/Jg0t8u07zrm72TVr7Ju6WolYsX+sH/P5XsHo/FsOmub5sy5s1nRA6RBvz+rm8P9g+2t7bzfHw/7N157hbFTqcTJYHB7UakkZiOqWVFkg/4D5+9p0FVtzI3U88WN69dJ9OSps88++/Taxrod9LPhEOu6TTwcjdqmmTf1mZM74D0J28yqRGXpjYYo0jTt4eFsPpud2ByW1oQkbV2XRQYA86ZVVSsgqNVyfmJ7u+z3r129CqCe9fSl+0OKNu9FxZOnz1y9fm08XuuNxsvqsCxcXYkYAxQLRymlRLkrBmicHttsvnv92BH490Pm7n5Ld9X60Q4CP+/1YWz85xAbHyg87n77T0NaIFRUTP7Cia2HL1/c27+Fsd3Z3GoOGEWMxQ45AIA8ywf9PjPbvGDREFISJrJIlPd6vvWG0IcIBhAtgiCYzNmug4iEBgCNNS6rfWyDFKUtCgOIIlKUPWsM9XQ+nzdtMC473Nt3eXZiZ2t/93a0xqABFVUQkZQSc8qcQ9Qux73zb0BKouhoOl/MZovLl86GajHIs4cuP2ZAXn311YceeTixPPfCC73+8JH19es3bx4cHamIc7aulpx4MBijzV94/do3nn6+V+aP3ntxtnv9Jvqd7Q3gtLm1WRTFxx5//Ct/8ZevvPLKiZ0T991376OPPPKVv/yL5557ZmNz63Of+/zpk6euXHkDUQeD3p1zyszUCfmorjRL3lpdTxEUUFSZATuP+jw31mVZbly2vrl1+txZMtliWbexnU7ng/5gd/cGMyfvc2vlTqTUmphDmQfOM+cyYwCAKDnHTdOoQpZls9lCCCrfxiTLRdOGOBgMiuFAOI2GvX6ZGwDnMgRyWcYsANgNm9zhEHdSZYhknVMFm+UhREQUYd/6rlPpnO33e2VZGsSycCoym84JIcY4Gq1xkUXftiEM8qxpfJZlMbJK7BzXUmJVjTEAYDf0PV1UIQorhSCJgQWTaFJhwMipNxgaY/r94XDZEu2lxGSMsda5jCWBkAJzSoDatMFlEXIUADDGQmGMc3nJKaTYtnWdYgBmQ2/t0DvY1AfZXHfv8R/PZ+jyMlVNsV7MEZDIEQmIIIjKyg6NOkNcRezc0VWMMdZip2wIyqyiSbrOsHPGOacptT5aQ67L9QVFmAhUIIl2vmjW0HJZlWVx55qT53lmXdM0IQSIMaUUk0JgFogpGWOInDFGRMggSwcbd/wCQrQmy7OyaNsWATgyFflDjz72D//pf7919v75tMqywhCRsYlFpKM5oAogdSWwUQTbEUYIndHcQIrUkeJAlcGocifFQGQVUKBLzEgEOAmzJkURZVHuaicllndeQhHfdqv7+d6CFYRFYgTmFBMZQDTS6RjEBIpIhhU602YAIINkbMcuEBYiBCVLBAp5nnfqFsysHQcaEYmMMR3EKyKqDIyKRlVyZ0MIZEGEgCwrp5AAjQgoYkjS5bhtSAqIhpiVhRFopTIibBFya5SVKDt9+sLW1qmiGGRZIQrKiWBFvBIQQTHOoFEQ6VoFlkjIgFVmxs6S2lpjyBCACiDs3b72vW/7+5bzCxcvj8briBaQ3k9c42dj9kvdoQccDEePP/Gxotfb3z9azheaIhnDqmggz9zE5dVyee3adeMy0RSBcmv643FqahA9vb1zsPRKmADaxEVWnjx3gW1p8vzFZ5+KbQOKIQSaH5lBf9rW/f5AQJvox5OJRXTWzhaz7Y3JwJkyy52B2f5BmQpMsSwKAIg+rI8G68NBs1yOBv3IG1VbZ3nGia9euzGt2vHOic3NjaPG5+O1i/fev7t7e1L2fvDss71eySKV9xcunO/1ei+8+PzJ8eD82mhxa0bOIvKw1ysxhsjeFL28RCCVDkb5MU3nD7j+I46a/YevD2Pjv/zYUMAUHr//wq/90idfeuapzX52+cKZp9oYl70kTMkTCIEp88IQOetsYdDa3nCUEiORsVlVVZG5cU3TNOvjiYKiMnsPqsaSpGiNIaKUEloXk3BS63JLplf28jzfPzryKS3rJitzjUl8WEYejgZdAtDVFSrclVywSjhIVUSUEDkxGdLu/wEZsarr2WJ57vTWgxfOXH399QD62EMPNHVVlP3d3UOT2a3tnfF47ZtPfjuEcO7s2dFkGJrwja9/YzxZe+KJx6/Nq3/5B39Kip//9GO8ODjcnRXOfOELv5J94omv/dVX/+TLX97a2vz4Jz9++dI9h4eHf/2Vr2yur3/6l37hvgfuu3Xj5vNPP33p0mXn3De+9rWLFy/eIS2sPvZqfB/vhAkCAZJ0XxTQuszZoih6eVG6rHBZbsjmRbm5vV2U/Wa5pJRUoVf219Y2w/PPQUEsCpEVkIJnSSmzLAlAvY+5c7lzjkyWOxFQIWYJyk3TtpySaowSI0/Go9NnT6M1B/sHnCKI2Kwg40TVWsfsVaHfG3AKzNzR+5bLZZ73bF1tnjhlkZrlwhgXOQGiscaJa0JX51qTudT6LKNevyjLnGZLALDWDvuDFMN8PltWSySMKRpjALBtW2ZW1ZRSl1m2bdMEz6LLul1WPkQNidsQEnNiiSwKYIxhTiLsnFtfXzs8mndtCOcyjBghICgAM2uKkVOKRG1omZkURBVVyeTOuKIccmhDW0ffcIrv3pzvTl5/yj13PGeWfFARQefbBgVSjCJ3TQUpAAIhGQJWAlCRO/AuEKG1ltAgqAgnSQgsAAwALAZAEQyZGMUQCqP3scjzGAKTsdZEFuBAhN0B73YolD1mRiIfQody+BBBFQkJyWVOQRNHEWFO2lVA1ibFsuhnRTmbTevFfNzruzy/dN8jf+93/5utCw9wAFW0LrMI1jo01qi1NuNuCSuosZbQdnYJCIjA1kJmjCoRUeYcOVLpEkKy1iGgYkfeIFFRUQUUoI55m1hiTG0Q7+N/+Mn66RYCKGgKMfnYQdsxCouKaOfql+eWQCNoxigi1lpAQEIktOgQUUW61o4zZMi4LBPhmJKAagzMDAgi2rFQEkfriAxqVBFBwswSEcYkkUU4JWZjLSC2iQMDow2cOCVrEAiTCIB0x59FCLTInCFQMCdPnT19+vxotGZdgUAduiwMCIAGO1MKtJCAkdBo1yCQDnHoiiJjDBERGSKDK9s1mR3t//B731pMpx95+KPjySZZh9RZpr9zf9njjtePOd7vriJhpVrS2VKTse7MmTPnzl8oe4PlsmqatlouVXhZLU2WDwfjGc/aEK9eu1b0+hfPn3/95RdNVlTNYt60/aJog8+LwdpocjQ9ahMvfDwxGL9x5frNg2kCObG9MZ3NR5N1D/Dtp58movXJZLS+ee3G9enRkQPgGHKblS6Prb8xnw4HxbAockfN0b7TVA4H40G55HT6xI4BnoxGKpD3h01bx9D0nFsrsjdu3J429c65i2lWzRZNVS3PnTnNCFuiR0dH/eGgCX5Z10hYFIWmuNg75ODny2W1DJNeZjKCLB9MTlDWOz7GeDfo8i4c7t2jQu+uGt8X8/uJ4IGfen0YGx/Gxnusjnu4yrZQQB3Ixx9/6IkHLnzn63+1t3vz45/+O40tX3jtqmfNDZKwtcZZaxBRociyzGUhcS/vjbZGMUUR3dncrKoqxASiRCQcl/M5ogbvhVlVECD4NqTYsqwyIWMzY4goK3IkM5vN1WX+aFbmhbOuHI5u7e0JwP7unm8aQkjCzmXdYA2AGkOqQkSiHe4FAmqdq0OqQprPq35hH3/4wXvPn+F6Eb3f39/P82xjc/PZ557fOXnyU5/+he98+9tXr15FxIsXz586tfPkk99PjMZm13b3/vqHz4WUtnuli81nP/sLPsTr167+yR//8fkL57a2Nqr5Ym0yIcBTJ08dHR0ZZ9c21vd399bW12bz2ZXXr0zns8/+8q+cv3jhpRde7BqpHa1wlZqgrMZZFLpGoSgS2izPi36/Pxzmed9lOQKyAJERhd5glGdFaNrgPacEoM8++2JR9AAohqgKIgkJMDCB9aogCoK9srBGI0sIgUGzLPPeIxCHGEIKzCElVTCGhv1yMiiFTBz2hBOLdFxqBPDezxeLmJJzzqAisjCnzgOUOfhQ10uLlFISlSzLjbUAoCLWYtErjEFCzPLMN1VKnOe5qNRNFeK4h6UhszZZ84tlVVeijJGdNSKCXULaxadISNy0cdm0IXKIHGKsfdvEIAqJRQABaDgcI9mj6ezVV1/3kYmMiCJR5hyIBFVRVmEEEE4xRgBMMQjLcW8VEycGyYzJ+8PecBS9b5fz4JvjzasiigiI9G47tJ9qDwIAiMhyuSgMaUYppihctSHLrO0ouqtUqSuGSJS6raSKIqDCiNAJGGfOkTEgFFNcmfAqWyRgRkDKclWIiY0hHwNzSimRKYAUlVhEQlQVQ6SiS14iYkiJRQAwChibdZ85ppQ4qUTmzhFGOilfJdcfjG1eXLlypV0st9YmzrrPfu5Xv/R3f3N84rSC4RQIwRgDhlxeWOuYaUW9IOqulyLaqQJ0XUZVIOooNwIAxtoizztGKABSV+WqECIiiAJQN2SlACgAAIS9XAT1p5Tffff64LXNXZNxwhIDipZ5CQAcfWJlxZA0pRAkjXqFVRRWTgygpGqtJSTnLAAmSWipYyawskETYgwhMLMx5vgmJCklESEyqqKSOkRYVRXJGptSYO4sCUViTAJREMimxDGGjmJ0bOdH3XAkgebOZMYimK3tkxcvXt7Y3O6VAyLLIl2e3blSI6qCGEdgBVlhNTsLQMZYVVYiVCVz1xKBVVMCOIX6lZeeber67Pl7Jusb4/G6y/Ou4Omm0hABVC1rt/fe/1R2Z7+b3l3dPBVQEUFWJwSLXu+eS5dPnDgZQjo6mnmOSVk0Aeh8djRbNAqm3x9kQzPa3BqvTZoYkmgx6FWhZpMdtT7LbN1UJ3a2Q4wM6sr+62+8OW/aU+cu1DHeuLHLXqbT6YuvvFo1jcvyto3LRX3fPfcURa+aHkCIdXuU22yAmFuQup2Mhjgom7n0DYEPZZaNNyYZ8GRrq1cOEKlpm/HauF3Mp7durPfy4vTW7ry6desaB57WflY1BHrq3Nmtrc2t7a1XXn9jNptvbW6VmTt3+kyWGrk5bSq/bBkRTEpssgZoMFpTY46rCQS4W3FmFbt3dZnfGoi5+wXvPhfvWf3/DcB4H8bGf/Gx8UFe+c7XoAIoKHbnHEA/8fiDv/D4/fu3rz7w6CMbN7eefvYlKvq9winAeLwOfgmQjCVS5RgRRVH7gxEoLBeLsizzMi97pXMmJXYu45BSW+dEzrmOX5CCXy4XHKNwVEU06IgIKSvyBHK0XNQhLqoKrB8MBrv7B1lRDCaT0HqXZ0WRN/MZihIZBmBFQiUkABCWrs9PxhnEkMCLzpqmblOZmfMntoZl8fTTT50/fbJXFq+9/sb58+cPp0fGmLI/eOHFF9sQ+v3+9vZ2U7df/9q3Jusb5y5erKP86Te+czBbnlkb37O9NumXe3v7g9FwuVw0VTM7nP7ar/3ax554/C/+4i/++MtfnozG/9Xv/SOw9NU//8oLzz5/7sL5L3zpS9PDoxeff/573/rW5QfvR7vSQNeVMgchgCp3FSQhKSBam7miPxgNh5OiLK1zSTtZAOyXpfcxc3bU74GkulrWTd0R8kb93mi0RmRaX62EBJjZEqmaHIMCKCaWmLhf5oaoTTEoc5LOE4sJU4JuDHBtPNhcm4x7fc3d7b3bkqKChrYB0Y4m2MbAyswx+MZaVEkxtJxSU1fFeFRXC2TRFOvlAgGyPEeiGD1zYnbz+dHGaAQKwSdR9SFYAgCtm2ZtPC6cc86qj3XTRE4AAmhRoKsGmKVpvYjW3geWxqeQOKSwbJooLACMmBQFUAFsVqJxdbWcz+dAFsmQMagAqNYZ5yxr5KggklJKHJ21FjF1Qy8dxwLBAChAYCWwphj1bFlw0M5LDTpWCXS06ffcd+8od99dqd55RlYuO9q2zWy2X66tC6cQQ1CtUgRnMjQKCQEIULRz8BVURUSWFZupc3dT5VZYRJyzzhqyBkRYBNUwgESNKYYkzhkVcYbkuDeibeOsM0SpTYaICFQUUTp565iSsY6OQUQAjTGockewYQAWRTQqYJ3LBpM68uuvPospbY/WStfL+sPP/soXhoOxzTMASckTkVqDROScNSYZFEkK2m0FIgNIckfiDVVWMI0SEhBEYQoxyzIARQSW1B1PWXVGVgf4GELtBtHAECH9eLvnD7beBVW888d452XU2dgJQ/LQNpgE0IEipECA1hgBTCxN9Cmm7eFAyISYHGFOSEogAmKYu9vyiqTeabd1znMAQETWWGMNcwLIOSXfBo5J0VpHqhJCIENBtInJxwSKKpqg47JnLBq9R2awRpFIsYOEURlEM2NyQwC0tr5z8eL9J06cKouRtTmAQucZgdQNtyowEpgMIggpMsMxrI7aCQB3DGNDxpC1pnssIl31ggREcvPm67duX+v1hhsbm5vbOxub24PhWtEbkHUGEJF+CtJCx/EBURQgVxRb2zunTp0m6w6ODlUxJlbo7IkJkOq6ns6nE6I2hnnTluM1a7PRZH0wObzy2is7W1uH00ODkosTMLFt8uEAQti/fUtVsl5/ebjPLiebUYG3d286a42iXy7HRfb6yy8103m/10+hQU4OBFXm86MMJCd6s67XyhxYmtkCAbIY0dnB+sQxTw93i7KfO2dUFrNZnM1vVrVxNtb1hKxP9c2DPYd2fvOGpHDjcLpsmk6fdXR7+MgDD5RZNszNocmndfCsNivKQXm0WMhoNFhbW3ohQHnX5emt4H5fHO4nPhP/STSs37Y+jI2/BbGhCICCAAiGNbe4f+PNl/Owtjm5ePn+b33921//+pMXLl+6ef3W5s62941fLCejQUoyKAtyWWacy7IYvHOu6A/QUNM0ZVlaNElSmWctpwSpyK3LezF6oqQqWZ73RAUNcvIsmthalxXF0cH+YDQhY8teT4mMMaxirT04PKybZrPfb+uquwGrSvSJACySM8SJrSEVNgYQMQhEoMXSt23cGPbuvXj2l3/xU9evvLF/e3dzMtre2gKF5557/tSZM48//vjLr7/+xhtv9Pv9j3/844T45He/G2PsD/pbOyf/3Z9/dfdoeWpj8o9+84sFph9897tvvPrKvffd+zu/+duz2eyZZ57697//+/fdd+/a2tp0vjh37tzT3//BxvbWpz79qeV8Xi2rb33162fPnWtb/+Zrry/q6kt/7zcA/gV0V3QFBGBBMMbZjMhYl7s8NzbLsiLP+2hd42OsaxDJnOv1+zH61rcb/U0irOu6qmpRNsaI6u7+XlOYra2dN6+9ocyAgsYk5sBEMVmSEFOROxHhlDJnXeZcZoXVkFGAyBwix8TOGiTTccCrqj44OCpz13rvfTDGdUNITVOLSNu2kiIZE2Nqqa3quXNmfrQ/LHNLNrRNinFFPFa0xrEgKvk6VFWbORdiDCEKQ57lRZZXi2V+NncG63pJgM665JMhIwmEExAkLz6EbijdxxRS9CE0PqaOKAwIqqJKiJGlLHtlWTZNQ4RbW9u39/YJSURQAUCMsVmWRfYRugwwphSgKDuXuG7WDY5LERFRiSAKIqBkTPHOqZif1cZUlRSXi+lyPs+2tjuIDkBT4hiTOvNu9BBXwG6XDK64E91wetu2MWKWZXmWOZuhMHNi7YiWFFmTRGctJBFCBHTGsaqy2k7JTQkFwNgYGCAiGVkplilL9MFDl1MKW2tZIQkpGSKXlSWLvvzqldl8WRZuczIe9Pvzqn7wY09sbZ9UNFSUMTEndlmJRMd6aGqtcc6pqoLGGEW006ACog5kwc4vUZWQum5N2zmu5Xk3M/f2c4LveLA6OO/RWPv5rVWG3qlngQKIRh9TZI7i29g2XlIyBgk0s6AJlbFt2kMVGPcHZIhBCEKMSCTiWcCQFU4dpWT1vUSUBRFpJU6o3WigsBIRE4KgteR9ZE5KlJKkxJFVgRQNMyAaY0zTNl3q3HmwATB2hCpVIsyMRaT1ja377nvw5Mmzo9Ekz3qIpoONO66tASPCAGqcAew0Izr0Z8UzvjNIhytiP909WrdCj61BMgDofbuYh+Cr3dvXs6K3tra5uX1ia2u735/kRc/eOak/Eih6y25iVU0qAtnheHLx0qXheNzU1dHBQWLOi7LTi3EuU5GO8HFweHjy7Kmb199kY44ODyofdw8OT25ubW6fkODL/rBezpyQMWbZ1IdHU6O6nrmNtQkj7d26sXPh0mhz/WD/YNgre1nWLhaZJSd8am2S2vnRctr6oKqZcz1nl8sqNyZzrl8UhTMDZwrb5kjzRd3LbFPXy/liMBlXdV0r7t64ebi/F3xMisvWe2EB9AjWZL4NbTNdNtW09lT2t7e2E8hisZgdTf3B/vWDW9vjQc2S5cXGeK0ssptNyIdrodsb+rbprPecK7r7gL/fFNFb4f8fNZ39MDb+C4iNnymHAVejbZr6vfzsztb3vv3Vh+47/YPv/fDKq1eHw4Foeu21Vyfbp8vR2tHNG15EFAnJWGcAJDGyOkOEwKwxRRF21gEnEKmWlUoCUDKUZTkAxBCbpk28cr3t9QYaQhuXIfhmmja2TyYFk4WRc00ITdOsra31BoM2BGPNwf5+aOrJaBBULACzZNaqJI5iEBWARUAVSFvRRR1az6MyHzjcGORnT23WR/uT0RCB9vYPGu/ni+UpIJfn0+k0pTQej0MI8/l8MhoqyGRj61//wZ9eubm/PRk+eu+5g5tv9svs0Y8+Iomb5eKrf/3XZ8+da5v21q1bIPy7/9Xvfuazn/13/8e/uX3j1ic++YkHHri/KPLnnn52MZ8bZ3/tt37jjZdfvfLKa89+5/u6GpsmMuScI+vI5dZZY6yxrmMYxxiWyyqGzrNWnXVlWczmhynx1tbJzrV4uVx67/Mi68IgxHj60vmbN64gkhoVTokViUJiBIQsIwCfBI1QYuNcN5quxza8ibmNkZkVtWn9bLl0zs6bpmmaInd10yyznAXyPOtyC+990zQWVQyoiggvFrMsc8baG1evMKcu06oa733wISmQCqCAsbYNbYqRWXwIihBTQsDlcskpFbZAxejjapQ+sbO26137lAJLjMnH2MbYNG3jI4smgaSQFBRIRBVRRHZO7CBiXde3bu26vMzz3IfYNb9VVTUhoiGDANpRSqNnDlmWd4JWd+9H7QR1EyMGICvvse9+gm34vjOpAAgaQjs7PEjRO2tC7TsMU1R9iizO3unQd/QRBQJQVYOox1tYFVVEURVBRDVGFimy3FljXf4Wu0JElBMDiyIoEQmQJcOqIoBokjACMKqKIlkSFEUBY8CyRFUgNKoSOQFhQjJFv+z1k8Dtvf3rN25aYwdluTYe5hktqwpM9sUv/QaQdYMhkJEQQNFY1/HjVFhlJR3RqaM4ZxOvPMCNIcSVv5aQ0vHtCYFQuLOigLtSqG7dsVaBlUkndK/prjo/ev0Hkq3fdopX9wgRTsIsKYamTT5yksVseXg07ZdqjSWJFkEMKaEyLpqGNeLaWMFoCl0C2/HUQX03vaqqXax2hVn3fZnZgo0pCssKoULDHFNCRINEMTGLIhlATQIKhGQUyfuYUnLO0UqtAxhk9fkVHBkiu7V58r77Hjhz5ux4spHlhUHXfd8QwipnVVQUQbUWBRWgG5aQ7lZFxyLP8PZ8F47vZd0vIes61kTwQoS5Q0PKodq7VR3u3bha9ibrJ9Y2Nu37baT3OB+rlyEDlWX/5OnTO6dOkbXTo2lbV1XVoKEiLwEgtC2sZIAMS5jNZunsqcFosn+0X4UwzvKDvf0HL99nnX3yG1/FtrYgo8GocHbZ1gTIrApY5lmIaZjny+nh5smdoswyGUyPjk5trEXfZChZRr3BsMhzYWnaEBiICDlZwqaJy8o7a9YGpaVQuiI3KTNQ1q27uVeWeVnkIrq7tx9EvELjg0/smSOzirIqEW6tjduUXJFn43XKizp6AkCV1Cyr6f61ZilFKW28eftmORprOSzGGwJoDHXeHe/eDHeH9Xv96J2Zzd9gHfne68PY+DA23r0UFIiQUz+3j95/+b6LZ6/feOnVN97YvXnrh99/+rOf/cxDH33kO99/yrS+HFHWH8IkJACO0TbtuFcuq8oYk4SFMAFG1ug9x9AvMyDbLNs8z1mNb/10uYsieZ4hmaZdxhCMzQLzbDa3eUaA86aN0zkS3dq9vb61vba+sbt7ezJZY5HFcrm+sXH7xg0EDcGLsqhk1qYYVLkzqAQEQ9Zktgpp0UZQeuwjlya9TPzy8j0XnvzGNzmlJ5547IUXXwopTiZrw9H48Gj6zHPPra2vb2xsFEXx7LPPtm370EMP3vfA/X/4l9+8cnPv9Imdz378oWuvvvDitaOPPHD/vZcugcK3vvXa0XTetu0XvvCry/l8f2/3e9/5zubW1uV7Lz/4wAPL+fz/9f/8fzzxqU/93j/7b19+7oU33njjT//gj+65eHE2nb7w7HNErlf2iqJAQ8zMoimmEGJnZyqqygwAKaTQekTI89xbU9UkCuPJ+vr6GitX80VVVcas7m2J0+mTJ41x589ffP31V32I3XSVIQqJVUCUMmc4qoISoUkpMNokztrADACROcYUU8zyflYUKfF0Pj9aLiNLXTdV3Vigpm7zPDPWVk3dtG1KiUXIUNt4RMpzaNsWYcYcQgjBJx9S07RV65UMoChgE2LThvmiKrO8bduYUuu9MSaEWC3rw6OpjIZt8KLKoiIgCiFJRzaMSdoQQ0iJU9u2VdOyQjdM083py8oKV6kb/CfilERkf38/CRhjkEi5S+0BAazJDNqkrCy+9TVV0uvgwrfS3JV2vnT3e02qMaV3+QL8JHvt/atTVW7rha+XpGIMeWFE6qyJE0tktvbYlwcREVABUUSxa8l3BGy4q5WuoJGVmRM3uXWZs9ZaZ4w1Fo2iikEkJBXpdg4jqkrqBNSUDKECIllnrRCpKpOhLKdMlFMn2duzkyzLIlCI6drNvd39A+9Dlue9IhuURZmZlLxn+dQnf+Ghhz7KIuVgoEnYJyJLxigAqrZtk1JQPE6GhLXzgUA1qAah+yCKRIRIgMeOHQbMyvy5AyTvwnTvpovoMc8UEQ1a+TkL595J3VRZhIVFUkefjZSihsgphuAXi/nB4RTWizJ3RIgiAGIIiZAZ6zYeLSod9MGBIbWGokRCWtWlzB1RAQA6tRNhFhEkiiHEGI2xaEzrfUopRk4KAOoDR5E2sk+qYBXUOodol3XTeA+I1thO2oAQDZEoJGFUzFx25tS5e+65/9SZ05PJus0KazNUkA79NSYd59GMSBmCAVkJFr/zsHSroxF3mXrXMOmeJGOQrCFEUkMImrDjYSNaIkQJzeLm9frWjSv2XeMvP+J8gKoi0db26fP3XHTOtW0bwuLw6IBDZFFAjHngxMYYH7y11lrLCaez2aJq87KP00NLdPP6VZv337h6TVHWt7f7Fqe3b6O1IcV+WYwS7B/N65T2Dg421zfW8v6COTRVmRmHPcsRh/3l0RFEH0IIIQwdntwcF9lmE9QgTXr93JgQdTqbKwCjOVzOA8vhckkIeZYBSD6vcmOMcy1TmfdN4p31Sb/MjDOCkJIIqEhqm3retuuD8QKtyTPP4cTmZm7NbDENwddC/Z0TPFuIwt5imW8MbN7TrrlozB33FH2fcvC9jvbPkk/5M1kfxsaHsfHupQgqPOmXH3/kwQfuOVdY+B/+2T+5efWNby4Wi6vXv//sc1euXX/q+RfH67O//+DjZdnbT2F667YzYAOUmbOZnS8WaHDe+nKw1hsMrXWHewe6MWxjQnSRtd/rDVwZOS3m8+ls5ts2hJTnhSBWR1NAyLLCZlmVZF5VxtqyP+jkkXa2t1+7coVFszwLMaytrR3evtUpiKkIAXVsRFEwhlJKCoCBjpZtTPLEI/f1SHbWBx//+GeQ9dkf/LA/6J88pQeHB3pw9NnPf+7oaPaVv/qKj6Hs9R577LGXXnrJe18UOZL95g+efenNm0VRnNocYWzuuXiB+Hw9n//ln/zFPZcv/vZv/9be/tFyUV2/evXsmTNP/fAHV157dXNz63f/698b9Pv/5l/+61MnTvZs9vzTz/TK3v7tXRGerK391u/9g6tX3vxXz//veZ7HlKq6ajq/huMRT0QAQtGVQwQRphgSQUY5SzLWjcdDl9nlclFXlapaaxU0xSQq165fj9Vy2C8FuqEdZIHEbBBFOvEp52wHVTaqmhc5ImpMKhoTA2ISRWOzvDDWCcBiWS+rqm4aVD6akjJbsoOyIGub4GOMIgIsTe05JRbOsiz46Ew2n89j7EwhjIARNEk1pBRYJPFsPmfmWJR1XYtqEq7qpvbexzBfLAmBOZJAYlaiGJNqMkTOOGNBWh/TCsFdqdarKoC1LnISSYDIKZX93vb2TmJdVDUSpZQEyLwF7x0PcaGx5Bhi1/aPibmq7kYBu46tqqICIaYYQ2g5/Vzm9FUker+czVPwhpDIdE1n6YaxANoQS5u/7VqAgIgE0MnI4h3PL8JjTwTQlUUwtCH41htjjLGZtVnmDKEQWUJCh4bQEKAKMyASmY4PoURkKEHHkSWDJghZ5xRtSgIArdfq6OhwNj+aThGgyFyvV1pDvdz1csfRW2fV2d/8nd816EzfAZD6qJFNWZKxCAAsTd0IsyLjXQtASQVUUZDIAGBSBnSERLiyf0AB5yyz3IEz78CEb+uPdQ3xDs3tZqp+nqvDpDuJwxBC9G0IPnpPiIPcGVRVrpaL+Xx+cDRF0xv1c4TO7AMUAREICQCrxisAFUXmUC2JMCrAMSASY+y+7B1NMUTM87zL6Tl1zO7QhsgsRnMEFbIszKtyGlXBuKz1qfUBEK0xXYLbsQdURZJYMsPR8OL5e+65eHlr5/Rg0HdZAbTSAYsrIxiLIXQlCgIYa4RYecWHXj3/Vuq/4uZ2ae6dH62gXNMR0BBAUMEQOWM7/AK7D6bkSADYQleMAXbjRoCqyADQSbHDHRYPqgiWg+Gp02dOnjvvcjebTo+m0xjDcrEETghIzoW2Ni4D5+aLaYiBjAUg31azpl7PrEGYLxdFMaja6oUXnrvvgQfOnb9nMT3E3oLyIotEqmVuyIK6nJ0rBgNC0pRyJJvlaxtbN0XDctaz4GxeE+0tK6j9qKjH1hZ56T2jb1zmtkbjbYeFzcab2+qyKqSjup4tl9PFvPKNIlhn1ydra73RzmTdqkBoQ7tsQt3GVGuLBJXnQ9+UZZ5n2puscd6rgx+URWgqTlInGGyMyTlX9skVPvKpC5ep0yiBrm6+w2nXO0Mkq130vgSAt54/fs27d9jbEqOfO6T3YWz8lxIb748JvQ2wf8+XoXaiNNrhJKBxVLhH771437mzFoVFS2MR1GXZ7sHs2999emNtTRXHw9Ebr79irJls7WQuO7x5Hcjt7h0iJ2ep6I+EbBtDJkmFE0ArGBWT9yzKzHu7u5xCXpa+9WSMGFvH1IbkBdA6tNgfDXRZ1fO5U+n3ewoqwsuq7ijaVdWkGPt5lmcuxYSA1macUpKACgaMMAhQFFksa+voc595fNJze29ePbp9yyEoYb/fH/aH+7f3rct7w9HV69en09loMmmaZn1t88knv5Pn2X2XL/XH41ev7n73+deco8fuv9Qc7r5az5947FEH4uvl2vpoPBkOBr3RZPLv/49/e+PNq6fOnPnkL3z63Pmzhc3+4st/MpyM/+E/+cc3rl//yz/9M9+0n//iF/7P/8v/9MPvff/662987c/+/OzFCwl5OTtomqaz4XUuI0NwPKW8askigILNbeQQOBm1gIjGFHkefNu2ISZvrQUUFRRNANK29e3DYPOts+fOvfrK8wbBdjAJduPpFCQqS04uxOQsA0a2CoDGWkaMKRprrTGAyAARsA5x2YSmDdEnVJuSIYADt+issFrvm6YBUQTtlTmjifEwbQCoNdYCWVFOzD5GARCkyoe69YroeemT1N6LSGKOURZVe3A4JzImc0k4xmSNsVmWYhTvY2JnLXPqeLfGWt+2koST8jH2GjrNrWNjueFw7FyRF246r2NiMkZiAkYVPWawKgAqKhMoEQoYQFIVTt0V8nhDriYyUZVFg/cphA4qvrO5OiztJ4EPELppseNzrd3HAm6X86aasUTE3BmHotRdW1BFMCZICg46g7OOkgtIwB1fQTooV7Azl9BO2F9UBSwhkQpGZo1JpVVVc1dS2E2VmeNc0BpaRaAoGUIiBuogcDKGmVVYlUNKCpCSKDORsWRyZ/IMi4yG/V5OYIhjEmV8+PHHH3308Ri1NxiAQvJBELPMdG0k5ZS8J7JK7JwTEQFBUGZBABVIMQFANzjWsa/BWhFYkVEVEVBFOCVrLaIFxGPzInzrGro67B0o/7O6yXb8kZVPnqqKggjHGEJsg29D27RNE2NQUaPaL3sWMmSRGJvlYrmsqphwVm+vx35OmYFIGAJrxwNS0STVsmYfh4Ne4YwBMaidTB6CWoKQYuJOX0xx5VUmRKYj2vgYRVUUACH6BoxhpZiUxWgXJIBNkKpqVDVbKdiiATJEzKwsztjtnZP3XLx8/uyFtc2tojc0RNZaMkYVFMRYIyxdlKKFwFEMkMEuKWUQJDGdn+Pqtoid5t0xExcIbTcvS4SmG6ogtMaodk6ZmTEG0KzOGoICOmMAoENzEQFUVtO8d1l/dFaCCgBKuL1z8oEHH3Q2r9p2Op/5ul7MZ4v5om3qFd2djDWmRGpSFOGyLIqybJtlTGGxrPqDsijLoiiatgUC75vcOTImJBmvb1bLuW9rTNESDvo9Y7Ks3/cCg9INytJaZ8iOxqPQ1tPk20MeDoeZDUhmf7a4etQkz2c2aJSXFpAExce+tdD6eHhgy3KjPzqxvR22N8GaRVP3y55vvc2sJgFOliCiBhGNSgClahXC0XLhMrc26MWUfGhu7O5XbbjOfHJrPR+MeDZnhXpRTafzIHzxgY8WRT8kuXNZguNh+W5w5EdvlOPa5W3/C++B9v1N96k/jI0PY6NbAoiIKkIopzYnD9936ezOTlmQcEgx3L65tDa/cuUqM29t7zz8wH03b+2+fuXNqq5/6XO/vLW9fTP49RMnS2tvLJYWiVmmBwc2L8maNvhhf3Awmy6DL4qCEPOyOFrMhCAvy5iSzbL5YtkGPxqPhbVVHY1GasAL571yLGPnnPdeIVVHR97Hfq+3t39gjePgZ9NDjrHz00rdfDGgqrCKoqkT1CENCvfog/f8vV/+paO9W7dy55y9dvX69evXP/LQR37wgx/2y94nPvWpN6/d+OFTT8cYL1y48PDDD7/w3AvT6bRXFg8//FAl9Pxffcda82uf+8VxTi9WR6PB4I033xiUxec/80uI+uaVN/7tv/hX9z/88Cc//clvq+5sba+NRvfde++/+/1/d+36tY9urN+8fl0BLtx/76g/CE3zjb/6q7X19aquWXi9Wu7v78cQEMAa66ztiAddKLwN48du3NxwSiJqnCmKEpGaugkhMidjugRLiAiiAsLRdHry5Nb5CxcP9m9ND/YMgSXTEVITs6KKCqjm1iZm9cqiRARESTjEmCORc3XTGGtG4/F8WSkYBXO0WHrPy6rNnOv8vbv0KMYYoy9ylwBCktLZyFq30h/0ydiYYogxxNA09bJuax+OFpUC9vvDJi5hKizdmeS2CSGF7c31+WJeGyryrEOkqmoJgJmzCgCA1G0WVeaUWEQ6Vi2zSFdoCqgCkCFrrbAmTk3Tdn3bjoO7Skugq+8VEXBFdlFkwe5IdjnrceUpIqtJq5Q6/KzTR/sPXW8pOyIiKUqKYbmcx+hZxFpyxjrnjLO26+oCRdHAYozpxPqPg0ZXTfnVhQQBFFQ6vxGClcrWynivK28BVLWzSFjJGrASdJ6ECp2i4PGXB4TO8aNT+Eci6uBjlI5hAKjGGks2s6ZwpszMoF/084xA2hCKXj8K/cN//N8gmnxYoHXaek7JOmeM6+DoFFrvayRIzJ1lQIgeV15oq08rLGiQCJMmEIsAoirCStoJMHQyc7EjnRNhR+bpaPp3fgusYImflc7CqmJCQIDESZhjSm1bN82yrpdN08gx4GqAnLWZcwSorCnGpq5b3ybWo0W1bNoyKwxCZo1HeIs2I6AqVQoskFnqFa50loWZgzNGV9OT2hVd1lhrrIgKd9XZakzSGcNKgKxklSFJJ8vmWKBumiZEUTBkLJFZwbFdbQyj4eTs2QuX771/a/tErzfqJo07jsExYo4AJlHqeFCEKCJkCAk66T88HpB863hhd1UzHe7bFVl4TDg5tsMgaynGJCrGdLQac4e03RWUeJzmHv9eEJBOQAM7EEdBBbEcDM7fc/HixXtUcXd317ft0eFRU1cxBlQBToooqobMcrkkssZZIur3B0VZZlnm2+rg8OChSx872pfTmbt6c7c/XmvbsH+w/+BHHrx962YIYXN7+9Zrr46LIjTNqD8QY22/f7hYmLw4efp0f7zmm/b2rWuQeDGdi1Db+MKZjTIPMe7OK7C5HB2d6IWt4ThzpJgEDWYkwAgCHDioIYyRXRJYsmVmr0W/F6IPwaeQUvApNGSh18/3Dqtl8Dtr45IgiFD0GUhmbNU0lOUCGImmRzODZr5YuMGg6PfuNEAUEGmF3ME7ELb3jP33L+jvymnee6f9vM0kP4yND2MDVu1AQgAS3VkbfOrRhy+c3m6a+uDwtvfNwe3bLs+RsK5r41wG9Oprr8yn86ZabJ3YEeBTZ88++9xzZZ41wvMQHOjacJTnuqgqbiWKVE3DKdnEVVX3B4Mmxt54NL95czQeLw8OmqpKSXrDMbnMN23lg2nbvMivvvpaE/mBBx/s7AC89zGmXlmgynDQTwrz6aGyxJjIUIiRyIiqVRAwrUITWh/45Nb6Zo8ef+De537wvWo5e/Txx86dPf/P//m/BNWmbg8Pj+xOVpSl9633oevK1k1d9MuiXZ4/f/6FV9/84StvVjF95J6zspjt71ePPPLQqN9r2/bXvvSFl599brmY18uKQ7xx9epnPv/ZBz7ywB/9u3//h7//+/3R8PGPf/yRRx+9ceXqH/2b3//0Z3/x937v9/74D/7o61/56qDf+5Xf/PV/+n/9H77/5Hdeef6F0HoEMHa14P0Lmo67xinFxL3BcDQaAUDTNB0FE1e9RVXVlGKMoWma4XDUy9fW1zeqxZyjRyI9xi+RCESVlIzxIVhrwRhnjY8hcWKVZVNH4V5ZLqtq0AzKXm9ZtWRsE+Pu/mGRFdYYc2zT2DUrM4dFSpE1M1RkbtGGeZvy2ZyQsizzIYQUYgzzRTVfLpsQmxD3p8sYkw8tgEDnUMW8ubGWAGbLejTscdOgiHMZs6zmbAAQMcWYEqfEHFPHTmFVQEyJA7N2yCCLsa4syzb4yKsmaYzRmuxYlxjuHDRJbJCsMZJYVBLzqma46/iLiDCriIpYa40xzrmf0Sbs0GLp0MjQ1r5dIigqCosxJi8Ll2VEpAqKGEWaxJkx1DFTO20tfGt61BCu0DtZGdt26jfdX+vy9W7q547X5irV6PLAO2ny8RHADvHtJCihS0m6RMQIogJYaw2oJUKgMnels7mlDNAoCECvP/BJP/1Ln3v44Y+yaN4rlVPyQVXzLEM0nYm1D977mkg1rWbOnHMpJeHVnH53RpxzgIAdaxTJuO4rCHUNKYXOo4RFjSUko52+GjCudIV1hYErw/tfhH/kwrc/UAURZUnMKbVtE0Prm2qxmNdNlVIwhpzJyDgEuDNXhwAsHGOsqio0LSIt63A0Ww5yk2fWEuZZ1rGNVTv7QwbREJIzGELGvV7myAA0Maxy/a42ESUERIwxUVcbi6SoScRYpyxgnSgCgs0yVqybtmmjj6yKzlhLxqB01AARGQ1H29snzpw+v7NzcjxeK3uDPCuBEDrA9a2OxIoSY6wlsRKisQaNisROGf3OEbuTF3ecDMLuwyIAGEMdyfsOtdp0knYpIpJzzhijQADylhQDAd7tgqZdxXpHRwMQCV2eD4ejBx/+yPrG5rKq9vb2FvNF8m1VVb5tY/CEwDF2U+TDstf9+bwoRFLnn9l9mqquveh8XnlfxxiPpjMQOTw8eP3118mYoiwH48lgshaWcyK7vbl15dYtz+nczsli2D+YzdW4cb9X4vDmlSvtcgFKPkbSZBE2+zZhn/qDW20zmy4OW39+fbRWZtYWw/7YGetcZqwJMRhrDAK2seFmMB5FYfEBEqeUcmegMFnWa2J7s5rv14uN9fEgy+q2bUTZhxObG1L00diyyJNzk80t8KGuGjXu7D2XgWx3ChkYEVBRj5VIul2n+tbl8n23xbsSl7uznLuby7qax1Sgn3Oee9df/zA2/nOMjQ/YFf3Rr+wk5Qn05MbonlNb/ZxCaJ01w0F/Z2fTIg6Gw9s3b25v7fzw+dems4V4b63dObEdoi/KwhXFYLwWmnpZ1dlgsDw4ZJ5t7WyNs2x6NJ0v5l0qEGPs9/rzaml9i4ZY9eU33vDBI9rtnZ2qbqbLZZPSYDQGAkDc2tqZVVUH6qyvr9+6dSvLMkKql/M8zwuyeyrGmATQ2YkadCKcGLzoIrKz9Oh9Z+45ufFLv/jpE5ub//Zf/yuWtH94tL6xnVnnXLZ/sH/i5KnRZPJnf/7nw+Ho/PnzqjKdTt94442dkztf+MIXb+4dfu2r3zlYNvdfPv/ofRdee/qZpl4OJ/16Pju1vfPNv/qacgIDp8+fO3HqxMba2re+9rVTZ88WZV5Vy82NjX7Z6w8HLz/3wn333Zdi+v/+r//rgw8++MXf+nX28fqVq4eHh2vra3sHBwbAWHt8BX/rdOudYKC70BLT2dFTWfScy3wbFAgQurd37w0hdPUbEb3w/POWdDyeXCfDZBXIdP1JlS6vEsDI7KyVrr5FE1Ng1uF4sqyWRa+/vrExPTw4OppmWZY5B4DGuibGRdN2DR9lQaLOGyTP7XDYa5OUmcsiF1EqnwwaACBDKqqgPsW6bZdNO1sup/Nl8EEVjUHnrLGOyGREolrVNSfbG5SkHL3vkelczazNOjs0UggxhRhFUQFFpbMrEAAWEUUgAuUsy/Ky7PUHN2/t+Zia1iOZ7vASvrVEpLOXJWNSSqqCKgirQ9rN99x5mTADQGbtu3PcFVD6/joq79jmq70JQIhM2klNSfT1YirJgwh0tgiG+oNhUfQylyMQIiloiCm5zKzElhFAcPW9oGskdZJS0h34FdALndvCXReTt302PI49XMk3vPXhV1+NkFZgMapqh+p2DAcD4BALY13mMmsyQ2Vm+3nujFFCKgpS+0/+6X8PaPJ+AQa15RQjWUPOdmkTEMTQphhcLtaY2BkiHJtIdzLeqtpVg50AVcfhICQiowCmY3GwCAuAInYZuBCAEnQMUTnOcQlB5cdgEe950e4aX8cHR0WVU8evCb5tm7qqqmVbL4OvRRgRrSFnyFhLSMKCopnLDJCKqmjwvl5WKUYFbFn3povxIJ9QYQyVueXkQNjHxKzcqcCJBsKQUmLtlVlmgXR1flgBFJQhMBsD1riYuoQfExhGYkEBmxhFoQmxDcnHpABoDAoYBUfUuVgbMr3eYHNr58zpc5ubm4P+xLnMZbm1GVqCrsi4m2ULKMqdt3CH9VhjFJlZOumV1S1xlc52UwErDu5xab+aDrwLJO6ydHOn4DHGiKLeZQL4zjQXADpiMhoqirI3HI7X1iZrk/W1jbLXr6v68PBwPpuFNqQUfGhj8MIJrcmLvHOV7vV6w+Gw9aGZ+hg8MyOAtRYR66bePTwi45IPZa+fwO7v3WKEm7dvffGLX6yqxfNPP7W+tR37xfzgsFeU586efe6VV1589dVTO9unz5zJM5d8M86KnbVxMzu6cftQrcls5hAnZRFS1SrD2sbB4dGiDpVMTxTZ6fFYGXY21vu9XMlltkRjUoxWjeeEhGVeiI+iMhn1Q1MlbufMbx5Nb8zna6P+5qgffWiSWJergiVa39oWgqPD/X6/X5w8sTw8akN8+GMf60+2fGBYNXaPTwlRF+h3aJj4PvDaB0lu3vuNXbX5N5Tofhgbf3tjAxUJ+NL504/ce3FzVCJpDCG2raqQcL/XO3VyZ+/2zVs3by4X1WLRDIrcumy5bAMvr1+9unPy9P333//9739vfzqLTZ3leds0IUbuXHRaz4lt5kLjY0qi4qxbzueL5TIBbm5tra1v7B8eHR4dZZnb2N6+tXcwHg8j8+bW5s39/eFgMJvNjo6OjDGDwWAxm2VZxsw3blyz1qbo1RgViElDSKwSk/oUncGPXDgzcWpSs7M5FokPP/rI9evXiqz48h/84aWLl556+umdU6c//Qu/8Ad/9IeHh0fT6ewTn/hE0zTXr99AxOFgtPT+6sHhIqZhkX/2iUdLiuUjD0ynsxM7J9549TXchh9+7wcs4TOf/8yvfOFXb1y/9uRXv/b6S69eefX1X/71X3vk0Y9eefnVP/79P9g5dfIf/ZP/+sUXX/yzP/nTjc2N3mD4wCMPf+VP/uz1V17Z2dm5fPny//i//M//t//ft611eBdq+P4nHRDBOZfnZZYVwiKqZCwiWWs7dUw9HrsO0bdt++KLe5/9pU8f7u+OJ+u+bZeLGagawQ7a6khvdeuLXEtjWIVVIjOrHE2nMaXAqarrfln4EAlp0C9ni3mv13NFFprWkAVFxkRECRQAQhta4VnVTIb9Ya/XJtZlZa1VEbMaZcGqadoQlnWzaFoBQOscIhm01iCgiroiN8ZmWZ7nLoZIqDsnzx4eHi4aP5stTpw6VYdate0XBYMqkSJ0vF5micLQeSOLoIKIjCdjJCRjhsPhrb3dxGLIsAKBwtsHlRRAENEQWgNEStRh1TFGVXXOdcVq1xR2zjnr6AOctQ+8CTvMVYXDcn7UNgvqrB0SKwgSjUbj0XA4nC8dGi+KgMwSY8qc0RV7e8W4AASDKCpkjAIiIwKIKKgo2s4MgQDQGCFivpOuAQC8pYV4TGm98wTh8XjQ8YPuccf8sEiZwcKY0mbOEiH0cpc7SwQCMhpNdqeLf/zP/i/nLl6KUU2Wg7DEpEmMc2ANEggoKrZtS0S4ooDd1WzE1ZnqmAwi0unBACILIKIhIyC44rIjEQEicIIEnWPWsXZrZxkDpICAhOan4IN1FVH335RSTCm0TWiruq6aum6bOqYIEg1C52FuiAweZ3MI1lrXycGJMHNdN1VVcWJEkwQXtZ8taofSL7PMZYWzKk5VQVkVhUhAkkr0zAKRucwsIiAIkuHOOUUUUJwao8qsjBxjUkBWTSmwaGiSACbVJALGWGuTsKISkTVUZm5tsr65ubW1fXI8WusPRlmWZ1mBZIwxZEkRrDF3XNYA3homU0J0VtpV5pxWntOiIHosTHpcB3bF1GrIDY77Kng8o0YdaZcIEFXBmGOIV96mudnFvl2VL0RkzGQ02trcHAwGveFAEdc2NxAp+Tibzuqmbqoqei8pCcfMWSJAcTEG60xnM6GqnewLIImwiBRFWRRlU1Uxpdt7e6fXJoj08Scee/H1q3t7N0MIwjI9OsrLYnNrZ3r7pk/pxKlTs/myGE+2NrdvXL/28iuvAKJBuOfUCWTu5+7sye3EcHA4ndct9koXdWBdaOulD6C4FFQ2u0fV7daf7BdVataaisjZLJusrwMqFTTOhynxYrFo6xoQlvXRbD7dq6vdJDeXfmNtY1CQxLSoWyA76U96WxvaH9UxoqHxaFQvl8l7MubUubMbJ08dVQnIrKZWV1SuFVPuXUX5T5zN3LWN8U5t3eGqhPTz1jr5MDb+FsbGqrMJAKuZF7AAp7c3Hnvg0tqotAQh+bZtD2/u9svitZdfKspy79aNW7u7ItDUAcHEBE1oDGiWZd/462/snDi9tXMy7/X64xH0y6PbtzfW10Lk+WyWfEtInJKPoVouJ6PxsN/PnW2qZUxxcvIUOBdEDo6OsjwTxKX387Z5+PGPXrt6NSk+8MBHqqpaLpd1VU8mExUuyqJazPf29nd3d621LMIAPnISYNbIwgDjXv7Ln3hse5SHtvrIg/cf3L71zW9+69777v/Sl770x1/+49CG+WKRWKy1Tz/zTFH0EI5OnDj52muvI8KZM6cGg0Gv1/vK17715uHCh/R3nnjk6kvP1tX89IULv/O7f//aG2/2XHbqxIkY/I2b19cn61/+wz8C1fH6+smTy/F4jKAbO1s//M53t7Y2L52/8NW//quds2d+7e9+iavmqW88+fwzz/zKF7/4xMc+9vwzz/7Vn//FiVMnicggqiiY43vGe5+21U0yc5nLMgVgFgRDlpzLjLFdzznGEEKIMaWYhFmEiejs2XN55n7w/e+JiACgQWdtR+AEUOcyImOM7fUHSKbxQQSqasmq57fODQb96cFBnudZWYqwtZTntiwKQBJRYVmlPYDWWhYV1appASAmLrIMiDhVAOCMJUMpRABtQqx9QGOANcstpOScNYbyLI+R88wN+gMiUxRl8K11Dlx2MF+Wg1FUnM4X58+fa329v7cnIamAAArAsewvsMox8VKtc4PhyLlssVzcvL2b50VMEmPsEDgkehv4il1uh2iMdjxdgDs5rrVWVYmIj+Gozov2/TYZrH7jnQc/bleCIqhKrJbT5eIIJRkUQiQiUQaF0XC0NllbLFtnbBs8dAJPidUaWSVtd/9F7TJdBTSGLGJHX4Y79AZduVqpqnYGl2//PF2Z3vX6cfUd8Fj8o6M2HP+L0CA5Q5lBZ4wlKAz1+6UxJoYAhJPJeL6oPvGJT//27/6DmCQrS0CUKBwiGWOLHAwpYWcfn2JA0BhjAk4pdYdGVpNVXV67mltQ7czm0RASqKp0qbl0kU2EAByTdnk/mVUGfyxN0J106+x7Xpnfaw8i4Ir1KyIqKaUYom+bpq7rpl6GerHSG1Gm1SQfEhlEPM5yoZu6ss5k1iEiq3BKTbVs2ooldd+xCWlZ+0FOGUlHAikzh6rGGIpsjAjLCuYQaWNShc76OSUvCkhmlXb61KWDne8Yi3RwuIgSWmMcIimn2odF06QQLNHpEyfOnjpzYntrPFore8Oi7GdZmeelsRkiGmONNR2U36WgxwcGO2IMYieWq6qMjpBQeWWzighIpMdSbnAXE/duQOcuKsJdD1Y0D2OM7cRGjl/ZnRXtADVTDgY7p0+ePHl60BtUy/lyMa2aenN7ZzAc397dDU3jm7ptmmqxaOvK+zamAAAh+A4ecC4YlzNzZB7bsQoXZQ4ARdHr9wf1cuFcHlM4ODoc9ftC9OIzT988mLJADPzKy6/s7u7+5m//9tbOSY6+rRaA2Bv09vb3LaKzTpSP5rPzdP77Tz8/NnJ6c40UTq6PEHTv4KiKEUEMam6pbbwFzMqe6/Wrmm7EdDT1V6Y3+tl+z2UZwrDIB4MekJKx1aJOno2lKvmqDREx9spoizr6j50+HfZuHdVtyzoZ9HplRlk2a9tk3cmtbaO6H9mDmsHg5Pl7Ath5M1VRASEAPEbLZXXyVhpvgMcTBMfeM6gr7XE8TnHu5CXvaGnBW3UM3Xm+e4kB+SBp0E+9PoyN/9xj4z1JDj9iKYAAGlBSFVIRHmTu/Imty2dOOw6zw3q8Nu71B+O19clkfTwc6nN2PBpdv/pa7srZvKmbSMYumxRAcgM+tdD4b371rx994mMnTp72PjRV3R9HtDSfzqNi07S+qcv+QADJmJB8iLSo5qI6XN+cbG+DwvUrV51zh0eH26fPZP3+Jz518frt29du7p49nQ8G5WJRNVWzPp4gQh18Urm1t3d4eJTl5aKpOxlRHyWuDK10WJhPPXTvRmmHmf07X/z1+x+8/5//v/8/ILp3a/fo4DCmmJdFm8J9Dz7w8suv7O0f7Jw48djjj9+6tXvj+k3r8KOPPfzRxx7/y69849Y01K1+5olHP/OJR5/63pM+uMl49PWvffX6G2+e2NqeHeyfv3ThV37tC9978snvffs7YMxnfvVzv/ybf+/aa6/+2R/84WA8/vXf+C3ftn/5x398eHg4WRs/8vjHn/7e99c21rZO7Lz00otbmxs33nzzymuvzQ4OrbXaBUDXAcBVXqFy3K4FAARhAVGDmGVOSSPHLC8N2eOrv7HWiUgIoW3btm1jCBJDSvGvv/rXv/nrv+Fb3+v3F/MkkhKwQVJCUM2czazNrCUkFUiSyl6/bluGmixtbG3t7+/3R6PJ1mZdV4Mio8yWROPBUGTezcSllFJKRMTMLrMCmIIBQB9SimKdTR13thPFJMqKPIqSsczsrEEAV2aEFGPMC3I5ISmStm0z6Pemi2pn58Tr167d2N/b2dwue72Dvf3rN26MRqOYxIeYORcFPEuQxCvlJu7MPxOrGmy9H4zWbt/cXSwXMSaAjqu66uLf2TjYCbDeJVwPokmTiHRI+Z2d2CW7QKSEqnB3ptvdxVX1HWkSvmOa8L12pQogpNjM28UhcGuh63aTMSiiqjAcDNfWNhZN6PWyZawBQYC8SFQhPk5BFQgtHE/5IwCKAAKSsYhC0E3QGVgNo63M3rvJs+OPgqtKWPVORbxSt9POB8t0mQkpGjIr+JsMqlFxhvqDfJA7EAlNGPQHvbLwtd/ZOfff/Z/+Z2sLtRatAQUJIAzGOjWGDIgBUMSkMbQxtpShMlhrmRnREBlRARTRbtoNiEhFmMEAKAIzgyRwmagCi8HVhCI5y8waYlEYRHRkVDVpunPe35NLduxR1s3orSgg3bFgSZxSDCH4pmmrqlrU1dK3jUoiEULssmmiFZEDEAGNrCDJ1IGPznYHDJVTCm2zOIqhSigqgqA+cRU4RE1WIyXrbGYNaobIANhxCzoZFlVNzD5FVmONPR40VEQUQMFO5lkdEhoERGbhxGBQjfMx1Y1f1m0bEqsUmb1w9vSD917eWN8u+iPnyjzLi7zIir41DtGQc3g8cHmn+7F6sKIjGLSYRESidkZ4woigiqCEYPSYf3IsHyYAKw+IO8Zp3Y+6+bNVMm0IRFNiWtUMRNR5a98RPyYAsE98+tOTjXUi3N3dvfrmleV8pszbJ0/3er2qqmZHU98shdnXTQg++Db4VlGNMYAQQuj1el1sERnnHK+Y4GhtNxdsnXVFWdRN1TStD6Esy9nRgUE0CG3TiEhVLV9+6aVHH/3ofFmvb+/s37imoITg22Z9cyNxQACXu7zIF4vZUsAA1VU9KfJQZiHGkNCQITI9Aw4hCmto14aD6WzaANaYX608cDsZDdd7bn5zP6XYVjUoZlmRFZmIN6j94drGzqm927v3nD5DPtRt3bAfDEZr42GIvl5WkJdNVS1mR+PBoD/sJ04mK2aLZQR7p4x7zyvUe+Yl3X+7f+7M6f7YNOS9UhbzAQaZfvr1YWz8bYsNBDCqACBIIqmf2ScefvDy+ZNr/TL4xhbu6OhoMZ/NZ9PJ2kQ5DCeDk6dO9vrZCy+9/uobV9ACixhLjnXULwtnVFVjuzjaX9/afOKJx5781nc++vFPfu/JJ7Es2mrRpJTlBZAhIOuICKfLpcsKkxdJ9MaV17e2Txzu74loFA0xDYgODw+vXHkzsw4JptPDoszrJQzHQ1GpvX/lxRf39/cFSICayIIggp2IDXDc7BePXD59dn1YTfeJe7Hxb77yxvnz5zjxxtbWX37lLydrazdv3r7n3vu8D/sHhyFGFgbU4Js8cxsbk17Z//rXnzxqtY1pa9z75EcfPLx9495Lly/ffy8R/e//2//GMZZZHoI/d+migII1/fHIWbe5vv7Hf/jl6f7hoCwt2b3dW0WvN9naOH329I033nzt1df+8T/7744OD/7tv/hX7aK6ePnSb/+Tf3jlldem+4f4+88KqIiqCGJHvCRCEpUu2VBVVEQAVaVORx1glXt1pprGIGJKKUYfgmdOwonTKrlEoqeeeurkie177713sZhPjw4PDnaTCqkWvT7HwJJEESmrmmY4Ghpn87JsvU+cnn76GWNoZ2t7b+9gNBq0bej3RlVVb6xvMpC1lqypqiqlFEJwmRMFh9QrshgisDhnXeaIOk6C821LhE1T9/v9lFKWZTHEoshI1QdPLstdZq1FZREFxCzPe/1+0zZLH4xxRa/HMUWRqm5u7e5K4l5ZqkMFNNZaVZaQWFgVVRQoL8uiVxrjclfcvrXbhGCtAwCEt+WsAG9RDFf7ypjuyc5S606auzoXxzNb0tni/kjm0AcDKVaIVwqxqasUgzVgwICIISFEZgkpZHk+GU/q9v/P3n8FW5ocZ4Kgu0f86uhztUwtSmWWRqFQKBRQIAgQRJNgKw5b7fS0ja0as30Ym33a1zVbW9uHtdnpsR2b6ement5mC7JJAlQgSEIXSqJ0VYpKdW/m1eLIX0WE+z7EOSdvZhWa07PkmrGJv8yy7r1H/hEeEe6ff/55Od1u73U7jgVQrJPCOqUVEhy9B+9Y++y9cyMVVUIEGnm0LCLAKEJAHu88mn5G31ANx0I8I3YA0Ng5JEJQgASaICQKFCrEOFCNWpWAXZkHWs1ONVUQ9od5rT3z9/7z/93yidMlSxhH4gQMS+kISWmNWokir3Hhi+mUUloHDOLRXCIKgsA6i6hkXJmAeGTTHdeXjZBmUl4kCAE1AjvnjHXa+g6d902940+cPwTwhFdPwxUAFhZjSlOWeZYNB71hv5PlaVkWIIwj3H0cL01y7mO4W8bp+JGbGwQEviud5EUx6A+KohihHoginJdFmqtIhYpAAaLGgEgCRCCnRXyzQhAW0axFUIStc846/wFEKIhAChBJaWTxnjuIYuG8dIOyyPLcGAuIItyoJI88eO7Bs2da9ZYOKypIwiAOgzAII0WB0iGpMRo9XiweVZ2sBfAFpIoE2HA50nsDHEl6jB3iu8MCMPFx7ycqHPlXj+BbT7MGpZQi5ef9KDAMAHp+ecVZc/nSB+s3bwhbZ+zU1Nz0zMwwy3qdbpmlZZYrImaLvhgFAXy05yRJEhCIwiiIKopUEIS+2Toh9Qf9Qb9PipBQBxpJ2bLsp2lYS8Kokpe9JAyEJcvTSmV6a3Pr7NlzpXHE7sTpMzubd/wNbO7soFaIYPK8lsTru3tbnZ4Z9KIim6rE9SQcKHRGKtV6HMeHu9sBgCMIo8CwsURxkmCgbY3z0szOzy0vL/W6vV5/6PI07fdrjWZSSSQfQFFU27OLcwtUmEagOvs7pSlr1cp0o9Ht9STQ1Uql2xumRSFTzX73wFnop/nK/HJquT/MfdkiHCkAumdB/BQUTUZVAYDkZUx+qjM0eVu8N58ynss/P/rXx66f2cZ/NLYx3kZ/6jX5egTokYAQ8dzxlZW5pkbTORhYZxuqycwKYdg9qMfhTy5/WK1Ud++s67iysbULiEkcMcP01PRw0Dl14ligaHNjwxXph+++vb23+/wXvvjwww8cdvoqqaaDTlCtamvyYWoLWxZlGGIliUvDoNEYqTWTShxs3bmzvb0DQBiGcW/gxHerRyTc39+dmWmXRQFEpTUH3c4HH14adAeWMTcmt5YBHZAIESCyPTbfPr+68POfeToJidn6gp5v/Lvfmp6e+vyLn3/rnXc73W4QhjNzc9euXXfMC4uLeV4gqpdffrnVal248HCz2bx09drWQW+zb5w1L3zqmTvXr+zduT07P3/hsYu7OzsPPvhgqDU7np2fa0+1f/1f/IvZ6dlPffrTZ86dvfTB+x99dH2qMXXx8afe++DtP/yDPzx16uTPf/UX3nvzrY8uXXnqmU/98Nvfbs/MPHLxQtkb1hr19996Z35+7q3X37DsPOnMeT0s47TWqLU/sTzqLygEyL6oEREAnHPO2SgKR2UZzABSlqUAs9jSFP7NiDDN8us3bs7NzS0vr87MTL3yyo/393f9qZcXeaAJCZutRhQlnW5fKbW/fxDGiQgGQTQY9IhwfX19aWkpHQ4XZ+e63W4URkpJu9XOyzLLU1IUYOCci+J40B+gEmehksTOmJGie5J4HdukkgCAZh3qYKrdrlYqh4eHCKKIsiybmppqNpsAUOaZZa7EcbfbjeMoTTNUulKtDdPMWpvU6p3OYVypHuztA1JpLDsmUoLWOPbV+k4kDMNms9Wcnhqm+cbmptaBFIV1NtDBUaRVxtfRZTXJxiLihPTsH/I18r7kgJkd4lHu0PhE/4Sl91PW5ijbIwLCNs+GpswImRCUICuFaAmQ2Q2zXAdBs94oCrM0t3BtbU1kxMM1TkpiQApltI2gLzXzHFxCEGWtBUT0jcy8mq54hW/kkczr3VAbBQVHRUUA4MY4LgHQqPTIISlSSAgBYaggjoJIK4ViyyzSpKOgUa9pokGWt+eX/u5/9p8/+unnHKgwCURYHIthT4xGTaDoLiSOgCRBoARH9bt+qAmJ2QHejTSYWetgVARFXskLPfMBCdk5EXEASlgrzci+tI/5nj16hM1/0glLPjUnzOLYOWuMsWWWpoNet9/vZ8OBswUie94KHfXkJu7bCMDAEaYLo4pAQAyURkRxDAJlUWR5JiK+nEMROoemtFleVkJVCdiBBV/lSYq0MiwMwsJOmASIkIGEiRAZ0DnrnCuNMW5UhSkAYsE6tszWinHOWMuIIBAFWtg2m42LDz98+vSpdrOtdEQqFgqiMAl1qIMASZPWExquv0WtFBLhEeTFg+ssbFxp2ckYJZdx7aMnb8C4LHvct9nD7qNFN3FwR5/iS9hH1BogUoqUbw1y34oDAE0oN2/eXLt2A8UCW2fMzMxss9na2d+3ZZkPh9aUpbiiLLI0BZFQad8coFqpeDyAEJ21PoNTliaKQqV0oNTMzPTujg3jWOVpGIZFnmd5kUVRoINQkWGbxKFxttVspGl6e33jzJlzvcM944o8LxoJVLRKwrDTH8zOzGysr59ZWXno/DnW6sP3D9K00Ag6UFUdDHpDZoskDKwVKeEasQgGCJxnU1NLB71eo93qHuzPTU+trqx0B2m2t51rrDXqlbgyszK3uXYzDEGn/Rraot9lU8bVSi2pIEX1+SYrVZ2epua0bG9FWiPbrEwPe4O407OogTQKwScE5T81WTzyJ3zrGQIQIPF8ShxP/D2TdJ/7Avc4TH9Gtuv/x+tntvGX3Tbu861/6ife++UEJCB5/MGzD59e1YrLPO0eHDYaLWfs/MwUi0zPzDYbDeOw3Wxdv3aNTPbWO+8NBmkYhs4ZBQ6Yd3f3qklknTs8OCysLZ199Yff+6W//jeddQDQaLaKPBwO04LTUiyDFLk1QFEY7e532jNzO/uHtsja09OVevOw22vX661We/3O7SzPHnrowSLPB/1Bo1nrdLtE9P6lK51e97DTdRaGRWlYGBBkXJBry6Wp2rGZ+umlmRtXP6xWk4uPX3zh5178N7/+b9I0BYKdvb3DTidOkpXV1Vtrt6/duMEsjz76aBRXfvjDHxV56QzPTM8JUSGqmzk25Vc+/5lffPG5n/z4R+WwcfLs6StXrnz/u989fuzYU08+pYLgK1/98jd++7d7+4fDbv/cg+cbrWatWnviiSeWlpZ7/f727u5zzz5z+dKl3/p3v3X61Olnn3/++tXL3cHg4ST5wpe/9NIPfvi9b30bSvf4C8//yt/7e//VP/mub/AGiEBomb0g6wQmQUTwCrfiT0OGsY4PjTvXEyqWcSNRUzhjwDkQx8LWuqRW73S7S0sLP/7xy7du3fQ8Ima24IJAhVGU5WVe2DNnz/X6/VrDHRx00jyLwgiByrKMghAAy9JkWWGt29/fbLZaURR2e10CDIKoKIt2qyUiRZ5Xq9U8TWvVahwEZVkwi9baKuWsLU2plC5MkSRRHIXWmigKwiAUazURAmRp2mw2xTmlyKsgD9Os3Z7a3D9cXT3+kzffiuLYOVuvNfZ2d1pT08K8v7cfhWEYx6VxgAhKhwE65tI6K7K0vPzBh5fzNDPGKKU8rkk4Gr2J9zlxnnBMNDqaSL1v+Xy8i+zkfSarD/Hj6iif6OmOVGlZTJkOiqyvUIhIgShCEQhVEGgrUgzzVEAqlcp0051YPfb2Bx/s93tAwIiGWTsgFE3gHb3JiqcRjQG10iICzHK3pdXIvR0JSN7dQI4cOCNylN9oAEDUSEoVlM86oIQKK3GoNDFbcbZWiWvVhFRoWOWWH//Uc1/6xa8/cPExISKteVQDJuJldrUa1cnf3c8YUYiwdK4sS2stM/vRZhbvjk5cLv9VvGM5ehNhoRGkK+MH1HhaHbujFYfgK8jgEw5Y9Jukl0e2ZZlneTYYDHr9fi8bps45BNZq5MHS+N2Oumh3gcYjMCayMItWStGot61nGVljxHNnRxXMyCKlcaVh60Qjg7AHhD31VnnMiRlAfAMXYGBEB+iAHIphzeCscc5wYW1p2FpmYQBEAh1ojaAIgd307OwjDz904vjJSrURxlWiEClE0oEOR8Jinj5w5N4m90T3rh1CcmKsWAoQDciIHzRmhI9hmgkbfrIa/C8TogKO2QtERIpGd0yoxmrNcu8x53/WnYP9WzeuE0igg/4wD6O4Xq/v7u4a57I0ZWvZWctWEQWBZmuFnbPiSRjOOZ8pMyZHRVEcKkWOnbMuUNpa580uqVQqWVbkxTBLK5WKQoijaFAWKBKH4Z2NO1FczXMTPPvphfk5xSXYor+706zXRAcUHcaVJCYc9nsBwZlTDzTr9R9+7zsZUGIFwdbiCMUNu10Rh4LVOAjFRUFQa1Vy67jIqlEU1+v1ZlOTHg6G0+3mlWsfJCShK1QJ3Y29yBX5Xt91D7TWpTWoyCEcplmrNZO0pzkzEFciULK1c7B/EACXgvNLy0mt0ctKgXv2ubsb2cd3rPsgPZ9VEQAYSX//L3FBJs85skv+Bbq5P7ONv/S28R/O3BYAZjM91Ty5PFuNSAe6ksT1St05Xr91q1YJd3f3zj/00H5RTE23j584EVVjh8HBb/4uI9Qa9SwdFKYQVIfdPhJW6g1xXBallCYf9G9f/6jRnn3y0Udurq3t5DnqsNae2t/d0UT9vMA4McayVruHB3GSzM7O66QaJmkdqD07kxVFoEOqqkqlcnhwUKkkiDQcZocHnY2tbSeuNNY5KZnZS44BCYtGfvDUypnl6eeeerQSqCuXLne63bIs337z7VarefrMqbhaeeWVV5ghSZL+oJ/mObM0Go39g8N+f73ZbsZRdHz1+KVLVwxi5mCvn55ZaF88ufzBm6/Pzk4/+vSTramp/88//xfOWAK6tb526syZP/2jP867/YsXL+biKrXav/yn/9yxPP3MU5/7/Od+9MPv/91/8PfiKLbMp8+e29rbWzx7qp8Pl0nZsvzX/+x/fuTRiyfOn23Xm61GY/PWLd/RQCGiIhLUWou14ts6jZRKRVicMAD4Q0OHodIqDEOPNXpaqTWWR2QFw+CY7Sgxi5TlxfbOzulTJxvNVr3RKLI0lFCQh4MBCyLp/mBw4sTJ06dPX7pyde+w45ir1Xq309GKmCGMwq2tTQQ0Wa6Ump6ess45dlmaTrenmLnWbLdaLcc86A9azeahtdVKEihFCKUxzA5AkLBareZ5HuqAADRRWZYI0KzXszStVqvNRmN7e9uUZVypIGKep5VKxZZlmm3sdfpE+qGHH75+48ZwkCFRFCVpllcqlSCMnHBe5I7ZMihNOgjYGBLJi2Jt/bYxbm9vP88LFWoiNcYo719fHk+aqFVMktpHa9Q8lHu0wPwep/KeN5N7T2ICQLkf0x3Vijm2psyMGRBZBBGHgQoCRUjWlaJIsUhhSgaoVBJxsrq0vLSwcDgYeIqiE3QATsQxk+9n+XG/DcELr4IbkSw8ZOut677NYVS/50m7AMpzfhGU9zcIESQgUoFSSiVKEws4TuI4CXUtCQkhM2LYPfOZz/2d/+x/O7O0zJ7ui+NGxb6ISakRXeGeIN4VRV4aQwEh3kX+PLDn2B6dNXZuNKpqTPdkJiAipFAzC4goFGbHItYaAAjC8GhAMvoXjs6UrzATYTZlkRdZng4Gg1467BbZ0FtyoFCESSmvODHqEYd41Ms9OvRECETeIRdnSYdaK2QRAN/+d9TdRMSbHiEBUWltmueVADUFmggEwRnLgFqU1qSI2clo+hwiEAEpVAKWlDiyLAJcWleUNjeWEAOtQk2EotA3D8eZ+fnHHnvs+OqxIKqAipWOfCWhJqWUQq2UVojeeJkoOOq7T0bPLxkfMDA7AWZwgqyIvOy0UsojOjyWYLsvJjy6bI4EBYSII2Vjx+ycuvf5kyN15Oau3bg27HfjOCJSjjkIw2GWZh1TrVWLLCuy3NpSwAH4LoPoFQ4J0DqnSQGIJhWEoZNRMZ0I6zA0xjFAEMfVah0IrLGDYVbkpTEmBVtTVCWdOqsQrON0ONiwt69+dOXUmZPr16+127O7W9t5f9CanZ9eXO72+yHw6RPH9zbv3Fm7FSfRIw+d39vdz4fDGttqhEGg+7nVkhDYWhSAYwWCSHEQdPr9g7w41pxOag0dBs1GI9AKhLJuj4e5DcNIgQKuhbF1Ls9SAak2WxAnomOq1ikMy9zuHXTDanL8xLHttbX9bm/u2MlSxcPUeN1EQDd2TO5edA+oNpokzxKatFkZFdkSjXYOGT08esQzxgU8wX38JvdZwF9g/RkA/Mw2/grahoBEGpZm6kXaOTRDRZQbQ1onlWR6dtrmuVaqSLO333xzfmFu0DkojKk2Z6uVZKrVnJ+dGfQCAajXIB0OqrVao1ar1+pra2sAYrPhtQ/f7QzyM+cfefLihXc//LBar+/ubHf6vf4gtaB6Wems9f2canElrtWm5+dza4I0Louil3WOrR6bnZvZ2t5KkniqPf3hlSsbG5vs2DAXxo4UGH1ClgHYRQqeePjMfFUtNisnlhe5LOaef66XDuv1+h9843cB4PMvfvGgc/jKK68eP3Gq2+u/9NIrcwsLTzzx+GGn++GHl7MsW1ldffpTT92+dWvvsHNQwF5v0K4Gzzz2wMHu5s0rV6MoWlo9kaX58srK9PTU+fPndnd2a3H0rd/9fWfME5/+1Bd/4ct/+Pt/uL25GSe1JEx+97e+sbZ269nPPPv973zvkQsP37h5Y25u/o2XXu51OhcfeeTN198weTE4c/rX/uH/5rvf+vZbL72Up6nvQa+IgIEAAqUYwP8Rxglov7qAiBEAWAtr8iUuAiDMhlnKMmdnnXHWGFc6tsICIEgCtiy3t7Zu3Lx55vTJjY3beV5UK5XeYCBMQRDpMGqEESr15rvv7O7uGmOiKNBBsLudUxxbY3e29wSkWqlowlq13ul0vDqmIlRaieFmq1mpVgaDQaWSKKJ6vcHMDjCM4jhJ8iIv8iIIgiSOp9vtLEu9pn9SqXS7vUE6rMZJu90+ffJklg4RsMgyp1WlmqhApbntDYZpYd+79OGJ7Hiv3zs87GRZvrCw0Ot29ztbtWpVoQZgJxJXkjAM0iwXgGarXpTGGZcPs0G3R0Ggx0RAZuddj6Ou51GCIIwxKu/jwpGznI5SC/3rBSY5N79CPeQ00mwDubv8AZiBiEaeNjJzIa5gNmJyhVYhMIIOw5C00gqcdhGTVoJUls6UNmzHgLQwP3/2xKlb63e6eYqIAuKYBYkRLYoGUTiR1MZJH0bvaI26ZCGMcsGjgn0BGHeWBgDPbAX0TdEQRyq52tMlkbQCTUorQgACiYIgjoJIa0WQFW56dvHLL361Obfw1DPPtNrTw829/fU7lenmzNkTmIRgyYsvQoC+h8HRrYlZ8iIFxSLoHE9CDuecL9v3P09KM48E/uwRZ68aYaxjQRBx7IhGPa6Z2VirtCIk8ZQJRewcju5DBJidY2etNUWWDYf94aCfpYOiyNgZBO9pIQAoUoDjIikfZR5xc0cz7nd7T6pAGiGw1gWJUqhAUACdE1saZ411zo0iAEFhFGGhwrg0L6MAVaAQNAMAkrPOWAd6xH4FYWuZCL3PjaT8blkaZ4yzhsFBiBgGFEdKKxhZouDS4tLjTzy5uLiig5B0jBhqHSgdEQboOXVIiNp//YlShIxAdD/ojEgT+7doSzCOrJHSMQOAV5v2YSGzL8MbFxuMfdnJiTb5dXRw+sBShP1/zCABjE/A+14LAHpve9u70mVZEpGAHBzuA6pKErM1zE5pZZ2XRBrzdEisOAbx4ixirViJ4zjQgVKaFCmlQUyWsbM2jMI0o0q1mlQqvcNulmcUqdzC6upqwfbG2m3nGATyLO93+5sbW0Dq8kfXhakSB4eHh3HNlcbcvHVzql4PdWCLLC/TCtFUq62mps3BXuTSZj1R2g77tlVvREEIjKWxpEPLrBiMs4P9ndKWpx98sFapdPZ2oLRgbagRitRqojgEEGEXKgoDNdNubXWHQajajUZalipQuXFT1Wq/11k9fuLOVlwi9bM8DqsIBODGiNs918fJlDjiqo9n6N7HRg6G308JWRjAk/99ret4Rxy7QROQ/y/U0/2ZbfwVtA0UWWi3Tq0sLM7NmKIY9IalKWpJlFSSKIrSweDUmbPG2cWdvdWV5StXrwRhmGbb9WpcqybNaqLYpWnmSIiwGid7u7v9bm//YL9eq9h8WD9zstftv/7qywhssuHW5pZ1rj0zf+bc9Nbm1s7uThiE8/PzcZyYssiL/PLly9VazTiXxDEWJRDkRd4b9PPc3Lh5Z+/woNvtIhIzW1/g6HvWCyuReiV84VOPVbV1+eDpJy6+89Yb6WC4sLzyd//Tf/DjH7+cZTkC7u/v3d7YmF9YmJmZee+99/PCFIWpVKqbm1vWmCAIatXqxsadpFbTqXT3d6ebjb/+C5/76ouf/eF3v5tUqzMzM/1u9xvf+J1arf5zX/7S/OI8Ady6fk1plZdFtV5/45XXyLlPP/tse3Y2jMK333rn9OmTH7z/QZzE/f5wcX5xe3Pr7dffeupTn9rd3V9fX3/44YfzNHv1Bz+qRUlYTU6cPYO/9bY1ZpL6vBvE3JN7RgAYKXn4c0V8N1t/bLC1BsT5LKszzln23EufwnVi8ywtsiyOkyAI4ziZnp0RULMzc9YUs7OzWTokrfcP92v16nCYlmVxeLBXmhLEd1CxIlCUpYsjZleWJgjCOIxqlcrBwe7MzGyepSLsnJ1ut4lIV+JsmApybrOkVonjJNDBoN+vViqNev2AHRG2pqdKK73+AATyPA+CYHN7O4hiEIiiSGnVT/thHB52u2FSRSMAcO369VarJSKer5mXJSrq9LpTzVatVhciFrGOm80mi8RxjMM01IFGT+68SwpiYXVkhR49d/EIV8Rfk56i3s316rmjF/umCyITNxfG84P3NJAdhbQADMDinTWxwqUzmXBOKBoEiFiBAqWQlFaISoH4PRUAnOWyNKAx1slUq3X65Mn3L18drN8akQkERMCxCAEKkIyFdCccSbj7w6gy3jcw8191nDPwYTaO6PsedPVxPBIAIWoAjUCA4hwSBFqFgY5CVYm0sBgrx86c/+W/+ffOPXCx1moqhI233tu5dL27sY2hOvPcU0tPXsCw4sbxuhAC3PWlAcBZm+UZswNkrXVZlmPdVVZaaRUYa5xj54SQfRcu3zcLvcqYr4tixwKerQBA4DXVQCkRYw1bG0XRJD/ue+mycyDCzhqT53mWp8N+vzsc9I0pQSwIKxotv6N4LY4T9zASuhhd49AHAWkk9wsALM66Ii9UQxH4TUycY2NKZ60vnWQREFEkvo2mY8iMCwo7anPstcnYGcuOUSsdKKWIANA6x8DOCTtXuomWoEOAQOkg0HGo0DdBRwSk5aWVZz716fmFZVKBCKIKFIVesIVIASAoxLtEghE9ZHR8oM8+eiL4CNIhImtMwbkTC+ADc/I02rHVAd2NM3kcUsJkxPzH+fdX4wsAGEiIfbQ/GtQj3+Sum5sXhVIqiiJfzcfsimyoo6Tf7/QHHZMXOgiss0QEMuoIj4rCKGLHAGCtVYoCHfEonyHWOlOUzlkUJ+ycNZqIRSpR2EccDvMwqJdF3hLXbjZa1UqARb80oOj69WtZlj399FOVemN/MEwqETsbV+Osm68cX+n0um1FSjiMgl6nU603+8O0cI5LU2cTgcOAqqFu1uuEFIUxoALCRqO1n6ZDyz3LZtivNOtJozp78cFmSBEJmzKIw16adnb3irwQosJaMGWsEMTt72wHSdUw5Mah0nGtUTg5SLP9rd3eID918nSt1hwHKx/zFe7NIMMYboEJT+tjx9VRlJ6Q5GM+CsLd1308Z/0Xcf3MNv6q2YaAaHSRwqw36AU6TOK55YVgR9++fXt/e9c6m2dZ9Phj+wcHq8dWTp46bZHaU9Nvv/HGoNNxZXFwsBfqYDgcxNVavz9Qam/Q67fbbYW0NDcrtpyfnTlx6uy//q1vvPv2T3b3uzvdfHZuYWZmularh9HB3Ny81tpa6zvq1evVZrMO7IBd97CjSHY277z7zm53MBCh4TBXpHyfdu+HiCADAbgAZa6VfP3LLz5wYnlnZ+tzL7442651OruDQT8Mw+9/7/sHBwfnzp+31n7wwYelc2VpPvjgw6npmbiSJ5XKD3/4ozAKl1dWwjjqDQb9bqc9v9LJXaTxxFxrZaZ17cMPZ6enZl94bnFp6aWXXup3O2xd1h+8euP60uKisfa5zz8vQKUp//ib31RIz33+hS9/9edff/XVz3z22eWlxb29PQd88sy5JE6yovjr/+Dvzk7PfOPf/WZUr88uLm3d2drY2PiFX/ra3/77f//73/mOUso5N+Hj+pNgwlQDAB5X85OALwESJ8Y4a0UHQKgsiwhY64qiyPPceZFRGGEfAGKFkdTOzm69Xp+enmZ2e3t7iMqUpQh3u73FhXkd6N3d/W6nLyCIKkuLOI7LsixLo7UCAK00Avb7gyAI4jjy3WKTKNIEmkBMsbK4uLm5OTU93e10FDsiKkuqVpMgDPI0G/Rlf3+vmiRhoElRmeeIGtlMT831ewN2PEyzrDAgUolCsdYY2+sPsqxwooRBqwCBTGkV6bIs9/b2kjjuDwYAEMdxluWDwQCJ6vVGo9GwzlMx3e7O7mHnMNABA/40ru0ENZ+IGY3oWERHfUSYJFWJJmDv5D3Ga3OU0mUcc5FkBKn6uATBIFsQyzZ3zpAweeEaQR611QJC8pKryBgEKghGJInCFMxSr1XAwfHVYw+df2Btc7Nwpf9gHunRAaM49Ajs3RaaR5gY/l5HXvjkdxiH26PaARzll8bRtAAiERAQAmigIKQwCIKA4igINTnnmAmDygtf/Mrpcw9F9erO9mZvbUMfDovd/aAo3GF+8/uvNlrt6ukTgHrkrSD6bgbe20VAZy1bS6QcMGlN7NiKsHjFVyAMwrAsSwBAGvWItaPKLcUiwN4dREXad/cgEARh57xIhFLEIJ7vK+OCQuecM7mxJs/SbNgfDPrpcGBM4QVnCWGM1t6FEo8CkEdjpKPbuOBkYEfwRJ7mzkoYRj7tKQLC7I2Nx5fA+LNERLiwOMyMAoAYohAViJCEGgrrfA0aagUkHmYWcI69KpnzXG2tSOkQNYAwW4eMStGxYyefefaz8wuLgApACZCigEh7pxyJUJEfnwlF1tvT5Na8dY0NXkTYsXVu1NTXExVEAEkx4wSAPzpcMBa+PermTp7jdz+/VInQGuufpohIKUFBuKdYDXwXNCLyAtfOORApiiyKK3mWWlMKu7KwDliTAgHSylojBsU6HqmzYVEwR6C1tqa0xnjYOgy0OB2FIaEAS6Aoz3KtlTFladkat7a93W41A8RqoA27sjDWulu3brbazQsPP9Semz/c37KuqJYFajU3M68dQ7+fpZkw6yDqHB5UG81OH5Jqw4oF5nolDklpAE1IbIoyq9XrSNBo1LRxkhuVxJLnrTiqzM9qW2rF7Hx3P4e1qiRJWpSdLFdhPN2sJa3Wtes3iaE2M5vEFUBsTk1vbe12M3PYGfT7g2t87czZc9VqbUKohE/yMO7zaY4a+n3XfU9AQC+xeuRtj1rSJ3/cn/v1M9v4j8k2JpvIT/0glkotnJubmp+dGXS73U6n1+3mWZ7l2ezs7HA4bE9P7e7svPn6qw8/cqFzeJhlebteQ3GBVtVK4qyLao28NCo0Ho2I43h+fr5Rqzz9+ONsizu316Nqh5n7/f5hp8ccsIHtzd1OpwfMmoJWvQUgt4d36knSrupI8mz3oKp1LVRlUQ52duygHzKWVhKFpXNaKSvs3IhRyeBC5Llm/MT5E8ut6uuvvnblzt5L76+98Nknnnr0yQcfehSR/ujb3+52u8888wwSvvfBBzNz81c/up4X5SMXLp5sTf3ghz/qdnuk9MMXlpUO9/YPHar1rd1hIacWZx4+vRIr+N53vlPY8slnPvVA+6FGo7GyurqyeixPs3KYvf36TzoH+0995tmf+8pXfu93vuEP01a79Tu/8Ru3btx89MLF/Z3d9fX1MIkqleSH3/v+6bNnV44vv/WT1x5+5OHzFy4C8x/93u/Xp6b2+73+pUsaKQzDsizl3lpjGitYjWZtxO70dBcPsRp/QAKgc9Za631la613YrzcFQI6Z4RFhK2z1659FIbh4WEnqcTWWq2VKU2e51Pt9q1bt6amZ5IkuXbtWqVSmZub7/V6YRAOYehdcCQqysKXTSuiKFBlCQtzC1GgFRKyayZhtLzoWAbAM1OtKIqcdSVzrV7PVGCyHADSQX9hbqbRqPd6fSIFbnqu3VQCWZaV1gYEYRSLdXmegRfSKm2a9eJK1VpXlmWaZoiYJE1EDMKwVqs5a7XSw+Hg4sVH333vPUTa2tpJKpVms8HMvV5/OBwyA+lR740xCdLBCJS6u0L9aE+q+gBg0mUUEb1vhIgydhlhlFf5BAkU3+thtJAFCBjBAVjgQjgXNmCtRvAIJYoCQEbnwLIwKdShDpUyhlljqJUiVIqstaUxWutapbI4O//IAw9e/uj6peuXPQbhRAgYRLlRkwSAUYuy0U2NPfOxt4uTlhAjH358CyN/3bdgAE/AQCJCrZRG0oQBYeDr5EDEWiZtLZw89cCv/I3/5JHHnwzj+o3rN9748csXT5wOgcBaEBdqSg8O9q7dSJYXJKqON6nxB47zX16SVoRLcIQ+l2i9F+w9bx6TYmVcrQUyEoDTQQhMMOrKoHzLLnaMwkDg2BCCG/uTURRNmmMrpXrd/SxLh4N+mg6MKYSdr+bz3p3v9DZigdx7wZEACUbhgYx/8BQEQBC/IIfDrBJXoygeTQU7HyuODIl51GUaEQF9QwcSskKlg9xYhRiGpDWhAxDlHKCwMY5RlNJKKdSaPIfakUaKgsCJgKABttYEpOIoXlhcfu6zn5tbWBEgASLSiIpII5CXtZvcobd273ECAN8r4HX3HkVEuCyzLO87KQG8KgKNeMYjV5UmlZ2ThaaU8nyS+6gLeETubXyiQTAiHSmtNAPfXYxjX1zHcay1zouiLEulRmre4UwIwuKsKOdEQCEwI6ApSgTluYLWOkRwzNZYBgGIo0hZ5zQRImZlYa1zLKRCFTggqjVatVrv8HA/z7NaUsmLdGNzR2uF7Jo6tuKG7Bg5TuJqo3H23NmN27dur9/a2NyqNupbu/tVHZjO4dzM1NT0dD4c6CyiIFw+dTbdvTPIOwmgCiuo0VoLzKIUikvTPgehrjUQgcthWORxoKtxlB50bZ4llRgDlQ6HLs8UKgoDQzoOYmzOTK8eC+Jw4DhptKozc5kxg97A9ofXbq6VJZMKtA4Gg/7Vq1dOnzlTqzYmiafJLP+vcEDvc3qAQEaezDiGHqtjTuKb/9CP+A+9fmYbf6VsQwSIsFVPji3NLyzMf9TvhhQoxOVjq82pdqvZ7PX6J0+f3Lmz8eBDjywuL7/11luBDt59683tre12uz203O0Ps7IEJACJ43hhYY6tS5LElfnG7Tsz0831tbWg2tSB3jvoWaAwjoFAIdnSBjpgJ/3eoCzLMIzjagK2T+xmKwGb3JYWnWPFEqlhYQHBAjChMDoEBSBOUCRAOLU49elHzz3/zNNXL1159+r6+2t7DtdfeuPtZx9/6P/6f/kv64HylR2Hve7Bwf701JQTKa1ptlrDNNveuVqtVodp2pqa2tjcstYtLy/vdIZ7dzYffejcsxfPf+3LX3j5xy8X1gpSpVL7rd/8LXD89FNPP//5z3/3T/+0Xq/t7+42Ws3Zudl//S//JTr+3Bc+PzM3S0jf++M/Pra8Yox1ABBGjz31qe/+0bdCHZw7deYHf/gn21tbF598vHtw8P67754+f/bZ55+/ef3aKy+/vLy0REQe4Z4cLff5uChADIDAI7F+cOCsNY4tC5emKAovHzZSPrE+LQiIk65HzIh4sL//J3/6p9VKcurUaUS4du3mwvycNaYs8+2tbetYKT0cpnEcR1GcppmHVaIoAhBjrDGmEtcVUhSGtjTVJJqZageaEGRuemp1caFWSZJKdf3ORqiotGZ6errT6WSFqUUxWrc0N1dJKlPtdrOWANhi0Judm6onqtFshCj9geoP01Ch1kGn17POea29MIhKmw8GQwDI8wIAtNaDwWD12HK1Wtvd22s2m3v7e+x4Zma20Wikw2x5ZRVQDg/3O52OyKiGiUBNiLZ+IcjH5K4nAz4pMuMxXusRKQ9xOZHR8c6Co1axPOYtjHxE9LQS8UC8EBgCA+JESuYS2BKpIAy1VggKRIkACwo6ISKliEi8GisBoijCUGsnkuYZEcVJpVkzx1dWn37iqVvrawZK76Z6Fj8LsxDzCHSGse81diPGX/DurTOIjNFVoFEjBFQT5wNFEWnCUCtNpBWGChVRoLVWCkCco+df+Lm/83f/0XRrbtDvHWyvTweVv/61X7HD/PDGjSAMocwEQBWyc+PWymOP4myNCTWOoraJSgIAmrIEQCQVhBG7EoRJa3EOAByAUloBiLX+6zHzSGKaRtJUI2FfQhZgcWxYhICdiCMCQJyAuCMh4fE9bm3ezrKhcwa9uuwIuAUEwlHkcw+U+3GH7z7nbDTsYw1sdJxleb8/nJ1Z8OLN/paZ2XuWImKttc4T6umui8fsnC0tkjdl0Eo5RKVIgTApZGFx4pxx1o1iGAAQJCQgESuOHbJLgkCRXl499vznXlxYWmEmFhRBpABG7zaKzHxAi0fkDvyd0ifdtb9d61xZFkWRWrQ0rrZkdhNoZqJM4t1f31QbET2ZyM+Cn5qjcb6XavMmSETGGE/nu+/y61oDQBAEE2EORBCBWrWaZam3WyElgM5ZBNQUOmYgceIUoTHGCsO4lyMRhUoxC7NXidcqCAhIKV0UeRglxpT9Yb/Mc4kTQL21uzdfj+NIBUSMVecGqbXXrl09eerk0tJiYXh752B2dnqYDm0o/bzXqoSVqSmOE/bJboRma7pdq+xe/4AAhoWzzI6gmiQI6AQirXuDfiWIDg567VarGgUy7BpKnCmUpl6aYhAkcdUam+e5dVzqsGc5ENUM4qRWq8/Obe0dJPOLkQ6KwvQG6Z3bm71eNjU1JdIXgcPDg2vXPjp18kyj0RhT+XFMo/z4gP8Z1ye4Jp/wB7z70P8/aAs/s42/UrYhCpHKMu12boOrNurTMzO7Ozvdvf1bN25OtdulKRMd3N64c+rU6YXFxUGez0xP31lfz0vbfe/ynY3tvDTMkuZFpRJba6wxxpjNzQ0NsLa+fvz4yokTJ0sgFyTvf/QGBcnMXFOAldLiQARYJC8Kj4SVjgjrwAVkZawTB8byUNj3yVToHAiAZUERBhYRJ9P1ysJU9aGTy7/8lZ/TYfzrv/nN23uHOlCEaBj+5NX3a//1//DlZy6urq6GcXT58iUivbmxUWk0L158dDDMrl79qNvpz87PPXLhkfU7m/v7+0qp3jDrZOV0q1XTth7jcNCL4uSxp55m57Jhtn5jDQROnzl76cMPUWRpeXlxdaU11fro+vV3fvIWCXz2Sy9++vnPvvPqa5/5zHMzszNBnNzZ3vrKX/96Jamc39xYPn5cM5AOT51/8PSZc3/yzd/rD/rzC7Pf+r1vHu7srZw+9dRnPwv4P/id3eNMvimaH6LJbCOM0rpMAAAobK3nYhTglUjZ8/rEsXPskIUIwfeLQiQkBDbGGFOGQVCr1bq97szMzNTUNICUpiitybN8e3unXq8D0NraervdDoKwLAcTW7TWDtNUkyJEUxbWla1W3Q3TUGsQLvJUiVNI0+1Wo1ZttVutduvDDy/1+kNr3fHlZVsW1rqLjzwUa1hbu7m6OK+0DrA+M9NWIpU4rMTh5vYuApuyBJE4ToZpgciE5JiVUkEQWmud4ySpHB52pqdn4jj2HQRKU373u98Ngqgoig8//LDVbhmTl0XJ4za2zHK0UpsU0dFK0Y9dE26Ddxs8Bux/gElfXJGJlPi96xRQBFAUMiETMHFBUoqwIDsCRIrCOI5jRAIBx+gc28IAsFakNSlFBEyoEMIwLIORso0dDgfW2nq1WqtWF2bnLz7yyNvvvfPupXdVpBlHjNcRXDua/PsROPISszJpanE3YPbP1DiCLn2aAhEUofYlSCgKUSvUCrUmTUSoEPTXf/XvfukXvp73iltXbsSB0grDehw0G0G9oQmVKfduXC/TfhQE2f5h9/bm1OysUwi+Fd14Cvw3yoepyXMMjBVGsCBjmQuBiQtHROyc7yPpKbki5JhFnEKFRL5mCRURakTFgCiktXJs/Mudc87aSUjpnOv3DgBhJAwMAgKkFI6jAS+sK2PgdjJWd2f8E9NrOC4LAzGm7Hd77KRRbxJpcHZiQR4lds4Za6y1Mi4+GD3BOUdQWtCknIBlccyIQsCoEAhIQPFIm4ydc84ZRgZhEWYQZk0qChQizi8sf/4LX1xaPekYkRWICCPgmKuAwHiXfQETio5nGkzQ7MlR5fcnYQG2rjS2IIUkCABaay925tw9Xqn/kkeCgbFPPllZR0TZ7g7seMyLomTmicVMXosj0gILG4siBF7XF7Oy6PUO0zRl50gpZg6CMNDaWIMKg0Axgys5ChOtQqV8SKKiKIrj2A+mMYZInHXAztrSOofAiBBEYaVWHfR7hSniICyNOUjL+WocgqtrcpUkcOZwb/ul7/2gs9edmp5eWFrtdA5PHDsp4rLhYGa6XWlPlXkRN6ca1VqWZWVRIqpkfrUZ6nxvR8o0ricqCJl0WTgKQp3UDoYZKSrTfixRgLyzuV+fmStQowgXWZrnEMaDbs8wRI1GWNWFiHXusDvo5zYzbC3nztzZ3Xv7rXeuXrtWqVQbrTppZYxRWh8eHl6TqysrK1NTU76tuR9guXcfxKNeiN9QJjb/Mabm+NgCxnv/PoJfxtMPQkh/sc7uz2zjL7tt4JGtZLRB3GMxgkQgKOgAEaUa4YNnjy8vLezs7BhjBt1+p9sJSPf2DirVaqVevX3j5tVrVxrV6M7N64ywtDg/szCXGtnY3ds7OIjjWBgCotnpmTLN88EwqSSmyOcWF1HM6urKgw8+8KMf//jOTs+BEkEFmlgRaCZmx2OCGzh2tnSE6ECnzMqiiAKB0mFubWFM7sAJGGCLyoGwM4+ePf7wqeWyvz871Xj7nUt/8EffSZ1ZWlq4eXtvUJYeT/vWd15Sg8FzTz14/NSJy9duKNS7B/1ZHc3Mzh0cXusPM1aKCbrp0LBoreNqdauX9nq9p04dV8a1p2a+9c0/vLl++9jpU1/7+i+/8tKPm41GGIYLCwvf/fYfK5bMFC9+9SvnH3r48uXLSSUJdLQ4t/Bv/vk/H+zvnX3wocN+98brb3T7veWVxQ/efg8ITj947toHVx579pnHnnv2rR+/Umm2HnrmaSfywatvGmsWV5bffeVly6wCRcKmNGItEAGhP1W8ASB7ZX7yniwTkEekxBpTECohdOwsWxF2zCwWkemuyD8DsVgGcQJQFsUrL79MipKk0ul0okgrjYfdnjVOAIfDISK22+12u72+PtA6YAatnQersiyz1mZFHoXhoCj3+4NIkybc2tlrVqtJHE01WsdWlo8fXz2+umKK7DNPPTZIi82trVq1Ojc3OxgMQIAYCHS7PdPt90AF27udzmG/Wq+XbhBEsSCFQSiARVEaUwq7OFCowVqrAwJQImitUyrc3ztMhymz7Q76xjhtHVGGAKT0wcE+MxS5QUR2LKR9In/k27EIC9x1eyco7L1Q3BgKZWaPtcPYL5k8ZxTWkqfiCooQIiEH5DSxQoeuJBHSYi07AADSWqHSlTjSQWiZ2AkyKzCKkBE8lBhoUiooc1YEYRgAc5GVzpgsHaZFMdVQ9VpVnBxfWXr+uc9cu3HNggViRpZRF19gABIEAgGQcSsqRHSj5DQIy5jA7cuLfAdgCIACQgYmhUoBoihUWlGglFZAwoHWRKQItNalU3/71/7hl7/+q8NBEWqMp6K4VglbNanFEMfoQGnVLEqTmf21m04KKM3u1WvTD56FsCpAKOg9MiIBJBAohz2XdgtJdaKDWCMiiBApY4xCJGAicuxbtDEyEwIgKhAEZmYLlsSDgqBIIzoR0ITGsDEOPP9ZQAGCdRgCMwuCdbaCR+MBNSoX9Bv3pKvtPbvsPeDuKLK4j706WcDgrCn73X6lMpXUqojsxAGjOMUsQF4t22WmdOIUCrJVChUSEAOiYxb2whGIPkBDEXHC6HJm8UptCEIE6ICQGIUVsFJIWinUJduFxZUv/PwvLh8/J6jBMIDvIDK+M9+BDu/X/ZUjRIXJcrg7CABWoHQmtVkBuRCAw7IswzA8Wm0Go/AAfaXgZNxo1PKXjvwsE47ECKWHkWJmEAQCYIUDAaJ7OL7+u+koDIMgKMuSnQOlRKBWrY0Jz+IFfIsizzJGRKUVCARBoBQ6a0SYdMTC6TCbtLTOsgyJrLVFURRFEQZ6tL5QkkqlXqsVeWZMGQaaKOinKTm71KpUFWEckqM8K7c2NxDpgQcfPHHiuCLsdntKYRgEx0+d7B4cDgfDShRn6V69XgOFzdbUIZidna3IcYB6rztYXF5RSS1EVTpXSSqVMBbh3v5eK6kqFE7TTlqG9QRs6bI0SzODCsNKfXpme5ipSqVWq2/t7DTb0wLUbE/tHRzuHXavfXTt3Xc/3N3ZnZmdm59fqFar/X7fj2a/319bWxsMBlNTU7VazcOf91fTj+lNRzfKj3kwn3x9ApI3eUjw49VIf47Xz2zjL7tt/Ae9FYpLwqjVbjJBbkqP1Rw/dbLRaDZbzZnlxUarubV+uzbTbrenX/3Rj6an2+/+5E1TFH3DcRJOTTUX5hcAYDhMH3n4gSRSWZaeOH788PDgsUcfPdzZXr91a25u9s7a2v7OISKwMCJpHQCgUqq0VsROKHECYoGZnTGMDr18u+XEkdiAmay1TsiCKWPip5+++MyFs2AymalduXr1/UvXKAjqlcrWfjctCiQUENQEhFfvbD1x8VxnfcMzpxvNRrvdfulHL6EO5hYWWMBY8967l5rN+tLx42kpN6/dfP7pR5975MFjx5cowFvr62mai3Xv/uStYX/wzLOfPvvwgzvb21l/ECdxa2a6mlT+2X/73wWBfvYzz5554MGDvb0PP/jg9PHjmbORivZ2d4+fPimlWbv60cKxlXdeff3tN9/6ua/8/Kt/8sd3bm88/eLnTp8//5Pv/2hqcXludanZbH7nW3/EIsSiSDlywszWolZAdN/E80hmHTyy5ftFgC9isWJMOSpnYR6f0IiAnv/nubnePgaDASK2Wi2f5x0Mh+12U4DSQTozM3N4eIiI1tq9vT3waWLFRLExpYiIUkEQ5HlelmUYRpGElkkjGSdZXijE9c3tq7duLl9ffODO6alW/eypUzPt9my7NRgOB93+xtZWXhQ7+529/f2iLLK8yMrcFIYFjLPWcWFNUZTO2KIs0qIAVEkck0JiUUqMcZVK1VpbqVSzLHXOCUO/P0iS2HKWJAkgemZnFEW9bt85JyyAyi8/YUGFCCjooVmGUddfuM/NndAb5N7rpy4tFkIgZEWiCQIlARhER8CofNU8ktbAwgKkVBRFURQCEhA5D7zJXajMa8T6kgkhRZRrpbIsM8YURdnv993cYiVJnOEZlGeeevq1n/zkrXffRH0kwMURcubFDgnvakd4YJ8EhMAjvt5LJ0AFQIgEQoSatG/TAAgkQgjCVgWBRk1EQRASYWlh9dQDX/qVv+1UVJmrg3GEqJJIogAC8v4b1uLayiIM0mHnsDzcA4A7N24u3d6qnz/FSrw8HgqMW55DWeYiLtAaEJyxSKS1ZudAgNQRvS4Qdp5jzUopa4wX3xi5liLoKw49vZVG6sZKKY/RAjlrbFmWOgx8udWEpjIeqLsf9XGn9uPXxy1khEIiebm3PMvyvJxfagVBSArYOucX5vhtTWmKvBBmNWqVBj6PgeCLx8A6tMzMoIi1IqJABNghM9uR5JZ1AiKgEDUp76w7h8OsWFxd/crXfmVx9ZSDoLQsoJRWyCz3iPaMsOqjPOO7Ti3ARC9t9HwBFmZ2pcmNKYBAoRIRD/cQ3SUqjJfY6CPg3qPq6KcchXInrrB/SGvNws7dI200eiEKoGhP+/DtuZVSeZGHcWSt9dooRORDVa/UKCxFUYBjIiqLHAGRxVhbWuOcSUziT3eNgd8OojAEgEqlyswirgbQbrd7vW5RFIU1oQoxjDrFoJbRfCWpalQ6Nok9GGZ37qyVpuj1umk61FoRgtJq5dgKO1dYu711s91sMvPe3u6g3ZqfnSJj9m9cb4RhXsjGzmEqhyceeKjebAz2DxgVhGE8u9B1HLDNQR12h1OVphnmMsxIBKKoY0V0ZebUSlSrDrp9LWiZc2P2DztpYd56+73t7Z1ery8CWZoXedGcn/XQhaeMZFm2s7MzGAymp6fb7XZSqSDcDfdHM/ZT9kHE+5/58R3z6EMTU0BfiPoX6eb+zDb+stvGv88PHh3gMj5IRIFUQ9Xv9mpJfGx1NUmS3Z3dPM9F3O07a05xt7PfOTh85LHHtA4fevyxxfnZy5cvh3Glt7u/urSsKJyfmw20vvrRNUQmBfV6dXZmZnNjY319bdDtXPlw/7nnnzt55tRO+pGsbY/gbQEicuJ0oJ09UlYsTsh5cUlmYEbHyDzK1yEQiHOCgcKHji2vNpPDzbXz589874cvxXFlsTn73ocfHewcGp8oQwAGpdAKpI5vb26Vw/6dja0Tp48/+5lPv/TSyxubW0D6kQsXgyh6/Y03maU0BqJkbW2tEgQVsN3O9qO//OU7m3dWT5y4fXtjaWXlzTfeONjbv3DxwnOf/1xnb/9zL3zuYNi/8MRjVy9dvvzeB0DwuV/4+fMXHnzrtTdeePHFZqt14vyZ3t5BHEVnLjx05/btqF49cfL05UuXzp1/AER+8Ed/XKlWT50785v/5J+Cg0998YVHHnvsT7/5zfnlY+zeYUDlGbrGMLNiIpjMtUdeRqGSAAiCQt84q9QqAFLCAiwg4pwT591fnNQasd9C5B6rKE1ZRbTWHuwfFnk+Mzs9OzvT7XaLogAAr7gEAB7JNqbY2NggoiLPgyAIgqAoCmtN2S91pKtJooJQawWIxnEnLzsfXbt261arXjtx7MrZYytLS0uFsR9cunJ7c6s3GA6yXACMs5M0NDMzgLWcFbmImNwvriBJYqUCY0wYhtY6kVIpiqIaMzvH29s7tVrNGBcE0G619vcPlpeXDw8P8zzHu8xaPALV+oV2BCbHSUAgY67BKBM68QD8dZTX+/FVpoC1goA4UKIVB8gkVsAhIinlqbzkEFAUYhiFSRwTkc+7IwDDSOdpkkYf1VQpxYBaaV+kaIzxcbW1Rie1uMJ1gqWFhV/6xa9dvXrZ2Iz0PaGRsDgARSR3RQLAi0D4XgUMQt5/AUQQAvCtV0eMSc8aVoRAihBEUAQVIaKzpgQc5rJy5nw8t2hzw6bEJAwqiSgUBBQgJ2KcFafjMG616q129/DQMfS6/bUPrzxyfBWqEY90fdH7ugjinAUQQCEiHWhmz2ABBDBFySBaKVLKS9KOdr9RC0lRSgEzG0tEiggEkIi0b2hBzErEjYrzxu4aMyut6IiqyRGfb6KPfE911NF6qcmT70NzRQTRk1QRRVxpB/0USbenpgkVO8cM1jIzq3FUU5qyKEsRTy1GjxmpkecOgOgcW8dWJPBUDWAAUJoUKBJiEXbimzmBA+8POsbcyvGTp7/yS39j+dgpK94UHZHvp0GT1Te5zcl9TYQOJtf9Q4QgwA6sdSWLRTXSEfJlBr6wbPLOfr+He8+7idM8Gd7J6N1HXQAA7z3f91XvurkgI6UF/zxnXVEUYRwrpcIw9FQwHHc4TJLEGOOcA0IBIKWcdVme+XBUBJxjEQiCwMu0J0nirJ2UCYv4qpTFfr+3vb3N1ooKUAcaK7v9NNFhu5rUgbgWs3AnzXa3t4aDQaPRmJ6ZGQ6Hzpk333rn2OrKzWsfiXVhEE5PTzdrtd5hd3drsxrokrERVyMd5c7Etfru3kGt0ay12oe9rhVM6s3pVuvOjRsHudWVei8z9Vort3Zvf8/ZPJ6akUq1PjuXVBJAldTq/TQN48Ry5+bNW/v7B1mWaR0AFtaa/qDfnmoppbzM1mR2vUPT6/WmpqZa7ekgDO/b8OCT3JSjU3j/deTJ94U449Xy78Pz/lyun9nGX27bcPe/zyf8AACCAK4SBRceOrcwVc/zvDM4CLS+ffu2c6Zajddv3qhVKztp2ul05+Zm1tfWZ6amk+TE/NLKwsLijd/+xuHewf7uHptybm7mYH93Z3sbBTbubFbjWjrINja2jh9bEjZLK0vPvfC59f1/5d68jDSW/kVfbzIixk02Sl9lrBAdCwECKkAQtgCCwJrE2HJhqnH22ALm/Sy3t27d1qT39/aCqOj3elrrMIoHuTEiGkEB1KvJc888EWl369pV5yQMwt3dHVIakdrT0weHh/3hMEkq7KQ9u3D1xp2Dw85jJ5egTOM4evXVV15+6ZXZqem/+at/e5AOB8NhEAQL8wsvf/cH7739ztLq0hPPPvPQQw+99+bbzam2joKVhYV/9c/+p2wwvPjIo53D7s2r19740Y9bM9MXn32amZ9/8cWF5dVau/3op5780fe/N7W8fOHRCzeuXt64em16YaFIB7/xT/5HVMHnv/pV/G9+V5yDURM0YuGRSML4QBXmo1w2YQBCETam1DpQKmAewVdsWZhJABQ6AGHxXi+OE68TK0qHaavdPn/ugShKjMm7nW5f9cVxnuf1et1Llh4/frzdbvf7/V7PtNvtoijYOb+0PSm2LEvjTL/XTwdDTRSGOgjjMIqUCkvHO4e9fnr1xtp6HMelc0VpPbFbaa21IiLlKYnOls453wgK0FjrRGq1ahJXCMlYpwONWsVxfHhoRURrxSxhGIlwWRphKQszNT2zvb2ztbXlc1N+zxlJg3nMdiJa4kVA71lmDkH7o/YoJncUojt6rB49mL0rkAQmCrX2BB1gHPMMlSakgHk0EUgY6qASx0GgAQnFV39ZJEECUkRyj2uFSglLFIVKa2b2IVB/MBgMh61GO0ziKoogPv3Ek1/+uS998/d+RwUKaNzczCNuQgxEMPJoceTF+t4CxDLCUHwPCQXoqa4oTo0cXwxHwlKgVQAggEhasXMsOCyLSqsFAXGJOoowCkQhILBxaISNA7FOWAlwEGCSlICFMCPcuHpl9eEHGudOOAQgPWKioiCDs1ZpJcRhFCIiaF2WZVEUcRw757wuFQgoJF9wTEQISMoL/6LvfKu8ei6ic06Fo3p8ay2ib4sNAaooiiy70ll04Vhh9+ieecSL+iRAd7In4ydDuSOXGBGEwRRlnhX1erNWrXk2NooCsSwCiF7myFrLzo34Sr6BsJ8pz2NBAAFjypIwHPVsEAABBMfW8SiaFR7jBAjOEaM6cebsL339by2snrIMwihOFBEc0cub3MLR28cj131HydGlAQDWldblqEY1mv4lQRAYY7TWYRjCEcG+ox9036ge/RqTcGLCZBCRIAjGfvPd7zbSbQABAO2ROY/M53le5EUYF1EUufE1Wa5FUQRBUK83ALA0Zah0DoUCjYCOOYpiInSOAyCvNhIEgXPO34/W2jnjHfnFxcUsTfuDHgMrpYS1oeTOIAtCPVOptCBwGBu2vcykwyEzLy4tbW9vL68sD9JBt98L40o1DoMovrW2VqTDdr01P7ewuXVn9fSpva2dJIpmphbyouz1B+tra7MLcxSFXNreYBhXqvHszHSt4pz0uoP9NIew2jozu3d4QM1mdaqVFzkz94aD6enZgmVva+f2nY3dvX2f+wjDIAhUaYrO4cHc3KwfMb+WJpQRa22e5xsbG71BOjs7W61VFfk9gcdNZf7sJPIR/+OTXZyjuPxfKJr7M9v4q2MbIpCEOkQ+PDxMs7TI8rm5ubmF+SRJ6s1GXGkcP368d9g5dS5kgDu31hId/PhHPyjK0hbp/t4OEVYqEQLXqkmjUa0k8eLCwqA3sNaurK5qTc995tnO3m6Wpndur29vbznHgUKicQscpayzaiwY7vMDvsBEAAAYQBiBPd4yJkBGgtVA9w62oRiQjihKsjRTSPVqZardnF6c39nr7B0MMssAMNusfeHZJ2Yq0db61en52aW4tnlnc23rzuz0woWLFzu9wfVbt7K8aNabDz308I2tvY2tvYdOn/jy554o0+6ps+c+eO/9zRvr/cPuY596uiyKz372udKYhdXlH/zxnwaALILM//1/898mQfS5L37h+JlT69ev3/zw0qnTZ27cuPHgxUffe/snvcPOzPzcR+9+8Ke/9wcXHr344XvvHT954oN33zVp/tWvf70x3d7fOzhx8ZFHHr3w9quv37p6bfns6bWb1321NTMrUqHWhTHCLEQiMuoaf5+FAICwsGPnrDEiQKQRoCxKawwCgE9CH8FpPskYOIpCY2y91rx2fcvY3NehhGHovYrp6enl5WVjTFEUZWmSJCnLslqtDoepiFQqFQA0phDnnLMg7D+OjclKS6N+TAREnJepZQFxjo21hGjywt+Sp/IrL/XFNkCllAoAgkal1aijkyItBCxpVTgnAI1GHUQVRRHHiQgwO6UoDGMi6Ha6QRikaRaGNgxDa61Xo/ciiexLl+5dYuOh9ZbGAOpjQzSC6I6e9/dd/u+tKmoFnjhDQIJkRQiBCIVBGJi9iivGcRxFISEy+BBQABQDOwsjJG9cZq61BmcVUhRDEATGcJ7nIpIXxWHncH52vlGpATOQZlC/+rf+9qVL799cu66VGn/XkWiyCDgWLxXg2doKvW6tKAIBkpEAGSqEQAdAQsiEEBASgfZwL5FSvusYWutKa4tSsrxsTU8DgQq1WAYGFOHScmmEkQIirRUhOdRTrXBmSqoxm1wKu3bt+nuvvPrMwiy2G86D7AyIAojWWVMWEDgoQUdRoHUSVBiEQZQXbx7lxEdN6ZRSXm54pPOKJADOh3ZEhGhsqXUoTFEUO2cBkEAIvO4CElFRulpYvXdCxc/FfU7eJ3p+n2gYEy/Xg0ds2Vq3sDAdVSLnHLiRWRGC1jqOojAMabQNIo6iDp+jEgImEKUC7/E5YwpBYNa+C6ISAiQA53nhCnUUEQgQlaxXTz/yuZ/7pem5Y47F12IqQEIZMaLHSl6TL3zUHz16X5NH7/u7YVuUmXXGo8lj5BkARuLT/pSczNfkTT5+/E2wtvtw3MkapFHb5zFocvc7IoIGAC0AzrmiLLXWQJgVeZXrPjCanDdhGPpUlL95HQQC4nnoAIiAYRRGUSzMFCsRIUGlVJ5lxhilVFmWZVkAiK+4bzZbyysrlz78kJmVIhVoEUkdb/WyRAfVQDWi0NVrIMNelvcH5oMPPwiD8M767ZOnj+/s7FaSyu7+wf7BYaB1vRJDoONa/fT5h7Ii3c+L04vLe0VeZLmzbmd3/87udq1eb7amhoPh/sHBufNnk6i9v7NHcRhVaioMl46tnq9Vbt68eeP69YsXL5aF0Tq8tb6OpPb2Dq5evba3t6+09nmiIAhMmQ7TtCzLSqUyoUnxuJu5z92TouFgkKVps9FstVv1Wp289IvweAOd1ErfdUvuy1zjqC3k6BH09SICMFIDRETf/e8v8PqZbfwVsA3xFAB0XK9VSlM2W/WZ+RlTlEmS9LpdQiRCAel0DhnkwQfPHx4cPPPc8/Ozs6+9+mqlXl1bv5XE4fnzZ05Zm6Xp448/FlfiaqW2MD+/u711bPXY4vziBx980D843F6/s7a+duaB841GQ8Z0Q0+YI8IwisrSeKvQWlsLzjnH/ogbGSMgI4hCAaWYoVkNji/NzFapSJURmJpuD3qDs+dP9/rD0pSpyTc2NksrANRIws88dfH00szrr706THtf+OKL+/udd97dNgUzY63R3NrdM9YKQxAE+93e+s5eEkXnVmbJlS+8+IWl5dXXf/wKAxw7ceKjS5dff+2148eO/Y1f+9VKtbKxdoaIjp08fuOja2tXrpXGLJ08dvzY8e7B/ue/9PNTMzOqWj1z/vzu3lbu7KlHHlr/6AYyalC93V21euwHv/sHUZysLC595/f/sNZq/eKv/Vo+GDSv3zrfnjp75vQP/+RPRil1bw+EiOiFIRGR7ztvYFyfCCPmh2NGEZIR+8i3ub8r+MEi4HCEmvN9DnOv20PZRCTgkZwUKbW8sjwcDo21M7OzdzY2PJEpSeIsS3WghDlJoizLjFH1Wr3VqDpT5nmulWo0aoSIoBRp61yeF4UpBoNBnmU4ln0KtIrCUOkKysgvcc7lRe47fgiDMDebM3E1NsYM+8MREA2otXbMQRggkFKkgyDLc+fcI+cfWl9f39neGaYpjHxE0jooCiNsnL0raeSZuOh73o5Ge8xlmASfE2qr53JOhv1Izwg48o6TA7sSAtIovyKIAKhhJHQsTghZmJCUJoiiUCvt86wooliAPA/Fc4X9SiHw1UZaoUCgbBxqU8pwkLJlJtM5PBym/Vo1ieKQC1OrVFYXl//h3/+H//f/x//Ncu6zuyjk24kggAiPXEkC8HzbUQsqQMBxfb33a5UiUCgIrAi0GiHfgQ4I0YmU1pbWlhbzQrJCFIVgBVjYWrSWBNGxBoJYQ6BQoXNOQKASRjOtmdXl9eFwsLcrZfn+a68fe+Ds8pMXKAxFAIVAFLgyS/sOGMSBJRWAMDh21UrVWpfnKQCMKekkIkjk2KEfeh/LeDV3QlIKvEorCCEJERCikLOOCB0741uoOMeWjSkgObqVTnyte9Bc/BiWfxTEnfw6eTF7RoozaZpbC61m22VFpz9oNtvOFqXNmZkoiKJqnCSoCHzJqK8LFCEABawAFZIGUIgKiRB88RmAQq92BgCKNAFRqEmRRiQpWZ079+RzL36t2pzNrXhdB4XkFcOYaDSM97rq/v93NUZgwvAfUZ5hdEwhgDiRwhSWS1Q+SiFAxhHlAJUKyrKcwEA8FlgYV/2Mfj7q8hpjYCSmexfERe/2j0YVfAfB8WyMOswJOADRpFWeFkDIKGmWBVFUqVTGGJvz5/TEpxERTxFDkVBrhejZmdaUWlFRFACilG8PTkSgtReic36YyrJIkoq1en5h6cattSLPQYGgKI1I4cC5tU735HQ7VqoZapNExpTOuH6/r0iHgc7fT48fP56ECSldlKVxPDs/XyJcvnEj1KpardSbrZPnzkVJ/M5bb/cP9llgZXl1d3dnY3Mjz4tKkty5fUdFcV6WvcHg5MxMvdHYO+wU1imle4ed7333e2fPP6jDcHtnbzjMXnvtJwf7B14uxO9lXtOuKIrBYNButwEgz/PJEHl2FBKGFClEYOkcHnYOD6empmZmZqNKBUkdMXwB4buHPQC4jwUx9+ywPg8xOvFHDsLHsJw/3+tntvEfjW3cBzPc/fvoLxxqXF6YT5LEFeVer5cOh0C0vbkpjqempm5cv16r1RrT7WoSXbt27cwD54I4PHv+3Pyxldu31pWKN7a3OofdrY2NO3Oz21s7ve7Vhx58aNDr37xxnUSufXSFy/z0ieNzRT47M3vqFCn9skeTREQpLSjMrAMtIEWWE1EQhugsszPGjsqncKTbhAKIWpGaboanji1MVaP33/twdmH+9trt3f299mF77datsrSGqd2uu14RGX720XMnl6Z6B3tpOjx+4vTVK9eGWTY9M1sUttZovP7GmwJSrVYlQQfq0q3b/Sz/7IUH4zK7/tFHJ86e3li/Mzc7O7uwcOrM6R/96fdMXgyH6ebWxvVLV+Zmph599lPT07OHu3tRtTI31W42mv/jP/7HcRw9/tSn3nn73U+98Nl3Xn8tVPozL37+saee/P4wazdbKgovzjybDtPS8SMXHn7v3fduX/nowScf/eC1Nz54+53VUyc/97kXrl364OzDFxC/MzoA/AGpCJ0cbQd/j1V4E0CUMbmQnTMMbK1zPg06shR/NPlKIAERL4965CqLAsTNzsz0uofDIUdJOD0z3el2RWRqamowHGRZtri0pDSZokiSZHdvx1oTBJo5zLM0DoNGrVJv1rM8Gw76oaJGo26tS+IagnLMzrk8z4ZpX2tNigIdxElcSRLnOM9zZvYt1qIg8DJolUolCAKtVOnKQZZleWYZAMmxAEIY6DiO0jQrbWmdqVSTXq/3wYcfVqtVw85YF4ahUhoArXUiYo0diUGNS95xNCY4Zn/4deF9l1EocHTVTH6ZEA2PvOqujCgiqlATKZHRt0UEjQpRnLAVBygaNTKEAQWBJqUECZlRmAR8HT0CaK3KskQcUWWVwlAFmsgZTuJwmJrBIC3yMgnjXr+7f7DXbtZrSdMysDgA+Nxnnn/3597+/T/8d5EiFgBBYXQgQB7G9vK93rMlbz80auHre+E6RaLJ16L57tIjf04hkLBCcsJsuTScWRwWNqk156cXxIjNCwHQREACWpFWrNUo06QIFSJAbaYV16udXs9aF2jKe93X/+S7U0tz1dUl55/BwMaavFBhKAhxVAFAGvUfU1GooygaDHvOOUVKRJRSSKMmET4fgggyChJG4l+IqED5heXY+WowtqyItCZmCbUGZJP3sLlydCP9eC0UjB3Z+zimcoS3dtQ8Rr+JOGv6g5RUUE2qZjC89M77jz/1VFIL82JoHIt1QZTESY30iIeAhF7sGgSRnSf4BORTguLjECQvz0Aj6J6ICBSO1H1LK83ZlU8//9WsDPL9/vTsVAFsjQU3qXhT5Cn7R0+LcSuH8aEDOB6L8W3CCGL2RB92DqwQA+AYyR3F0kqRCGitjHGeb+BV/3jcN9s7EkdZE0cPr0lCwy9Ppe62kHDOMjsRIvLCd0SEjhlA9CTIiKN4J9vRSk2AKBinrX1C2TMyjTEBKWYuhqkOAnEshDrQeZ4DwH09e0ZNd0SiKErTFACcc2EYAuLs7Oz62hoza6VIaQAnhJ0yv33QW2nW40A14rAoIsd55sSxzUuLwh9dvnLr+o16o8rMx0+cmJ2b05pEIE8HAmDYdQZ9XWRJvYoEa9duNOdmV06ePjw8vHTp0uzikiMqynxqesYh3t64c3FmJqwGRVHsHxyqKK4llTwvVFFev3LlyrVbdza3kyQOw1HJlOekKq19qm5SgMnMfp78ZDjnCs7DIPb6cMy8v78/HKZT0zPNVjMMo7GdjLG7jzkif2bO+t/zhD/f62e28VfANvzmJVqpPEvXB/uhQmEmxKnp6WarJSxzS8ssUKlWFldX9vb2tzY2F+fnv//+B1EUBaF2ZYEAH330kVbB9vb27fXbzNzvD5XSzWbrzp3biwtLjWYzqiaf/9IXd7a3Prp+vdfra6VxDIw4doqISPnYKUmSPM/LogBCRJooNxtrgFl5WXUhLXkzSjq7O+vXOzu7BzqOtza3qrXYmbISx8dWFt67/JFGRMcPnFxabFcvv/dWEiWfe+GzV69d/+jqdRY4/8C5xaWl7/3w5cFgYNhNzcy22rOXr691htmF86c++8SD+zevz84tK4Y/+Na3nOUvf+0XT548eWXhUlEWjzx2sXt4+OHb7+anTsytLP/wT77fqFa/8vW/dvLsmZe/94Pdne3HHnvszddeVVFs0uGP/vhPhv3Bs+qF94T3drYvXLy4vrP10MMX1i9d/ZW//2uNqfa3v/l7Sw+dWz116gff/nZR2JOnTv3Bv/71jY2txz79aT+nowz+OD8wwTyOIkZ3LQEIRJxjtMafiM5a56yMZOiOmpYwy08rZBXgqx9dYWEWzrJsfX1dKQrDUCl1cHDQbDTzLO92e7VKZWdnu9frR1GAAGEYOmt6vV6gVKxoutWaatTLohDrNECjGkdxRZE2psyyrDTVQOsojsV3RVIkIgFhv9+PtFYgYTWOAq2DoN6oH3Q6e/t7nUE/SzNr2QkiahDfhQEBoFqtSF+McSxGa93r9bIsC4PAlCWM1W2LovBBwv/yawQdESF5vqzAkZH3rowHpeDISQwycqpIhUTk8VhE0FopEhBk5wgJRStQwi4MAq01KQ1IYh0IWGtgHEV7lheR0lqPNmGlFFEYhlEUayXWWVMaACjLcnNzs9VoVlabcaVamkEYBEqpv/Nrv/bBB29ubd0KlPZhjRNmK+I9DyQhRQi+14PSpJG0dzUQAClSpMQqUr6CC4BBGBE0Ka3I25djLEtJS1uUnNrhm++8/dTznyOtxcvgKqCAWI1EoDzkiADASKHeOdhLyxwVklAliHaur7393Zc+9fWv6umWn2kWdD5QQ0UqACVWmNmhkBMIozBKKs5aZy0AIiGyMN9VvKKxEBWMUJUSxk0lKCQStMxKaSJWSoEwoQOkANHYIyvriMs1+fU+KNdfk1V5dJ1O6rSYGZDY2eEg7XV601OLWulBt/vB+++XzF/8+RfjuAIuzcUxMAW61WpVooDzgoAIfLCBCkCThErCYJTCIxJNSqMiz/Lw8sZKIQiBAyFmorj12S/9tVp79o3X3+t2up/57GcqjQZzZr1ssAdCReDeqsr7wmk4ctfjRTJJOwmAODaOS2HnYSwfPOKILztaI0Qyyd1NxmpCYJgspcmUeerCGCab8NT95CoistZOhnry1RAUAGlE9KeL5w5WKpWiKHw1vfdj/MdHkT+DwTlnrXXWkVZ+83XGVMIgDEMR8f5KGEZBECilsywTYa2VX58jkjgAIc7Ozm7e2WAWH4wAkBOQqHKQp4lKZ2thRVO7EguApFnG7ESKslBIIjwYCDPv7+3t7u1euPDIQ+cfvHL50uad271B/+q1j84/cD6M48tXriaN5uFgYBGmpqa6w+F+t3fixIl80N/c2U2SuHdw0Bv0W1PTAmrvsDs7N39nbW1vaxOK/GDj9sHeTlkWWqtAKSKN44bmWusiz9M09XfqgXet9QRUV6gAkMedVPywZFm2cef24cH+zMx0o9EMggDJC/vcc+RMTOgIJn+PkR2NCOHe8+ov4vqZbfzHbxvjLUErCpWabU83p1taaXGuNTXV63SKopydm8+yLKlUTp46TUrPzS00avUbN29PTdWvfnip3+lklrXWc7Nz09PTzWbz5Jkz01O3zpw7vbqy9OOXyrm5mTNnTmpFgVZbW5vf/94P9nIf36NSCn0tlD/5fEZWOIoi62xRlpPCBULUOlAKvfRVWZbHFqfPrDZbzejwcO/hCw8fXz1WpOny6kKaZe1W+9q1a3maVutNt92daTUalfjS/t6Jk6eTasUYY61U67UoCre2tmr1Wn84jMMKg7q9s5c5joPwK599+uzq9IUzq0snTr/xyiv9fr9SrRlrf/d3vylWPv+lL37qM8/+/u/8TqVaPXn2zP72zkdvv4eh/uVzp42z8wsLX/mlv7a8vPzeex9eeOrJK5cv50UZRuHC9MxbP351f2ePjOvn2e7122vr61/723/j/dffnJuff+EXv3r9ypX5E8cWlo/lw+LKB5cWVlbaUy24lwbqXRwZN4I/6uPeYwkMAI5plF5nYRgXH00OWhFhx/RTSLrOsVIE6Io8G3HjQMIoisJwd3dfEa0sHxORkydPDXr9IAiXl5d7vUPftTtJkn6vt39wgOysszNTU81GwxYlO1sMB7UoTsIAo6BVTdI8Y+YwCI21ZVkI2zxPQWS6XUfCKIwUKmDJyuL27Tv9dDgYDgbDFLyvg8gAOgyjamKtqdfrBwcd5xiJjLVEVKvVOp0Ojql7vo7n/i1urA56NGY4eoSLjBmF6FOzMgKsfkod+n3Hv4zEPpVlh4BaK1Io4gSABViQSLETrVQQBEQoCOM8DiKhUogQAJBXbrlXhgkRMQiCKAzDyAnLxH3vdrsbGxuVWnN+bjEIdZEXocLVpaW/+St/6//93/3XSRTVKtU4ikGp0tqyLNN0WJalLY0QiTgVBYCgQ4qU0gqtMw4IldY46hKkFWkVALBXLg10QMhWrBjrGKwTB9hLhy+9/uo/UqKCYJQzGukmeLU78JikIoUg3U6XBeqNZnpwoBSgpgBp/d1Li8dWT372U1iJQMA3DzDOEYET0DoAEQSyAlopYxlABaGy1omwQo1Evobfn2KTyZoUnCCisCMCZ53WSICklbhx4gwViGPn1Mf82vt+/WkYxH2e7uSZ/isRQmnssJdmg6J1oi3W7W5sb96+s7a18ennnq0kFTYGMRp2i2qj8fSnnt4/PLx05SopUgABkUYIiUIFSUhBoIDZC+d6IgmBaIWB9n2PEVGUAGgqIXzqM19aPXXxxo3N4SC1RXnr+q1zjzwYBIGvHxU16g9ylBtwdHsZHfpHpBXu/nEU/TkW61xube7Y924kJ04+Nnreu2VmX0AGRyLGsUM8+vQJgnv0OvrFlKJx1wmAUakojBc+IoD2gFMURVmWMXOSJJMiOF9m5H+YUIwFABFUoAIKWTiII2etP4W98C8zEymPzSAiAEVRbEzpyxSstXEcI2Kr3a7WqoN+z/kesERghRCdCraGwzikqlLVKLACVoCLvLAOAJxwYUogCIOw0+1+8N77SRTexGs725vAoknt7uwcW1lN4uThhy/s7e9f++jKYNA/e/bs0rHVkt1hrxdFSatWDQK1vb2zu719sH8IoNavXe9uJpBne1t3Kuh0MSjTPoB27FgkUCO43m/3BeJwOEzTtNlseqjJP+Qvrz/gLPtxGwcrVkSGg36RZ/1mv91uV2pVHYZypD3d0dVyf/B07xM+cVH9RVw/s42/KrbBUKlU5udm6oHYLB9k+f7eXqPZ2t3ZSdN09fix9999b2VpGazZ2Nx8+tnPYBBcfOrJlZXFK++/X202dnb2L168eGz1OAg0Ws2Tp89sbt6+dfN6tVLRARFJmWWv/eSNYedwcXkliuKiO/AAEikiIsCRVJDfKGnkzwWktacrFEVRGuPciGnnEIWLlYWlRx4+nQ57D51/cGl1dXfnTqCw2+ndvnNneXnVlMXJkythUt/c2gu1ts7OzMwmleSHP/hRo9G8cOGhuJLs7u5ubG5VWq1TZ04fdvprm7v9kktjn73wQLa//f2r7zz06KMPPvFkJYnPnj0b1+tpml69dMWWZvXEsc07G/NT02d/6WunHzj74+/9IIrjM488mPfT/+m3//uZqennX3j+9dfeWDx2fPnUye3tnedeeEHHutZu7+8fHDt2bHtn9/Tp02+++sbqudMbN27+8Dvff/jJR1/93vdvXb3+0GMXz1945OXv/+jxzz1//oHzr7/y8mhlici4S5Dfvic/f8J0i3i2N4rAqMbaTYhrR41E7lrL/QbjZ4QImF2jUdc6KI0BgMPDjlJqampqc3PzzJkzcZTkOrPWDYepc4yILKKIkjgeZtnW/sEgy4dpXq8kM1NTzVpVnBsOBx5mE2EiDLRClCQOkyiwzjWa1XqtFoRBlmUiYAzfWrtza20tLTIGyIucVCACBMgAJMA8qr4Kgmh2Zu7y5cv1RuOw043juNFoFEWR57nWPqj+sxeFZ7p/fIl94qKDI+npT3ymnzI9UvJSqIlQszB7uTQAAGQGcS4IIq00EgkCM/puZFoTo/LdyianPo9avgVRGGlEBI7iOIpZkRIZYfzO8d7BfrJ5J0mSWrXOtmRXIsuXXvzCuVMr09MzrXojiUKiUIAsu6Is++mw0zncPTg82N2tVio3bt64fOVyr7MPPEi0OHGgQBNpQGEQYescOBsEGsBZ60ojeWHyYsxfAwQQRCZi0gC+V6Ggl49AQODRWCEjG7YGlpaPUcFbqPJ+nxTFcayFPvzRq2G1svzMY6AVi3XOOOcoVBgoADTOjqI+FmttqAMRDqMoz1OkUc8tGncKEBGPOEzWETM7U1IUeU6rd9llxDRFQrGOEX2vFZ4sQ7jX4TsaNH485jzqitG4l+HoURFTlMPeEAWnWm1TlpvrG/kwu75z56Ufv/yVL/2c1sqxiqvVpaXVQNPi/MLGnY2sTDVphRAQhJrigGKtFQGSAhAQ9jWCI4IG8FgAjkCBAZxdPnvh8ef39wd7O/uVKKzF0XAwuLN++9ixYxIExlhPXlbqHqLFJ5r3fSvi7h4l7Jx1bFhKZosqYHYsVinyei8+70FEHjv2Ak3eSR17BXfH8+Oho9wPmY9CKP+2eJfV4J9CiCwi2hjjw50sy5RSOhgpkPk0tJ8Vn48Og1BAsixTSNYaIiJSfot0ImVZEpH3xJ3LfW8Sf5bneaa1arfbiDgcDq21gFhJknarnaZDPzSEihBIxIY6y2F/mCeNiiKohEHh2AEQmcxYAbTMLs8LU4ZxtLO9/Qe/+/uRDoJAgUgcx3ESf3tnb3ZmfnFleX1j4/CwE4XhpQ8vnzx1UilVFGYwzF577bVjqys3b964ce2aJkWCSRDs72zaQScCV63H7URXQ5Xmzh0Z7kn0jIh5nhdF4Qe0LEsfZ0+GyzknMpJe9zPqpft0FInIwf5+OhzWGo1mu1WtVj028/H98eMb6McXz1/09TPb+CtiG4jgrNne2twzQ2tdqIP+YJBUKgopDsJ6o7awMH/s+OrW9na/39u8ffPKpUsnT5+OIxVFyeziUrXWevmVl4eD9MrlK4atIF25fCXQ+sknnszS/CdvvvXoww8nYWSNvfDoo1sHh3vfeQW1EjvaRxURCwCSuFGNiL9BryRERL7M0W+8zFwKh0hiUyf2+o21nc2DXrf34YfvLMwvD/vD06fPNmp1Y9wDFx5M02JnZ3997dbS7MNf/OKL3/qjPzJG8rz47GefW79z58MPLyFoY8zMbC0v2cpuyTw70/7CZ5689f6b1nCj2vyj3/nG9Y8+OvvgAz/3C7/w4x++RCKNemNuZuZb3/jm4fb2i1/9yv7hwcz87Nf+3q8eO3XyG7/+bzgtFh6cf/fNNy+/936tUf/2N7/5kx+9fOz46lf/k7/ljP3M51+Ym53bPthvNhrbBwcXHn/spe9+v9Zunjx56uXvfS/P87Nnz/7bf/rPbF68+PWvVxr1Vmt6sqHzkWJkHOuffOJ0j4cOhH1TzxHN4ZO8N4+vfcKbOMdEEMXhcAiDQY8oiJNKlmXT0zNa6+FwGIbxcDjsdDpZmpZl6d/bexVOWAdBApgWeS/L8tKERLv7h4tzU0kUhmEyLG2SxFpTNYzjKPLa/nGcJEmiAlUURafT3dnZHgyH63c297t9YwwqQiIkBUDOOQ/ZWOscAFhsNlq7O7umtCKodTg9PW3KcntrSweBtVZ4VP7yv2Jp/LQFcxT6/WnP8uOuABhYoS9vYwDxzpNCUhqt4yCIkiQhBPTE2aO1pz72Y/FBstbaQ180Ip5iEIVRFGoqKtUKeV8HQISLPNva2azXa4163bliY+1Wo1ZFcStzM4EKqDRFUVrjAHUQhWGgp2v1xemZRx+uKB0FSbVXuhu3Nzc377zxg9+/8faPCMvSOhKrFXmuJxvjkESYCHiEdAApcmKsOBZMtP7Jj176P//v/w9nzp198ed+/vyFRxgISCOMtNLuDpHh1tRUgjpAHQRhZ2fXFhmKSOnMIH3t29/BOFh6/BEGtrYEBB1oEbYsggCExrkkSaQkQOVMDkKVSk2ccc5FUWSMRRzpBuC4ee/EbSIicWyZHTutAhYhUmNQUETEGtM5PJiePodHKLkf337vOwiOmoTPuuCYtAYTppa1w8Hw4OCwVp1KoqTf7Wxtbmdp6qz7zd/4d+dOnzm+Op8VGakwjEHr8Nyps71u5+r1y+iMChQRKCWhokApT5UmIoXKd7RTRJpAjxsmAiIjgoof/fTnMKhs3vmIAKJQI4Jl2Fhbj3Qwv7jAjtkarxN8V9jxHqsfO50T07zP/lFE2LF1bIiAiJzfebwUM6Aad/9RSiEqD1tMatE8dnZ0JO97f+8l4yetPkQwxo6/9qQ1uvhCtBFH0AsKNpvNZrOpg0ArJeK9HCABRtSknDUAACxCgoC+2YlzLCBaKU/LP3owR1Ho8arBYOCBQBFxzg0Gg3q9Hutgdmp6a+MOjr+rImJgUkqH0UGaVwPdToIoxAYqYCRQyM46tiAsYK3d39+Jg4AQUwF2LgpDAPR7+c1bt6uXrxwcHmitZmemEenll15Rioyxw/7QOffhux+wmGocNSvJVLUSNZIy66IrK9UoinVNUzMO9vPMT5IfHxnrG2uljDGDwYCZq9WqhzzVKJ8zkusjBcyCII6NAkIFKlAeNAnCwFh7sL+fpWmj2WzU60mSKKXYLx6cJKtF+P4U2xgCGKXRFH9CvPXneP3MNv6y28afbRxIDKzExRqqSVSdbsRJ0mw20/5gZn5uMBwWg3RpeSkI4hMnT8TNZq1WK9IhAkRB+PZrrwtLs9kqTbm/ve2mLBKk3YHJsnqtGgbhY49erNWrH7z/wYlzpx+++HDRH+zt7xwOhutr6yYrgrjqad6joJxBITGOS3nGJ7Y4RkBhtmInNfD1kNrNelG4rZ29pJIA4dzCyplz565dvxYE4bvvf9jt9Cq16s2ba9vbB0wEFPa6vZWV5e3d/XMPnH3rrbeN4YWF5U6vn1Sjm7duphAWKkBb/qO/+cvPPn52oRYcdruNVuO1H790eHAwNTd7+9YtAnnuhefn5uecK3c279SqVRH3nd//w/3d/b/xn/79g929hy888sgTjy0sLv7R73yjOtWKKuHbr711uLWrSW/cuP7yD36wPL+4sXbr5Plz169dfezTn5qZnz//2MXjD5zf3dyCIHrgwQe2tze2128vHTu+dvmjd15/Y2Z2xlsOM3uF3DFg4QV0/KHmhV9HyCyMaokARsRbYAQG9EXx6DuhioBjESEkx0bwE0pZHTsBDHSEiABsbZblbmZ2lll6/W6WZtaUe3tbSZyEYRDHsdbacRlUknSYCoiwoOJAB+ycZTHW5HbQHaRKoyIdRVEURc1Wo6J1GGgA9lGwiJjSWnYHnc7eYQcIS+uK3ASBDpA0knPs0Fp2Pop2zukw1GE0GAybzeagHDab9cODfSJlrS2LssgLhWStFZZJW5bxggEA8A3KBEfSJUd8lFHz31HB9riSyb+OZUS0mdADaVwASnLXRWUGZp/NZa2IUFgYmB0IsFOgEJCdjeMk0IrJARI4JHFeGUCYgBWA+P6lQRD4nYRZAIQUhHGCqCrVOAqyWlKJ4wgV0WiuZdjvpVlmBsM//de/2azH5fxMlMTTS7OVRsVZsMNMOxaxZWGZQIC7TphB61DHVVWrz7abMzPT7Wryzy5fqia0uHrMpIM7ax+xTQNg1gRBLOBA2IFoxVCWzlhxoIQsCyLZ0vz2b/82IP7bf/Pv/p//r3/8yBNPsvMwnjhvuIadtaBV0KygpjZKFMczs/Npv98/POjs7rM1vd29H/zWN78QhLX5Zq974CSrQqgRjccFHZMKQQIRUJF2zMDWOYtCiGwtj7PhIOLbyY4AxfFJNFLCEeuMdTLSrGMiBMRhOtjb3mk2m961uu+SMTMbjtgNjkvcvJCZTOSuBMQ5APEtkgGRjR32s04vO31qMSDs7uztHuzlxgRId9bXf/3X/9V/8V/8HytxvdM9AHHt6blTZ0CQnc1u37yhhAgFFRCJAhdoLYBKIflCMJ/EV6Q1oiJg1CI5ytzK2ZMPPL62tjMc9pIoVqKKLC/T1JRu/catar2W1KsGrYAIfzJqK+O/0JH6MBgvARFhAEdcQm6kYCRSyI6JwPdq9gLG3seFcc1ZEAQAYK31WIbHdMF3Lz/SP8IH9jDOkOAYFx8zUywRsVgBN5mBkTcMQkTa69j7t6tUKkVeCEtYrWZ5BgCevR7GsQj7GlUFUJaFUqp0pkzvVhT5N/Gh0sSMyrL0gBYAdLvder1er9ezLCNEZ12r1apUKnmejTYIQgFUREqHBZluViSBijVVSEMUOlUAhnlpS+scICMLc1EYQgQWALAmU+OhSQfD7uGhiCjC9X7f53+FBYm0VqFWYkuFgmUZRTpyOaeshQOtEk2JUkGQTFdrd7p5bi2PhS0mrkwQhnmeZ1mGiL58yifcj+6hkzw1AIgwjkvyrbUISilfI+I6h4f9Xq/ZbLZarSCK8d9Dtvuk698DJPy5XD+zjb/stvFnurmea0iE0+3m4sKCsMnS4bAr62trado/6HS6ewfDQX//YL/b7VhjnnzyycOi/PTzn5+bne0NM6313t7eYNBPatVjJ47NzM3cvHHjwiMPHju2sr21NTs70x/012+tzc3O5ln2g+9/vzU9xVHdGSdjnbWJeUzwtrtWzaMblBFDC0GEBcSWx5ZXHr34sLCdm5s7duzY7du3k0rlytUrOztbzsn+/n61Vi9L0+sNdBjtdrPX37m0Mlu/8MiDjz7+xOuvvX7nzqYp+fxDD545c/qll19JC94Z9IpB+uiZE/P1+E+/9a2F+cVf/Nov7uzthnEUVyvnzpx99UcvXb9+48yZ03/ta1/76MbVi08/MT01hYr2dndnWtP5fvf3fv03KrXqX/vVv7mxfvvUmTOPP/fM1NTU+++835ydPnb65M7W1vbmZrvaOOh2a0n1jR//OA7j737rj6bm5o+dPt3rdr/0S7987PSZ3/uN31w4furcQ+ffevm1fDC0rdbEZjzrgNl5h/XuvKMg0NGplvETREQ8VvtJ+wSNRTo+ycsFnxcJQ83CIGydE8CyLBcWFhCxyIs0Hc7OzgRBUKvVtNadzqHSGMcREpZFqZQSAa/gxQyCREoV1rrShGHYS4fD4TCJY2dcEOh6vcaO8zIjpDAIlNIU6NyKZY/usAYAQOsYUZAUOqeVMsbGceKY67V6rz8YDAZE5PuBGZP5+DPLMq31v2cZICEQjTII92yn/8Fb630v8GX33qnyXXBFxJdBOWeJEICMMQgchgGCjHp+eQGBUfNmxJH4FWjWHmPz6wMJgyikIAChuFKt1UytXksqFa0D9M1sBcBYESmG2dqlq4sz7SIbPPbCpxcfOKGrVdQRp/ng1k53t8/G2tICCiAp1FoA8qw0BrMhhuHJpfn/03/5X03PzoQ6JpH12x9949/+z72d9UhBaco0zwSBEJwDRNRKKYL/L3t//mxZcp2HYmutzNzTmc+d55qruru6Gw2gG0B3AyBGEgQJgoP4rBd+etLTs39whP8K/+YI/wWOsCxLfpIoixQJijRBAI2hB6Dnru6a5+HO05n3kMPyD7nPqVvVAEQ/kY4gjA1E4eLce+49OzN35lrf+tb3AZTJFQCIQDHg9Vs3/+//+l//Xz71aQfjW/Td+MYwsAyVtZbiqDI7HcVJfWbaaZ33Bxu379y+dlXk2XCv8+M//c75558mrUUsAJ212hgrlRJSBlJ6gQWjtWOnhAQCZwwRAbgsy45QP0sK2SRCxSMlchKkhGAEr+Z9cHAwGPSXlpeiMJrAsRNAF8YPYBmKYanX+ugCYIDS1dYbasPE14C5yIrDgw4DzkxP66LY2drq93vaanYcKvnmz372V8eP//7v/U4Sx91uV6BotqdO0jlrNRrT3d0IJUYCJYJPgTx0ioiIDhgEjV8XpZYXY/jkM89bK/Z2d6MwEkSu0OlwpISoteqgxPb29nK8GkVRnuXWPUSgH7vGI/lzaozA7MBZp7XVQMil9Hn5cBxNDMZ5Qply+B4VY4ynRPrjchIq4BhH9/1neMRqjsf8Ex86l+cs+gSVAbxCGiOi9NWQbrfrPV2lEJEK0DEBMIPTxiNS3poGAKIw5GrFH+RClLCzd7TytWxm9vifP8OKogjD0K8GY0ySJFprrTUyBEFQq9XSdOQcew1qL5ohhAqiWAnqDzOqhBFRLQwMWQQnkQrhLGCmc5AEvqAjiIictQhYrml2UghCFIjiiNsyCeHQCvCz72pB0AyoHggHCMz1JKqFoqqUUXEcJ5EUmbbedmiSSfjhZuaiKAaDgR/uyQTwWPvN06f85OV5LqUMAuVfLAojSQpZalxorbe2tvr9fnNqqlqtBQ/9sR55nH7RzvqLbAL+Xq5fr41f/bXBvl/JDfuDGzeus9PDfq/ZbN6/e08q2ev1up2OLopaUlm/ey+Q6salK1euXXv2k8/pIm9PtReXFjc3t3rd3tLqSrWasHW7W+u9g72oUr9y6XL38LA5NbWzvf297/7tk089McqypChOnV5bXFy8ur6HpeWl/7AARw6ej9+aj3URURCKANEV21ubd+7cPjg4dM7dunVrdXV1MBg89dRTJAIHsHbsZLffrzWanZ39YWGv3d2ablXiMPYLGC23W02js/sP7jbas/f761lumkr+0Te+tH3v1sH2ni7M3Vu3r16/fv7807WpViWO79+7z8bEcfzaa69duvjhqVOnvviVL68/WD94ev/UiVM3r9/sdzozc7O7G1t/+Z/+1Fr3hd/+epHnSysrz376U889/5l3X3v11OkzEATLx9Zu37u7vLo26g/217eePPvED//irza2Nn/rD37/J6+8EsaVz3/1q9oV169fF9V49cwpOAIVMZf47NHDppxBdN5XqRxNBucfAABAEA/dDyar4+jg/vz1c3iwr5RELDmf2ugsy9bX14uikFJKSY1GIwzDjY0NKaVSUhcmipJAhWmadns9pQIENqasETvHQsgoirIsK7SJorhWb4zS3FmXGQjDiI017KamptPRqNCm0EYIKQQ6BG2MQIzCkBCN1kpKBADHQmEQRHlRTE21d3Z2/KMXhmEYRmmaBkEwNTW1vr7+Sx4TLpvJJkfvL/PH/iVXCXTxOG1gn5AxYtk/DuN+BgZgBiIJgM7ZSiWOwrJJi1EAA0sAiz4oYvZW6gwA3hCLmaVUQRAGYRKoiEgEwTCpVJqNZqVSlVKwtYheCpuZWZLI+2mhwvapY0mz2hl2RDYIgjhM4mi6cbDbZWDJyMBSKqkiAmTvlaULLnKRivnGjM4QBIk4OH32uf/p/zD3nX/3f8Vsv8hHewedQToyhrPCArNX3bXoCwgM3q6YQIXBhQsX+t1etdUoY3DjnNbMTIECAERBktghVSmuIxDGuoimmnGrduPDi/ubW6O9wwtv/NTU8lozkZIQ2RmNUiA7BHamIKkKawGxsFYQoQwUsbU6RLDWkUDnLI5r2f708XxQPMpA8F87uL/xAAGWF5cECTcmORy9YFxjefg0/eKWCX9KHn27M3Y0HHUOuvVKrVqpjfqDw8PDUZay//DAKMSrr/xwZXHhM5/9lGMY9PqGOak2Tpw6x6a4fvHtrLMdEihPXRLk/4sE4LxSwWRfRRJsQVSbCwsrpw4Pe+ggikK2lqSs1aqEVGnURRD0R4Ptzc3FlWUppLF6jJXSY7dzFNY5OnRcyi9b56x7aEX+sPHOX0dpG143xj8dYRjmee7jhAmF+mhSAWMcl47APe6IY4WU0j/HZRGGhM8prGNmlp7C0uv1oigqikJJOUpHUip/D8Y5tBYB0LE12lqLYQhSsGMGh4hCCmAQY5uKIAistXEce8zZH+da6yiK/Lnuy1V5lodKKaVmZqYPDvatNVjWpoVjRhIkFAlqVpNeZxeSsBpENZYErkDOhdOOY5VY5yw73xU4mQ0hBAKDc0EgCFCAU1KNNy8mISwTGEcISohGrFqVWArRSzNCblaimhKBEhoREMMgQD2y1nmK9ARFl1IiwGg0Ojw8bDQacRwjYimMemQdeCWpiYOzR2KEkIRWF5oVexM/n94NBoO0yJMkaTabtVrNI/m+IwceTZvgaATwD8zR/fXa+NVbG5MfGL+RvXAmIAdCNKcadmZmbn6hVm8dP3likI56+wenzp4Gxvp0e6rV3tvdFYGwJn/jtXfardage2iNbTTbw5Rf/8mrx4+t7WxsZsP0qWefy7Ks1++vnTxx6tSpTufw2Inj4Te/0et04jgO4siO0wOcFILtI0cOjynInrPloV9mBHABGOHswf7+/fsP5ubmiqI4efJko9Fg5mq1dvHSlVFeBNs7N27c3ut2C0dSUL2WrBw7vr29++47by8tLzcbTYd4+dqNVLMNqr1R5nT6L/7Hf/o7v/kbf/0X/3kvUE+ef+rGzZtvvPba9MzMP/vf/U/5KDv/9Pnt3d0zTz7x0Ycfbt6+VwmjSx9cuH3nbq1ef+7Fz1pBIMXqiWM3bt5IRymRkAw/+pvv7+5sP/Gp50498YS19nMvv7zf6SwsLiXtG8dPnXz/zXfOPHMeAnXvwf3TZ8+60ei9738/qFanp1p37t+bW1p++Stfunrl6njlgLUlFd7Hux/LB5jZejCN3Vi7B8p4lpnHJD1ERJ5IKzA76/hIFHjk18JwOBKClCLfxmIcHxwcIECr3U4qlcOD/X6/PxqNnHO+2avRqBttACCK4izLrTFx7BNXyyWUBnlRIFEYRgCQ5blU0oCWUuR5BgjT09NpOip0YYwREhGcs44BlSqVthw7ILTGJJUYkRyzUkFmTL/fbzabUsqDg4PBYIBYEqIqlcoYBH3s7h4+Joh4lGs7Zj976VhERHAlFPdIuIwIvrgAwFxSsxjZjqtD/pwWR1rHfEHWMSNJvy0IQdVaNVDKMRAig3AEzhoGJwQxs5di9PtASeUnUkpKqQSVwo5xFNXq1Gg04igmQc4YY7QH8bXWSVJZWV3rbWzs7e5bC6afjvpDpcL6VFNpVeRFSEEYKvCGvUzOMSEhMjhntDVgMQgbzVaoAifYIU1PL73w4hdf++5/CBU06rGxxdAU5M0LmL1tNx8tITAgYq/XHQyH9emmNYzGubwAABUFGApwgA6scQiASjIRS4QkiONwrV6pT7WvvX/hwe3baTEIBDGAcxYKCJQKpHTswGlkJlR+JklKbYxzLgkUESolGHLHLs+LKAx9WXyCTYgjXpWIaJmdsbt7u3Ecz7SnnFcsFvKxAHeyNcG4gu/RXBp/dxL++rVXsoHHfwWZdZ53D3vdTu/s2TUpxKDfHw4GeZ4ysA/9oiCMpPrw3Q8a1erxU8drtUanYwVCrd4+dvJcQHzz4ttudCilUEooJUmgmAA69mEg7pMuJ2l66VRSn9m6s+4hHhAyrlRTOULESqPGzIUJ0sGoe9httltsnRdpnuwzR7+AcYh/FPF1DAzOsjaskdDZRyhAj7138guPvi7H4I4/4Pw04Ri7nQz10d85eWYBIAxDVf4GkFIKIdm3dghgcBIAjDFpmk5PT1er1SRJcMxpyLPcGisECSFzrQURSUFSMDOOZ5qN00bzuCrtI/Qsy4si94l1kiTD4TDPc49FFUURRpHfDaWUs7Ozt2/fTlMLiMAsBLHXWoriwbB7Yr49VYs2djb62SgOglpIOdmAsLBsgR2QKY3viLx1NQOCE4QCOZBSEJCzgQ8Lxv8xFoAEISglIkWInBcFs2lVZCMWiiGMwk5qLbskDuVw5L3Cjx4DQgghZTFWO/K6GDTuoyzTNee8JtxEBcb7OFvrwjDMoZikd14slogKbTrd7nA4bLZa7VYrjmPy+kmP/nU4ev3D96L9em38qq8NZmeDUB5bW1ueriPa4TANhDBFMeh2O/3+9sZGUktGwyEgziycc8SfX/5yEifr2zvTrfbm+kaeZhvrG0hY5HmzOXX85GkVhCtrx77wG19M07TZaiXVijF6qj3V2T/47l//vymoH+zvG8/SQwAou7KRgJAmoT8daZFG3zELPuR1U6366vJcIN3y8tLa2rFbt24ppT744IMgCIaD9MGDzcWVlXv31je2DjSwBjS5nT/RzrN0Z2tL69xYc+r0yfcvXC4055ruH+zko8HZpenPPnv6ow/fXVlbWzt5anF1+d/+P/4NArZbrft37r371tvL8wu//0d/ML+weO3ylahWOX7yxOb99Y/eee/cM+d/9P3vP7hz/8z5Jz/7hZdH/cHqqRMqijXz/u5eADjbar/+t9+/e+v2oD8YDAZ3b9wBJZZXViMZffEPv37vzt1nP/vZc888/eYPf2S0efrM6fvXr1776NLZ55794N33H9y9Oz5gJjmSY34oLflzL4SHdmilawiNTx0f7I5/bPLvx9cKokL0vZK+6AEAxn9j0B8Ai/ZUO89zAPCFCEQYDIb9/mBtbdVa22y2Dw/3mT3wbAUJbQ37Nm4SRZF7/fYoDHPgarUyHA0bSQ2AdWGUCopCOzaAgCSRMY4rzmgGCFQgQ1kUeWGMQwaktMiMZWut30lmZ2eHw5HPzLXWd+/e9cfif+NOSUT2SAI2uWDMt/FPIo+TCgfsxxrHAknOla5tgghQMoMxttVqSEkwtneyjhiYGJl8Hus8QcVaLj2KEf2uEgZKCRmFobWGBMRRkCRJFEQkyFmTZWiMZrC50ajkyrFjXRUUQ71+8c7pTzzRmm2P8pwHprfXEcaRYJCIwEZrAnbMxjF7cQelKvVm0qjLUAIBoWCHptAnzj59+8pb6cF9ABoMR6NBRoAqUMJZJJZCCnDgdT58Md9CIJUUgi07a6EwrtCqEmMgAAAsMzN67wMAFMiEFoFCJWV9Rh1nxFE6ur/RJ5JKSiJBIIiEsyYMQ2aHAGw1skHwPFDPTMCisAyOhGK2URLbQlu2Xu6Gx9Vwr2WptVZKDfuDze3dxcX5erWiCy1lWaY78lDg0TUA40gOx2X0hz+G5QN7tKeqPAiMHQ6Hu7u76TCbnZ0zxnY7ndFgqI1BAQKJEJMwbNfqlSB+cOeelGJxebnZaPX7B0abqNKeWzmbDwcbtz9E9BrtSKKMoQkQxLjn1ItnI3Gg5ldP5RZ0kddqVWMsEckwwDxLkopQssjzKIqkc71uP4zjKFATy6ejUeYve0JKd0b78b1kcvzBEdbH0Rh6Ug714I5SyoO7noAAY57JGOl4hHBC5LttQQjBwNroscGgfzTZsQMEGQSB568EQYCIWZ5JKT0RUCoZxRF7CpcQzjlrTKY1G1Pkud/dAECSUGHgK1l+Xosim4ThUiqlAmuNx6I956hSraSj1DgnZVCvN7I8A0Akcswes0FADMPNvYPPnTuRKNjp9HShA8FJoAIJxoG1VjtnGEvQDoFKlXBSgsJASQHIEKsoUJKdc5ats8xQkNXWMjtFSMB5NgrCKCZRT8JYoSIRhKpibSNSgyjYEZQ6ezRpgPG27qVq0jRtNps+7S6K4ujx4yeSiJxj3xNgjJVSOnZRFGVZyuXNso/zCMFZZ4w+2N9Lh4Nms9VstsIwOLK4cMIBH7/wuEXn3+/167Xx/wdrA73Ewf7Otu7uap33Ot3FxYUrly5nw0FvONjf2p5qNtY3NypJchHw9u3bn/rs54x1Z598am5urlKtdzqd/d1ta80zzz73xFNPNdvt61eu7e5socC7d+50e92kUrl96/Z/+Yu/bLYae/t7UeyiIBBUMkb8eeAFk61znmXK7JDKLuHJgeRLoGz1VGuqUUtu3bxqtP7oo4+KInfOhWF45szZvd3902fOiCDa2rklAxmGwWF30K5FjUr8wQcfgrZPnz9XqdZf/clrUa3Rmlu8f/1+fzCKgL/84vM67b/6yo8K477x7d9DxCfOPdGs1c+df+r65St765vDw86Zp5/c2dw+deLE8y9+ZmFx8a0fvwaIczNzVz+4uH77bhCGyHDv5u3FleXP/cYXR6PR9vq6ydO52dlX3vnu8urqztb23NTM5ctXzj/79A++81fZKIsq0fWr15/69PPHTp28feX61Nz84try3/zFXzRbzWMrK29/92/7BwfMDsArTJExZlwgfZwI+siEcsl0fhjIcimTxB5odIwOynh4AvlO3l7+CY8gsjYGpMSy76S0nK1U4mqlsrW1qbVJkmR3d6/RaKRphojb2zvNZrNWS2q12qDXrVQqlQrleaaUNdZprfM8A0DnTFE4rQt2bjQaRVEkpTg4OBDk2TtaKpEXeRRKb24EhCiIlPIfX1vrrAsjKaWCwh4eHgZBEEXR5uZmFMU+OXfjNiB+2GRHJaUD7NEb9nbb6JzXUkIGRl9zZ29+68ezHOtJgMtlHjFO/svKtW9Q8/1AzEyCnOOya43BUya11mEYxHHsOSdEClAAALIBdoBIhEWRjxc/OmYkYnZCCCmF/zV5lupCh4GQ9bgSJ1IpIaQx2loL4LR1RmsWKOOwPjVFCAc3Nt/rDKaXFy1id2sHclet1GQQVCpJEidEgh0AiiBQFAQqCoNKoioVImJ0AN6TxRlHYdxaOf7kg6yrVFh4Xbt+yrnJTCqElYKkY0b0WgjIzlq3vLDcbDShsGCs1ZoEoRIOASx46buJcRwTIoL0CYMkUDKqVWUUAQEhGG0dsFIQByEJJCLrnBBU6FwIQjDOWIFeRdUiobNsLTgGIQKhUBAZXQCCsYaQ2LkgCKUQRCLLssFgMDszFUjprBNC+GZrpIdPx1FYAY4EWw/xXT/LY0s8X0Z4GNghALIxetAd7O0chFHSbrV1UQwG/WE2YgZB0jobBVG1Um02Gq16PYmiQX94sH/QarXq9VYPe9ZxXG3OLp/sdrdtf1N4wQ4P6aAjqRAQrHEM1gEhGOdIJo32nNZGChJKutLoGOJaLQgDy04FYUSkje0NBwd7+wsLc1EYeQ2+I5Hu5CH6OWQ564yxhbHasnHOckknKN/oa49+p59gsTR2gvD/ekohsxuNhtVqNYpDXWjnnBij6R4zOnLgMhF6h7vyZ4DYoZdtGTs9okCBiDIMw8FggIh5niulvKydEL4nxlpjiYSQATKHQeCkE4LYORUEnnHinD2a4nimpjE6y7I4ToRQWps4ruT5yKtTAUCeZUmr3eeR1XkYhtOzszt7u4DIwNZZpRQ7X6iKDtJhbziYSVQtme+k+f7OtjW5UIGQwqALQGrL2jATC0ECUHpFFWfBGSApELTRyFYiOu0ACEkQIKCTRCGhQlerxFLKUeriIJKkgkApxIaE07MNbd2dbRxqc7TM4WdIKZWlqddrpLGnl69ETxIO8dCKk51jnzWiZ7qBEULowvhfNZaOE84ZBFCCsnS0labD/mB2ZqZSrRKRb1aC8cFfLi7Cx1h2f7/Xr9fGr8za+PjGNL7IgUN22XBQj+rNRjuuVBdXV6zj+YUFbU1/bn7x2LG42ZxqtDbu3y9y0z88vPTRRwuLS4Nut0iz9vTU9PycyfPNjfVXf/ITYvfmqz9eWFtdOnX81q0bJ+HEqZOnpqan1h+snzpz+omnn2EORKP/2vtXhLdh92ibc4zszTsFeSwLrC0xiTJxR2GsCSUXw8NrV3bv379/7OTJQufnzz+1sbk9v7AwSkcbW5uN9kye9nNrG81qtVavVeL52Zksy6zlYa4HWXH5yvVBb1DFZL8we8MhFfkf/e7X/+CPvvXTV36o06I+PWWs/X/9L/9eCPHiF7/w1LPP3Lt9JwzD5WNrJtc//OvvBlH4jX/y7SAMj508sXzqeHt6+uKFCyhoZnr6o3fe++DtdyqtxsLy0v3bd1vt9hOffq7daD6ze7B28sSlDy5Umo243VBx/OD+g+c/88LtSxd3HmydOnvur/7kP67fufvVb30radQ+/dkXT5w8eeHd94aDNEqqHhycoEE8rgZPhmWc4PjcySNJZefH2AwIgZHHYS4iMlvnyvh5HNf6MwxL/VBAYEQiBLLOGGcEoZeqBWZC2tne2hcqDMNKpZplmXO8tbVdq1X8WdXr9QCAnW1Ua9polBAEqtaopaO0P7BxXDPWCqJRmkZBGMfxYNC3xlptJFGr1ahUq4cHB0EQjEaiUqkAQL3RGA4HtVp9f2+v0WjUqvXd3T0NOk0za4eNeisIAr9HpWlqjK3Vap4hMKYr4LglRQAQgPPCXn7cBCAxGK0t50RCSKGkokAyeVQTAb3O1yNX+UAdZcBPjl8f3pXincwIzuccQjA7KUqYvF6ve/NzQMdIxvqY2RI4JuGcY0YpVVEUznFhNBEhoVSCJDK7fr+vi6ISx4GUiGEUR0IEfscw1jA6lzM6RIbuYCCsmWo1SQoUSmY4Pzu70lh4sL59eNiJ0SUshUxUEAZhopQSSokwoEBCIFkJYGBj2Pf/+XiKwpnl0+s3PlAESTXRRW4tD7MeAQeBCL1VrGXHxMCeO/PyS18IROTyHJwWSlAUsCzTWMfsgEkSPOSXecTOTw8ycGYyA4ZkxMyIFAQhIDgGoQKdZVIQszfbcI6tAIcOgZ0gbwgsrHUO0IJhAAvorEEEJYVEbz+E3U53f/9gemYqCAMSJKlUgRzndfhYYsmP5jx45OvJz/jlN8EvBREKwWzzLOvsdTp7vaXVE3EcDQ4P+93+MM2YAVFISZWk0mw221NT9Xo1ipMkqbDjg939RqNZqzTA6SIbxrWp5VPnd24ZO+pIQAJBiIBjrXUhCaUxBpAJKa5Oh0mNvS82UhAEDGCRgzBAIUOk8mYRK3Gc5Xmv02u321LIwviyJB0JWCchJk1GwAFb1Ba0QWv8pg3em7A8Aa21AOQtr4kQPjZcfnillEIgEWpdqEAIgV5UxLkS9PFda0TksSH/C4wxe3u7GxsPpKRqvUo+QJkYWDACgNRaj0Yjz5t0Y2lPzzgcc4Gd0blzjsEigC4sAHhi5aR/aMwX5DiOtdZZlkVRjIjWmjzPG41GHCceo/LnfZZncRRlecqOK5VKEAS6KPz27cZqrCgFqPDu7uH88VkeDRM24XRrOBh2B0OHwifFocRACMsGmAkZnEEAqQQhgDNI5Kx1QE6SBWescdY6QGd0LQ5maslMswaIuwddwSAZQqJYKQYXSZxp1moHg4AQgbXWE6OvSZgCiFmW9Xq9Wq02madJJ+BkfU+m2bcB+mK9tU5Kb7BuENEXpACcL7T5iMda1+12R6NRu92enp4OQ6/s81hQ+w8Y4wLAr9fGr/za8AhTnCSrx44tzk+FQg1Gg1a7fbC7J5VywFlWbG1tR5V4fnnRAR8/exqAgyiI4vDmtSucGREE1VarXq1KwBtXr549dzau1xzy2traJz75iVpSW1lbferw/Kg/eOr8+V6//9prbx8c9JGwNDYSD1ECX3Rz4Ng9dJucnBMMYE22OJMszTZ12n3q6aeDMByNRnfv3rt58/bS8nK323VMnU7/3sbOYFRMTbXybL/RrDzz9JN7O7vO6lZbbG1t1+IwrNd7mm/eecCj4fnVha996aXjq6vdc+cCqWrT7d3t7c3NLUTo7B9ceOuduZnZtWPHzj3z1HtvvlPkeaPVzAaDN1555ebVay99+UtJHL7w0ueM5bVTJ955710ZBLNzc4PD7sW33kXCmenpjzbfbNQbo9HoxJlTlvF3n346HaWfzM3a8eM3rt+cWpiP4ujmTy47re/fuHHp0qWVY2uV556t1KvnX3qx1mrCn/wExoMzrvE93k/mr0mnIzBa68+hR6MzBEJEBw6YwY5FNsgy/lzcf0wcF46tAPI1ecc8TuFslmVCCB9TArB3ZMiybG9vDxFXV5bazcb6+gMUYn5+Pk2z+8O7MzNta51ztiiKJGk1qjVdFJU49C7Z9epMq9VUUlXjaDAY1CpxGEZ5XjSrVQFQq1RMnllrm81mEASdbnc4Gu7u7gITM1er1X6/z6UoB+V5/hj2Nr7441UOZmdtwY4tFFpTgShCpYJQyIAkOW9KOF6nE3Bu/N6HDUw4JieQZ0A+ll6yJydgUWhP2SonVAUW/PNgnA8jEY4WZ4UQYowSOnbOsTG63+8poeJIBiqQMgiCMIqSsetpiAjOgVKBc5yOMpkXWUUnURQEESICUWthdvrUmV6/f7i/p5DqtWYQxxQERAREIIi9/oRjx877azGzYYBAySiYO3YG4ib3BqGSURyrUa4khUoY9mqJIAxrB9ZaZAri+OWXXwZtrDUoSCQhKMHjyQAErwrwcW4JAxAiIxRGOwQiElKgIH8LAODpYVIIpaRxzMxGGxTCgvU0OUB01gkhwTqHJKSyxiEBM3d6/VDKJElGo7TT680vLnpPRmssowsxnMwyHe34/Hnx2eTFyawdzc8na4YYnOVhf7S3uz8YjJYWFwlhOBh0O50iz4lIIgcyqFWr9Xq90Wwk1WoYx0klSZJk0Osf7O+3Z1qNRiPL0jTNlo+fryWVW5feLtL9WDpEwSDtQ6p9adRMIqjXW2FUGQ41OxBEQgrPwJFKKaWkkM45tCgQQyIL3O12lVKVSsWynQC6+Cg3/eGNO7ZsLVgmL3PJAIgwJqSN6QrjOJUR5eQ3HO0nG39XxHGc5zk7CMNQCGmMnRD8nGMfLo+hXNvvd2/durG1tbWwuHDuibPVWpW9wAuR50v7wF9mWYaI9XodAMIwlFJa50iQLgq2bJ117BDQF0+DIADgotDOOS8D4dPlNE298pk3AqjValmWE1EURd40Mo7jXq/LzP7jpqNRpVYXRhS6SJKk0Wzs7exO1lO5yTJTEG0N+r3czMVBLMTI6AijWhL1R/kwyxkcOGBCgYiA4NgzJZ0BH8dbY4EhL3RuDBFpa6yzgaDl6cbJ5fkY2JrsYJAO07SWJEkchJGSUjBbBs6tjQIRhoHLM2Osp4z4yfAcESlllmXD4dAfBmEYThb30UUwoeb4fz3M6dMpH/Z5EQOlVKFzD+CNRqOSm+hQa725uTkcDhcWFmr1hm/cPfJofewk+3u9fr02/rGvjcf+4tGrDAg8GOi43+2umzQfZb1uZ2Fh4f2331laXkai+3fuJq3a/OJCMRztbm+/9PLLmSnOf/JTc3OzgCLrjw47h4NOb3TQIYFz8/PnP/mJ6cW53t7h/NT00uLShffejyuVXq+3fufuWz/96f179+7cvNUzQiCJsWpuqfDroUjvAkwEwM49MunMLMGdXJlvJnh1416YuM1r16enpjqd7omTJ4UQw9FIqDAtnGNO4qiSJPv72+1mcuPa1al264uff2mU5T965VWqh/WZuUsXrve63amAnjm1WpH47//Vv0qH6dlnn33x8y/9zXf+S6PZCMOwmiQ//v4reZq99JUvLi4udo8fKMT23Iyxem97u9/tZv3ed/7kP/Z7w69983eajeanP/XpvbW142dPb29sSSWrlap0cPm9Dz/x3LOvXXhveXX13oP1Tzz36Zt37nz25ZcxDJ558bPnzj95//49DW5ufq67t9/f3U9OnvqTf/WvTaG//K1vnjh3dnJ8YlnsI3hc/3Vy3kBZSmcvKoUA3ssWEK0HaK1zaJnZWGsAcYxIPtxEPJRLJKDEYBCR2LGFEuYlRkB0yMzelRaSJImiyFqbZZmfr5WVFWttofXd+/fq9frMzEyn0zk8PKzEiTVFOhzFcVSkqYjjbDQURK1Gw1rT7w+iOIqj0BiTxOFw0BMoAykatamiKGqVJB0OnDFAYn9/P4oiIlxdXd3b3ZNS9no9ZvaYbpqmzo3gKIESCFAAIhCC8y16cISegewssx0PhHUOXGpMXoggCMI4jBNGsEcQXRzzjibPF45fRESHONFZBS6JkgDAwFJI51hr7Xvj/Hsdg2UmEsBowAGiG7udTRRpcDxRAikMwl6vMxoNKkkFEZgdSYjjOAxjvzakVICAQtYaTWPYMYBUmbXSuCgWgGKY5WowjERQbdfrsy2d5eiQhHKeHeuHBMaqEYRcRqBem0kyYVhvL5559qMf3JDCAoCUQkkKBDgBGAglMLeYay4KSjPziec/efbcOWM1SBRRwIHwjA+YjB7Rx7coRHTADsEBZEXK6BhcXuSRFJ5nMnYViXRRWGZEYgCBSIjsGICNLqRU7KwgtGwiFTqAIAiB2Rgdhgkbd3jY17pYWJi3VgOIMSFV+CZp3/96dIuezPsEp6CxiLV/ccJqhSOpKWLprWcK3et0d7b3HMD0zLQztt/p9rs9bYwUJEFUk4oXkazWamESh0kcxXEYRV6cociLKE7qrXaa2zCKV860GenepZ+5oiPQ98cYa4z/DOQNREmRVIiktSVEIaXvkgzDMAgCoRQ4fxIgkXDAJEQQBGmaxnGsAuWZAwAw6bQ+uuzHYb2zbBkceSqaY+uYseTUeuX4Cb4zOXrw0b40HGeJzjkplXNWay85/3A8tc+UEIWgfr93+/bt9fUHlWryzLNPz8/PJ0kFmOzDU+/h2SGHw6H3W4JxyZWN9se2dc7qQgAJIZUKHHNRaCFIa+31odI09T85YQd78K9WqxMprQtEDAJljNZaRFE0Go2gJKygtUYIobWO43h2dnZ/dw/GsX9pT8yIiAWq61sH06tTVQWBQq3EKM1ilXC9kuZFbl1eGCQUBITCOsx04axBAEKU0nN3uCg0OluRWK1UZ5u1uemmctYWeVHkmTEWQCihAiElWbaCUCCSYyGoVHseewNO2CFCiDAMi6IYjUb9fr/dbjOz1hrG1Xk64sgM41ZZf4MevZOihOsAwAtsSSGKolBKRVFUyj0i+V/V7XZ1UcwuLDRbbY+VHjnn/gEB3V+vjX/sa+MoovBzL7/TOGs7h4eS6s65MImjaqU9OzO7tBAnSRRHURwurSzfunFz2O+v37t36dLlE6dPRyqs15vtufl2UehROuz1drY3m+1WkaZpf/j6a6/tH+zLMLp9+44MoqeffebWteuXL18+dvxErVYb9QoVBN7byU+rD3MnhwF6tX33sBvXWsvOxYr2d7Z2Rp3ecDib1JaXlmu1Wp5rIur1+kiy0ZrqbWzX6snS0jIJYfRweqp9sLd7uL83MzOTZ9lTT583SG9euLi3tx8if+nF559/4Tlr9d0bt3Jta1PTb73+01F/8LnPfW7t+PGbN2/0ut0ojCpJ5b/86Z/vbm49+8KnP//VL9+9cX1/c8cyBGG8t7WrC3O4t/fh++9vbGwcP33q3FNPkZSf/fIXZ+fnO4eHlWZNRqEzbjQcRUGwcffug9u3d1ZW3n///enFxU997nmji+c///KZs2df+/4Pmu22LnRv52B6dqa/tf0ffvgKTBISn96U9L/HCqm+1jFBmLyzHgI6bynBrK33qrIWHPuDN4hi5zwr/ZFU2f9iksTGOQdCCEKwViOVRhRlyAbsA+Jer0dEWZZVKrExRmt99uzZCxcuxHHUbtWjKAIAgSQAR1kmBdWqVSmkTWwUhkYbpdRwNEKAufn54XDgnM2yVEpZqSSIWK1WASnt9YwxhGisscYiCWY+7HSElHPz84cHHZ+EF0VhrTPmcecUf08s0Cu2MjwasBI6e+S18RfsrMkzW2i2NggjROFgLPv/Sx6oI/PiGQ0Pgx4An/wHQeBLQOXxj4SMyA7ZErAjdNr5MMtTL4wx1lillBAyiZPRcDjoD1CQ/2tSCilkFEVhGPsgRKmABJGCqekZZmrPzUt2URTFcUXGsYhDJhoMhwW42OVxtarCEEg5BraWLXvDFkRk9MmNF5DEcVmcAdEYe+aZz1x4/ZXewd1CZ0WRRVEwo4K8sMbxoNDdUU7o2DgIon/+P//v4zAunJahxEgyMCB65giPwx2/eh/frBAYWDs7ylMUCAKJgAh9H73fMD091zEgOkFIQSCQ2DEYdgxsGRis0cCMzgqf2CiJiFIGRVYgCW3MYDQKAikICbzujfO9Ip5OdrStgseNvw/j1yPXUTjj8YVBSADFKNvf3d/d2W82ZxqNhi70oNPL0hQBlJBKqnq9Xq/Xm81mtVoNoygIQ6mU9zSW0quMyzisNhsmS3NS0fKJp0adw937FwUab4yAiEIIpaQQggSJICQpHTtj9MS0IgjDMIrIk+iO6AcjYpIkGCd5ng8Gg2q9SkTGlND4ZG37++OHl2O0zJbLJwAI0eFDHAcAfNf15KTzDwKNtRr8b/bTaq0XpGdjtH8KPHttYsw2GAw2NjauX78qpTh56vjy8mq91pBKAZN1LKSYxOKI6LlZMsuyWq3m2w/9pwEEX/Fh5jiKvVgpkh7XsDiKY683gYi+buWnYTQahWEYx7EvvKbpqChQSvJEIo/wOeeEICmlNVYFUhAR0fTUdBAERZ6XY+aLTQ4FIATxVq87KGwlJOXYOZMoMtYxc5KoAqgojAoVO8vWgQiyQiFCGc0QKonaWoQoECJAaNaSWEJoUmDHCJrRIgop4jgKhJCEzruHOw4kSUF+2nyGMZlpP3wenvSQm79rY4yP1cYHUrniJyp9fjo9aZVU6CMYIjLGCCmEkMIZDw36qQ2UcmOt2bwo1h+sj9JsdnbWnxz/P7h+vTZ+5deGr+DWG/XjpxaXl+d0ro01UzNTuijmFuZloAb9fq3VXD1xygHVkkqW5Z7F/MF774KxQVKp1evVanV6dnZxZUmzfe3111YXl4qiWF/feOlLv/HEU0+2p6af/uQnRsNht9997vlPDzP73Z+8RXTfSxoTlqOBJamx9DNAgHF/Wln9EmgX5lrNhkilmV9Z2thYj6PKxY8uJZXEWNfvj/rD0V5ntLl9oEIxPZOzs5987tlmrXbhg/eWl5eKvHjv7XeTRuswt+vbB6GkTz9x6tvf+q0vfv1L7/30jVazdTgYrSwvv/nq6+sPHhw/c+r5lz932Os+/dyzJGUYR9c/upyNRisnj7//1lv5KJ2dnfvMl34DCRrvvlcUOqlW79+91zk4rFaqb7/2xnvvvLu4uPjiFz9/7fr1b/7B7+dZ1pqZ2dzenj9+8sN33l09tnbQ3R8c7K6dPP7mj3/y5g9fPffsc+ITydza6stf+crVS5eTRv3Yk+fu3Ly1c+fB0cl6DP84+p3xZPrjyhKBddaa3FrjnMHyBAIooWCCh6XD8p2TP4H+wHNIRMYaKPkPZKxRgFQ6rpT5iDEmy7Isy5IkYXZ7e3tzc3N7e3ta65WVJRXIPM9VEAgh5ubmtrY2Fxfmut1enueL84ueqEBE/nmp1xudbrcwpj01s7m52Wg0Op1OsyWMMY7t6bOn9nb3qo1amun9/QNmjuP42rVr8/PzPiX2TZ/W2Y/XvgGAJxTmR4EB3+nIj788HhJmYJcOBibXMk6EUpOs7OeHMlz+pbHpBgKAMcZHjc6xc8YYMzU1raSEsVnA2P7VWWCUwgE6Rh5vLD74iOPYF8eKotjc3CSBlUriP6aUQRhEQRAqpZiBnVUqIIsA1Gy2WfPC6ooADuM4DGOhJClBCOwMa1v0h2xdXKnKiCiMKFA6y4025B0csKQN+NlmRCK2DIBoTVFtTX/yC1//2V/9m4oSMlC6sFla2JjTrHBsc0XWgEb83T/6Jy++/AVtNYWEgSydTByQYz9aDll8LF5ET6kBBMRcF2meVmuxkAIFK6WcszDWcJzI1CCitQViqStCRIKktVZJZa1FdgTOOsfsGegIiEGImrBWr2dZZozV0iVx6G1o/Ponogl+AWOoZRK6MbPzcrHjsO+xmPjoAyqIrLbdTnd7c3s0ys6em4+iKO30hsOhKQohhBIyjuNmo9FsNpvNZqVWi5IYpfAOz1JK8C56KJVUAiAf9cOIwqg6v3y619nNexsKjGOLCP7Y9cwBFESCnOfrIltrwziK45ikcMzGGGRg52U9KAgDKaTVxlqbpimNqFarMT88fNGLndORELds8nSM4IzxrV9E5LgMTCexrH+shCiddx/DcfGhpXn5TACwp/N5bMtaOxqN7t+/d+vWLWP00tLiyZMnGs1GoAJEAYzu8eD74RMqW61WpVLxf8bfp7XOsPaqE2jZsmVnTZlNEjMHKk7TNAhCAM7zQilpTHmiew1UABsEoQxEYQohI2YsisJYK70WNAm/FJ2xURhpbZKkUq3VD4uHoJ0QAtk4R0LIDOTmUC/X62RRSlFkGUvKMl0YrUggQpFlQlKkhAVLoSCCKIwCIbQuCBkA2DlbGHBOECiBShKgKDJjmbJcK6JGoKoqCKRkRGedJUJ0QE4bB/BwwmCsbeETpjD0Aq/KI20+HPTzxA486XxMEyF24IMkYLTWFaiZgdmUcQmDNVaKIDe5tRwGkR7rah3B/N3+zk4+Gs0vzFerVSJy+PHd+e/z+vXa+BVYG5O89rHJPQKiOEluNOjtbHHnoDPq9+bmZi99+FGvsyKlun75ysLKss7STrf30ssv02D4whc+X28209yYNO13uunB4TYJlLR68vjq6mqiotXTp78sJFs+feaczczFjz66dePGcDTa2dlbv3d//2Dvzp2beZEltQYCE6IbB/rWWvDldkQmss4iOGCyDMbamap8+sljg4PNzn56/7CndRGocHZuttDmoNs76PaaU1M7+31GSKIoGw4PD/ZX5+exDp/93GePr6389KdvWsb7e90HOx2d6bX5xunFqZ31e3dvXt/d2vr0i59tTLUPO53drS22rtlsvPrKj69evnzu/FNf++3f2tvcqjfrMlYrSwv3rl493N3b2dlvLcxqUzz17Pm5lZU4ipJKPBj05pbnd9bXBzu7HUHvv/HG62+88cUvfWljY+PcE0+2bHtt7aS28OQnn3vzhz9S9VZzYeHm+x9JDWTtK3/xnZ3NjelGA4C//S/+mQO4evFiqs1kvpwDImGte2wmGXxQwIgM4MA5sK7QxhrNbHwiMzGgRURA8igjIgL4MqIztizzeUwFoIxuJEhjDCJIoYx2FmDMWfCQDgOgLvLO4UGejmqNmhCy2+0HKnLOEYk4Srq9w0uXLj399Hnn3NLqShSG65tboQr6/WGr1azEEZIIo2h/fz8IA+uctjYtdFboyNgiik3vAADWrUlEQVT+KL37YH1tbXVhZVmG0SgvtDbtVltI9WD9wezsLCDuHxwIUgCYZbkxxgOP4zicARBY8KSpDgEIfMMmMwtJj57BP+dicABgdGbZyiBUQcBMpYWctehzsbFMmx8VIgFld7kDAC7pkgIYGRwBAFvrNAqpnRWIbK1AdB5Kdc4xGKMB2I2NT4UQ1rIxNgzVwcEhM4PDQKhABdaxoACFUxJDFTnrjCiUkgzYSGr1qJaNurNz82EQSqVIShAIhNa35xltnHPauuEw0CZyVlQTVYm0sSYvpGUq0egyR0JARx4TZ0bUuX7yuZc2rrx9uHkj0OAkF4HKtAmCgCQCCdBFbXHhf/sv/2cSYIlEHKAS5TL0gaNzhMiI/CjbHF3Zmk8MzGyNMcYghcbYOFKSpFSSSBjrEMlaw2yFEIRoHSORh/P9SeHYIiMiChQAKJDQo7/GOXAkENEisQolobLW9dJMEoZKRXEYqgDE45piYz4AjvWsEZx34nBHwUsaR+Eey5BCMaPOi+5h72C/5xzMzc0JgHQ0StORY1YkpFS1er3ZbtcbjaRei2sVklIQCSVBCRWFKgusNtoUMoyTRqPb7zsLQKLamJtZOLme9mx+6E3hAYU1gAQkpAWhjUW2KAUQEaHv5fAf10ecBCSFCMNQkHLWWrZhGDnHBwcdJJlEsbXaJ8Sl/QILZsfWMoAF48j4pgpC8v7WfqPxlA8/aEopH0d4e78JHu8nnBmEIGvdmN9BzCCEtNZmWR7HcVHoW7duX7n6kbV6aWlpaWm53W5HYSRl6IlVzpdY/Q7mD1dEBGAEQSQ7nY4QwuvYK6WMNoaZSARhyNYpKdHZoiics8BCa+t5h741T0oZRaFn+3oImsdy7taaer3e7XYLrdmWncLVanU4HKIveed5nCRCiCzL4jienprqHh5MYgUAcMjWshBEYXRnr/PJlRmwDq2uxdVM56k0AEjWCWZJqI2xeWYZcutCJUGrHF0YBFEUZWkmEaIwqFcrYaAILLDvBPWVdx0FARjN1jB7Xjwhs3M8LFwBUir04PnP2QHHUsbD4TCKotLgpygQSZAsq4audCR3zo07x8ELygghpFQ8ppQxcxRFXtlEkPDScZ6a6cFCZrbW9XrdPM/m5uampqaECv4BmbkAv14bv/JrAwGQIRsNtzYGxLO9w25RZAwYhlGj3pRhsLC0NDM9s/nggTHm1pVLV69cefLZZ1QgF5bmgaHb6Q0Gg1Gve3C4PxoN3nr99Va9RsC1WuO1V340GAyA8cJ77xvrFpaWNx6895MfvcpCZaPcecYCsNdImtQBCQmw7N5lYCJkB8AokSuhvHfr+t72g6nWdJ7aM2fP3b5z2zrWFsIomZpRjampUeEqlWhxfm53Z7tWqWRZ+s7bb734mReWlpZmltdo43D71v1sNGpH6sVnn0wCcebUybd++OP33nl3bnHhv/8f/4csS5974VObWzvzK8vvvPHm3tb27Shav3/v7s1bn3zh+aXja8YU7u6d/YODuFEzhf7ed/4yz/Kv/d63bK3yzCeeBcInn3v2+3/9NxSp1ePH7ty6I5kOt3bvXruRDwaZNjc/uBTWalnvRK1e++Yf/fHU0tyNj64FzUa90bzx0zfaU+13Xn1te39/+djqzvbOqXPnTj7xJPzVe+OJegSknIArPikAsADOGm2NYcuOJ2ICPHn7w9/jmXiExjACSKWM1eBFBcY1xPJtiD49IyHIy0kBe3vDicMEAlhrhsNhYYokqQohur1uHCeVSpIkydVrV6yzG5ubYRTMz87v7O4GQeCYZ+Zm2q12Nhr0+r39/T3HvLu3q52p1OqbW1tCSgZYWVuzRhdaNyvVGzdu+cfnsNNp1BtJkmxvb8dRBIh5llljrTX+3j627D1N+RG80I+ks843YfrXfsljwuDYFIWzzlqUAQk1Fsb9RU/VY/8HvYlsnqf1Rj0IFRIJpbyGg/DaFzx2hAUAAC834qMEZkYEItJad7udsc6oCFSsgoiJHDAQEBIjCimFkGRguj0tLARSTc3MCCFRkEdnHYBx1rCTzhldOGeNdaBzN3CKOagkUklBZNLcFFo49CgZAzhCh4wEnlbvrJUqfuFrv//9//h/Ewy5G1WDOLG8P+jHThmmbtd+4atfXzx23FojAoVy0ptfLuAyxvnYKDIewd6ZszQFBBUoZgOMCODYhSpyrgAUjo1AtFajKEXKJ0ghMyOVJn5EBM7HT8zOATAy6MJ4pdUwCAEFa8cOrTODYToajaJAhVHkt/HxZ2FfDpmwhvwacNY5tkfX2ASq5LJhg5hxNBjt7ex3DrtRnCwsLADzoNdLR6UzfBjHzXa71Z6qNZuVWi2IohJOVoq8DW4QZqljawCwUqlOzczkaa4L4xy2pldMPty+f1GnfSUlyoAEkVCkpEpqQGSMJiGTWr2SJIRUyneSpwqIQAWBVIKEMc46R0ohO2HMaJTuX756/vxTKpDG2An93CGD9bJ81oJldDDusHDMSDgueLBfqx69LZUPxrDLxA9iojtENFEER/DFAyLnitu3b1+5cmV3Z/fYiaVTp041Gs04SoSQRELKYGL+IqWEcfVvkpl4J28Zx/G9e/fCMJybm6tWq47ZNyISoFdCi8JgXFTxon0lhq+1BvBcSau1brVavizrP7QxpprEnnMZhWGeZa7UK7ZAPvFyo9GoXq/XajXfPItjcneJaQtCBGscBKozGq53hss1IgeBRGAxsJaEAC9CzS5QEqR0gIG14JwtjCCwrFMHSohAUKRkolRAJJWyzmXGoIA06ydxEpRC+85j5SCRdcFO7A8MyDBEa4dGa+3bgybouv93oi3nu+Anfow4bjDEMbPwCLvFP9voMU43HlWtdVEUURR5URifcvnu+8lq8D+c5/nGxsZoNJqanfOCO/9A16/Xxq/82nAIQuDM/Oxyu7q6ujjoDlDKhYWFuFJdXlvV1kgVrh4/0djYqFcqB7u7eW7S/vDW9VejOFEqjOJkZnqK56anRguzMzNv3XnQPTi4+2Bj5cSJrc2trMhf+uIXFpaWBNITTzyZZ/mDB/ePn1hdWl65u381UEoIya4cARw33paXY4meF4jEtlYNZlqVmnJidl4F4fbewY1bt4ejUbs9RY6vXr8dxPHuYXcwGM3OTLXbLUmwtDC/vb3lTJGOhn/xV9+9vrF35cHmKE9PrMx868svf+nFTweRTBrNW9dvWGNrtdqF995/9dVX5xcWv/Ht3wmC8O2f/kwodfrkqZuXL7/x2quzM/Nnzj+VpqPPvfT5JK5UpqczbUa9UaCCQaf3kx+8kg1Gz37m0+Dc2trayVOnT5w5/d2//uszTz+1tbM7u7C4d7C7NL987eKVZ5577sf/5S9v3rr99d//g9FgsLC8+JmvfCFU6sKHF1qzMxcvfHjyxMkPX//Z5Y8+Wjx9+p/+y38B8H/2M/VYGQ4mRyk4BnbWsDNGF+zcBFj8RZNORM12W2vDeQGI1j1U1yLCieK6X4q+d4SZhZAWGNgCAiLjOKBkj3giFHkuhFxeXlpfX69UkgfrD0bDEZHI86FPa3d2tq2xaZ6HShVFcffeXSWlMaY/GE7NTDMSAzKzN7Tza351dWVjY0NrOxqNvLZ0WmglVa/XKx1BEZ01aZYiMAA7LG0xjl4IpZ7aY9/wGwpPmvh+6YUI7JzRBTqW0iHJoz0uv+SyzOwIEZ01KEQYR16hiRm8FC4RGW38ILuxmMzk63Gk65QSnU7Xbw4qjEAFFrGwrtBakHPOMZTBBRFFYTzVagOwkFIo5WMuRvBETAnlHJMQzhkf9hlr3XAIzCqORBiqSpw564YZORaeTCQQJTKhMxYRSUpjTGvx3DMv/fZbf/MnjXpgdZ6mWbOWhCroDQ5nl5a/8e0/dMwgBUrxMJ4tFzKXTYE/t0F2vPycc6Ph0OgcMXFusk+KNE2FkEIKxwIYBKAxJWFgEj+V+/aYGDpue+OjmKtAcsDGGEKQUoQy1EXhhGRr0rwYZnmSJO32ww9GhFqXeAQiWnbsnHXmEYbVoz60/jJFcXjQ2d7azYbZ2vHlVrOp82LY73uZ+TAIas1me6pdb9ar9WpSSVQQIKJXiyZEkiSVoqLwiZCUQbPV7tnDXv9wNMgZoqVj50nKrftXlWAiFkKESSKCMIhrxroiHUaVaQ4Cgai1zosCEUWgPCMiCEIENIV2XuaZACwgMGj97s9+Zov8My+96I5G9yXhhB1bBsueu2fdhLvoNRAnMe5jkrc8VoXHcRsfj3suJ1GvX/ZSiiAIBoN+p3P47LNPrx1bq1YrQgSIvsf6oXXF0dxm8iKM4QC5vLJSrdd2d3d9V+zyymoQBIFSRZb7nyiK3B/k/kydmOP5fyeaoEVRVCqVNE19e74QQhdFHMe60MYYr27twbk8y7QpZYEHg0G9Xs/zIo7jSiXp9weT2yavlmq108ggb+91n1s9BvlIF5mUcorro8IIwqLIdaGFkkoFSCIvijAMfEFGKekhiiRU1ThSRIGSRmtGYhaDYd8aU2+2TD4KQiUDxc4REqMjSaMCd/u5UDIgyImsMXyEXT6JP/I8z/Pcw3V+n4qiaDgcWlcgkrU2DEOfheMR51IPjnquiReK8tVtbwElhPDMTv/DzDyRKfAkFU/Z3N3dHWbZzMz032Wr/V93/Xpt/GNfG7VSz/dRYaNHL0EURaGzZtDrbW/vALPV+bXLlwaD3mA07B4cFjrXxpw6eRyQPv/lr1WSuD8YGWN2traIcH87ElFl7cSJ2Zn5F156OQzDV370w9n5+eee/5R17onzT7Hj+7dvW6eN0Yhufn622ajBERXho4cBAPhVBADWGiREJHb6+PLy6aXW/ds30rS4fuvW7Ny80e7kyZMb27v3H2zmhY2qstftmMI6a29cu1ZN4tNnTjfqtXolTurNDy9ceffazUGWn1mY/YOvffHY4vS9O9d/94//qD8aPffZ52/eunXs9MmLH3zYOzjM03zY7d/cuPbM+aertdrKsbXvfufPheWp9tSty1du3ri5vDAfRtHnv/Sle7dvPfv8pw76PSeot7tvrTWF/snf/uDKRxfPf+qTM3NzMzOzz3/mM1cuXZqdnb15/ZoSIdYfVKfbO+++16rUOc9+9P0fpkXWnpvqIT//hRdXVlYHWbGwsPDmT16LRTjbbr76vb8ZH5w8oaDA48CkA88dKgpmO/7Jn49QMjMAKxG2W1OHnU6aZZUozNNRSb5kniCR/qSZ5B7WOhSESJYtAYHwtXgAgIcuHgC6yO7fu6O1lgLXHwxnZuakFEWu+/1Bs9na3t7K0gyAG4tL29u71pqFhfmsKIZZ1mR2zmVZLoRyzk5PzwwGA+fczs6ete7BgwdxnFQqlcPDjs6LwWAgkArnhv2hYxcEqozrS+0IHt+s/3jgkSH0gbCXhzhKRoajpINfePEYAWZm66xUIUrlR6zkN/PDPip6RCFEWMeIriiKajUBQF/NJgGe+cTOofMxLh89qn32Oy6FQZ7nvd4gjhNrDANlRaE8OQwYwBlTIJYcd0RqNFqhDIq8EAwO0XnpZCoTCUAUQA5ACWKnrLXsjCMCB6bImZ10TiZRVK9qRN0fusIIr+0lEMaOOxAySWk1nP3ki6Pe7q13fhTJMGjHvd6gM8pV1Prv/+X/cWXthAZGKUASY+k4DcxsHTKgIF8Ex8cGHhEI2AECOGsHgwGzAwQVSCLf/ehpvWiMKSePSARikh74AfQ7jNerYWbfoevl2z1a4owVJNhZBMdsnXZKKkIIgsAY4RwLgaAeltf97grjPMQ/TdZ6J4JHnspJjFUuBuYiyzv7h4f7HedgfmEhjqJRtzcaDJ1zYRhGSVJv1ButVrVWS6rVqJKoKPDpBEqBgoQQJAQJyY6dcagAUMRxUqhRt+ioMJqaXa43mxa5s7tuzAiFRBVimLAQzpm9nc2VE1MMwliTZZmxNkmSIAyVUkJJQHDWW4R7OxQ2hdV5vrW1Oej10tGo1+3Wmw2ttceziMg5y+wAnUNrudSPH+/bJbw6Wb3jg3vipP1ouQOxzPGYSQjjGQ5EyMQWlQpOnz4VBKpWqyZJIoQaY+Q4gURgwhgEgEcd4xkcEcm8yIMgOHP2zGg4unnr1s9++tNmq7W2uqqEjKNIhaHn8Xiuof9AWhsAdI6NsVmWJ0kUx/FkaifNdGmWVatVhjL6QSqPdv8RfC0Ay8/ERNRqtnq9/sMhMNYgG3bopArC9WG2PbKrjWaiB6Nhmgeh1VAUWS0MVSUWQhBJEqRk1asRBWGISEU+EkRKSnYuCgKrjQqDrLD97qE1rppUFJYPn9fSA4Y8L0wQfnB/ayfTpIRAX9SzP5eCOU4aH9p4+G6qLM2tdX7EJiPuYxGfjvvpd2PfVyIKw9DDWlJKHxgJITyfVYy9tfyfoLH33XA4yLL0l2zN/43Xr9fGP/a18eSxqV8+xcIBGdfbOzjs76WLcxvrG1IocLC3s1evNxy7WlzZvHun0PqiFLdu337+hc8ARifOnhsNB1GS9HrddDjktNi+f//ejRtxtfLcZ144ffp0q9FYO3Xy7dffuPLhxe2t7dffeKOfZezgypWro9zs7e0ZrYWUgsgYW1KTx1A9jKu0SkkGMJYDRcWoc/3qg06nU6m3ZmZmm83Gxv2tza0dBlRhuDw9o8JYWyZ27XZzd2urUa9eeP+DNBs9/8LzYa11469/2B/kTx5f+NTxtTrB/RvXmzPtBzdv/+iVV6rV+pe+9tX5hYXLH12UJE6ePNnrdH/8g1dUEPzhH/+Tufm5T77wwo1m65nnPnnpw4v1OLry4QVZiZdOHPvwnfdr1firn/+6CqON23c6h4ft+ZkP33hbGBcx/uiv/jrNcyyK/mCg09HM7Aw7/IN/+t/JIFq4fltFwUDn/eGg1WoO9vZ/+urrS8fW8tHoqfNPNqentvZ2wXKtVnn3Zz99bL4mFYPJA8LWOFs4L4kFnkrwy+kqiELkWnsAsTDW2IesG2/pgkh4RNJSCGHYGGeVlAxsrJaCCIXlR5z2EEslSymlkk1ycHh4OBqNiHBnexcBjTFhHB7sH2zvbOtCF3kxylIkarXb6xubWZ5Pz0zv7+4lSdztdrUu2u329vb21tZ2tVrtdDpxlORZ0e11AqVq1Wog1MBaBMjSFBis9WDmz0FtJxeP6+WPvMT8d8RlYeJ7Zst8gkgQ4X/tPYiE1joZBHElBgFACJ6UD45IsDXjajACg3VucvB7zRn/CYfDVAjljUstcF5kNUiYDTrLVusit9ZaZxlYyqDdnvJhBTMYYIvgCMUEpAff6slACEgCEUAAOGM0OLBag7dZiwLVqssoNP0hZ9pqw1oTs4BxM5q0QlmIg2e+8Nu9zsH2jQ9ckXb7o5ER3/zv/vkzz3/eWBaRgkAAAUxiXMfI42bHnzd4ZexCBIDO2H63JwQJAd7V1h8ixlghwVobBMpo4znNk14lX92atEDRWGTXq2L5jVcpyQzMNpDoGJxjQQRWozVESgp0gkAIgodrY4LROscTJt5jHJXHAIUS1ETIR6POQScdZkEQzs7NIkA6GKTDESHFcVyt1ZqtVqPVjCpJlMRBHEklLSLyuGuZPHYkCdFpwyGTIBVHtXYzN0aFYVSrJSJZTc91O4ejXlcZS2Gl2UhQYACyf7hr8iGqJE0zdi5JkjiOUMqycxrAeU4vEjvHxpoi39nduX379ukzp48fP97t9VQYhGHorPGnEnp+NTpG50rfmBLlwbJy8lBk7eiu5cZe7nCEE4VYGiZPfgYABAkCdMxxTIuLi91u17cb+h5THpvfPDbsfvFM8kz/J6SSChg84e/JJ57oHB7evXv33bffbk9NLczOJUnCwIUxlSTxHyiKojDEoijiOPRuN0TS/43CQ3Ra+6lNs2w4HEZhmDl2zhldWOcKKRv1Rr/Xy/Mcveid1pVKZTQaJdUakWBmKaUuiuFwUGnUsSQCUd/hf3j9g2eWZp4/Nj9daQLl6SgX1aoEB84EgqJARmEolAACaxwhEEEYBSpQSip2LgzDPNf9NB0OBgzsHCspwRpBJASVtrCIpOJ7nfTS+oEhRYIIhVJFluVeeNmfAaUCthBaGx/h5HkRBAoAhBBRFFvDiI+kfTjW7HhIQ3xUQy6KIo//AZSPq++s93CpD2L8gvDqVIgoiCaZ0z/E9eu18Su/Niy4OBDNdjNoRMdPrDWbbRHFC8tLIgznlxalChTgwe5uEKnO4WGv2zvc2/3g3fea7bZSqtZotKdmC130u4eIvHHj3qnTp9599SdXL1yMW1PNuZnrV68hw6mzZ5DE4WHn3LlzzVa71x3Uag0qvTTHLgYIxpR7JRHBGHkDQrZmZqZer6DLxeqxYzdu3VNKXLt8rVFrWRbrmzsHvd4UCtsfCiHOnT41024L5qXFpZ3tjV6vd+3m7Yt3Xnuwc3hqdfF/+MNvxsBnTh5/+52fnn7iydvXb23eumsQ144f27j/YHVldW1l9dSTT7zyyg/zPK9Vq0WW/cm//V+CKHzmMy984vnn+6M+GXvr1s2njz+1ff/B5fffBwFJvSpEMLM4/+mXP7t8/Pjh5u5htdaanf7o0kdnzpy5c/Pm3OzcBz97a+3U8UtXrn3+61/Pcj23uvSZL7x859bN63Mztan2wUEXC66p8J1Xf3Li1OnRZbuwvPrlb/zW9//iz44GoP7yoFF5GFhrrWGn2dmSZP13oGP7RbK/v+c70rM0BbaI3hvM928djQX92vTUBeNrtdYa7yNKpSrGuOzPwJaFRGTuHh6gkCiEEESIaZoWuS5yQ9oQicFgaI3J86IqqgTgrCu0JiQCZIa93X0iORj0u51eFMdxHAdB0O8PnAVEmJmZ6XYOe92e0UX51JSGecBjKdxfFOYiPx6FlNwOpEeD448Hyg9f8R59zhrLqFQgiMDDkY8AyRNpXvBzaJ2Nw0gK4VFz8qSF8sT2NzGe4HLQfc23zJn39w+01kEYMyAKYfJUSLSmQBcSOAStdeZcCYnVqrUkim1RSCF92mwRxpLHgF4aDEopA6SS00EoLDIYK1gAO1sUjgCBRRwEoXJ5wdqaUeqywuUGDYPVKKzTOWsrasmnv/K73z/Y7Wzcyq048fSnnv+N37YqFIJQCT6SCYwbFx+H9B4b6/F8sbV2NBoKSY4dgDexQ+ecUgoYtNYALITwZmplTCPlJNDxRbBJ8g8AHtz1G6Zz1jkbhoGx1jorpEBnpECrC2OsczYIlCQx+WCuVNUl5x7WOo6yiyfg4uTuhJRIZItiNBh2Ot0sL+q15vTUtDV2NBgZbcIgiJK43mo02q1aox5EYRiFUikSBA6A2ZvpASEKlFLCpG9MSgixOt2O6zXL7NCBM7MLx+YWNrNhX5Bttqba09OHB/vGFZgPB929pDGvgiAMQyUlEoEghyh9aAtlPGqsNXmeDobXr1yNo+jJp883Ws1Bmh52Dufn54WUtiictYBsWVs2jhw7h4i+jcTnGN7Bwcti+mPRDw+OmQwP93kAbwo9abzBMfEPkUgKdJYIq9V6URTD0ZCIoihG9G5qJRA2STY8B+KxZxwAZLfTUypwhp0xAJDEyZNPPJnn+e3btz+8+NHU1NTs7GwcxxPY34P2AG44HFSrFef8mQueL+hXmC+5+qAkUEGe5cyWPY/KMKHwpm1+KXjtJMcQVWoqSozOEaHf62V5GsZhEETOOUVCqNoI5Y/v7F/e7p6brT+9NDU300JrTDYiCmUQKCljJcNIFU4HYYwoSJIMAkQUUvgGIKnIdjJJEEXh4WAIjoIgyI0FFMZaCJVB2Mvxpze3O5qUVL46Z5RnZ1tPZvd+h46ZUDmrszQ3FZdBToTW2jhKBKkJCXVCr+ax2ohnk9uxaJwfTxyLy/g83ied/hH1EaS11i8j8dAn1u+qP9fp5+/n+vXa+BVeG2WoxDZUwVSrwYUUKnCINh0Nuodbmw/ydJjUawoJhXjq7FMbm5vT83NKyvXNrXw02jg4CKM4iuJGszW7sNSoNaam5ucWF37y/e8PR3lXb8+vLi8uLgpJZ59+Yr/bKfL8xMnj99bv2wKTAsK3PkRXwt14ZGMq6VzswCGRNKzjgJ44vWT6W3ce7DF2h8PB3MxMuz2Va7uxtbu915WSdFF0Or1AyWG/XYyGTz31xFNPPPHDH/2IhXz/yq33L98lw3/8za++8NzTo34fhPjGt/9g7eSp//Rv/i0G0fzstETxo+9+vyiKl770haXV5ZWVJZum0/NzWZFt3r7jANaOr732ve+GUiwcP5bUa8fPnv3h977nnKnWGnFYeeOHPzo42AsCodO8Vm889/JLlSg66HQXV1f7hRZRLIIo7aZKRXaUvf3KTygI5tYW79+/e+aZ85/87Gc/fOPtuN0in72M8juXrzaS2tuvvQ6ovvg73/o//ckE0PVhaNlSg2zZGXamdB7yNN0yQvj4vD98hRnYQDEaBUFIzhljS5ViRgDvfUXMAA4RBACwYwAQJJidMZqEIKHYMaAhYudg3JaD1hcNHTA4B4VESyDDIGJmJWWv10vTEQBHcWy0SdOsUqloYxXQ4WHXJ4pbmzt5nheFGQ5G6SiPoihNsyBQzjmtizzPEFFlKkszrYtyiTN5S1Z+2HI3BnQRgJERwKvWg29MZeBJkdz5EBOQSAXOFMB+5xmrXgFOGqUA7OQ95f+6wmonAEgEyD4OIwB27Dw4VaavKJzWxFQN41KCAZwPuL07Ogl0DESknR3PIBIJ36TuqzraaKmkIwFAFpx1RmCAzhGisTkZyIqusYW2KEPVbk9DrlkbJ6UDL3/MSGAtCykRwbLzjE/HzktxISADKqGApLPWMThbiKIM4awkUYnIsUxCzrUb5Zgbm+VgWRSOi36h02qj+dLX/uCv/92/giD6/G//ExFWHBqMECQiH1mhDCBoQh5/nK7gAyAGn/AAoynMcNgPQxkGQRiHjJJIaZMLETBzEsfGFM5yUeRhGADAJLQCAF8i8+1WMGZwTsBFAPDSw8YaBPL1+lybIFAkSPp1D7bQ5rF3EZHvDy5fwYfy3uMqOkskBkApSAhgztO83xl0D7qWoVpvVMK4GGWDwYABkko1rlerrVa11VBxpIIgCEMlJQD6Vc0IjpARSJKUxM55AzAJioQABBlEaD2ULyr12eWTT+0f7FrdDaKo2+1LpaQUgZBb69eXk8b0wjEiMJl2wOCApHCA1nqVFbBWF7bQWbF+9353//CJZ86352ZJyhDYWjsYDKvVqiRh8sKgdqgZLTAjE+IjhARfyRxDqpPMk4WgccHTU+nH+9IRs5VJh8akU4VIKgWNRnsw6A8GI0QhpSTyLbOT+Ji9vgI8Shfxa7+UZPNUyCgKvUfczMxMvV7f3Nx88ODBxY8uNpqN5eXleq0eRqFzLo5j78bkgxsP1PnfaMY8RS/W7aN7RG8+KbxAeZqm/syu12tEoigKAKjWqtqYSlLp94vO4WGapQDc7XZnZyNEMEYLEkGUkIr2s/THt/bevrVzeqH14tnFlenpGgGBY2ahRBDIRIRhFIOkwmliIhQkSOfAzhamUErlDoa9vmOWUqBlQgRgZ0ye60LI16/fub7ftSISwMTADFIKIb3RnKd2TUrw4Jzr9/uNRktKT1hxDBwEoSet+qfOl6cn4z55nieV7rKXgsj3GGVZ5tmuAFCmrVB27k8q135U2aAg+bEj7e/t+vXa+JVfG4IQndndWN/ZuDvoHG5tbDLzcn/l/q072cxgYWnp8OAQCeMovHfv/qee/zQgPPfpT3U7HRbU7/R73W7vsNvvd5JK9cSpU63Z6bOf+MTqqdOFLRqtVr1avXvvTqFNEsfvv/mWs2793gPEYOgkESkVHIWxvXWUv3dABHQMTA6qFbl+98bB1v0kiqyzZ8+e2d7eTvMsSmpRJWvopNlqWmMHNJxqTbGl+1tbrVbzzq3rx0+c2Lhw9YOrN6yxX3r+qVPLs1cvXpAOrl278fVvfqOSJMury3PzM0trax++/35/NCASQRD86X/4k3QwOv/M0y9/+UtvvP5aUEuq1VqjUnn1e9+fnm5fufjRysmTlWZz9cSJelKpNuoOsdcfVpJKs1L92Y9+fLC336hEH+ztrRw7LpV68fOf748GZz/57MV3L5yamdrd2U9H2dri0v769js/fK0xNbW8uDRM+y9+/Yu1SqLRbN1dT2rV6Vbzh9/5S0bxW3/wrY9PGbNjZ50zzBYepQ38nS+vwS6JiHw35y/G/ceJEyL6xISJiNFZy4JACLT2oWcCH3Gp8GXl4XDoyw5CSACWUhLBYDBUSgEwOzcYpj4K0YUWQniw6mB/Vym1s30YRpGxxu8DzAwM6Sj1+rTM4Bwwez3a/2+z/UfwWkQiEq6MbidxrYfxflG66HtJbVFkJJ0UwYSlPB6Jh91IeZHXkhiRrXNoUCjpwLFD5yyws9YIxKIoiqIYh0mlILcf7cPDQ895AMYiN0SePGq01toYxIgEGaetNcCqWW/EQTg66IVBwAAOAYXXh3FAHrcD8HpxRM7aSUGJERmYED3t0TrHxhJqL28NxCAIBFESyGrMaYGjzKY55jnnGnKd7g1blflPv/iN3WF3+eRpA4YUclncLqvMperEL5mVCc25HHnI8jRNh7Uk8sMqhPSdawA8iat47Fs2WSdE5PdDGAe7/nW/5RZF4RMnGoetnt+hlCBynkrrAKWUNDZnhCMh7PgtfHTHfnxxAEwsjJ1zo9Fob3fPn4y1Wo0Qh8PBKE1JyiSOK/Vao9VsNJpRHAkpVRAIKRlYOmAmT2ghQYKEE8QIKAQjGmehtI8mIZCIWAKwm1tZXdo9ef2jt/O0KKxrtBsOHKAb9A+MHkgB1jhrDCAKJQkQLRMDCkIEbZwuisODg1u3bk3PzKysrkZhxMAURdZanedaKaWCHFxhNAWT+hF6PTUY4xTWWt8vWDbqWYfwUEAXEQUJRjTWuhL9JXekLXuyGia5BBHFcRwE6uDgwIsX4ZFeQ//TXhwTx3SIciKYAUASURInUoooihDBw8vWWmNMtVp99tlnd/d279+/f+nSJSSan5+fmZnxPbBJknhMzut3epDJt4H71Tah2SVJorV2jqUUzrksS1utVq/nRZTKYAiFkFK12q2NjfvDwcB/QqP1wcH+1NQMjXt7gZmCkGkqNfrCTnpr/+rx6eonTyyena3PBqgEI7EgS+jytHDWiDAkSVYXSgpkh8xaGxCUFzkRsrOMrIRwzhIGuaUbe4fXtnsFSPKumiiAUEqrVJBlmd96BD0cxPEzY/2u5+0BgcvHIAgCXzPyPUl+VP1kT7BPD9oxs5fiCsPQV/YnEYAf5In1q497/PgIIP47dQn/r7x+vTZ+5deGY1ZK1eoNnbXn5ufDMLLAK8fWNLukkiyurFQ2t5Mo7uwfbG9s3rtxa2tzc+XYmiVcWlmxCy7N0r2d/SLLt9YftOrVyxfe73S7X/ryV4Zp9vY77wG7t974aTZMa9X6/t7Bg/vr1Wr90uUbncIKJaWSvoblUWpvzsXjTluH4KwNhJiuhbHQU+3pdqt9+drVjc2tTrfLTMNisLF5qBRVKhWj9alTx0+dOH7/zp1KGDYr1Q8vXt4Z6Yt3tgTRH/zul3/vay8PegfLa8feef2Naq3SaNT/8s/+bH9376mnnz51+tTm+oOz584xogqDm1eudfcP40qycuc2OP7SV78yv7L64N7d1Jpaq3X1xo2Z+YW//fM/v3rp0uLS8mc+/3K3c/jyl75AJFBF2/v787Mzw+Hoo3c+SDC4dvXaydOnNvd2nvvMC3Gz9oWvfvXC2+8OsnR19dj6vXsuyxtxcv/S1Tdfe+2Fz794WE2e/dRnguDDuFq5c/eu7gyOPXmqt7f98RkDds5q56z/GgA+Fjl8fN758e+zA2ZBvluZ2aF7pNJXhj4P34F+1cOkKguM7Eq2Ah5xZPDRJyJ4MoEYC+QxWEEyzVJjNCJkWZplqRAopTRF7hc8W2QHiOiMNkUO1mbDoXUlQV9QWR/lcvGDr5z8V2PcyY2UUVEJ904i3ZKaCOCZG+jvbvytX5hFeMDJsWOrPckAjvA4JwWKoiikFNVKTAIDFQARCmkdkERBwppS7MLnqH4TsJYnStKdTsc5hyQBfJRAbE0QKmMK3+NrrA2YC50VOqtX6q16MxuMiNAxI7CgUvzNMePDmKDE3mjcM+TGbVtKKX/PjGStFYCeFMqWmRwIdAAcEKpQxIqyCIYpjSRlucv1cDiaWzl9ZmXBMECAICdWkTAuPT1S0P+5Qwp+cZXJgsuztMhTl0ggYAQS5JyTZfMf+FszxkgppBSTG/HKNt6oyIe8Pvyi8eWcE0Jaoz3B2lqnZDD5DJ4FJDzu6ErlHH+5caPVx+/iaBzsmzr8Tzpj0+Go0+nmWaGUrFUrSGi0dtaGcZQ06pVmo9FsJtVEKkVCSCWJyDo7/kMEvhwviIQoDeWFcADWHCEfowAA7Uxca5w489SVjz7odPonTp8RUTga9XSRCXSD7p5OR86RdS6KIhLSL3DP1DbW5nkx6g9u37ypC7325LG4kiChD9c9/F9oLaQkJYQgEOxdvwHAy1wcfS4ezQGYEYQg37FJhIDAjn2NBccev0epegBgjTnKcLDWIlK9Xu90Ov1+fxL+Hk08nHNH+Q+TpS6ZudCFsSil9KLH/pjxQJFSan5hYWllJR2NPvzwwzt37zh2ayurXrjeuxFOInF/VE+ObQ8yZVkmpYyiOMsKIchjN8ZoNXaUAd8R6bhWq9Xr9TzLyuDcJ3PpaH93d2pmVsYxoVQEyC4ICKwrRDA05t2d0dXDmyvV4NMrc1986ng7AIS80BmQBINsGAXqTOdF7n3/lAr2Dg/RcCuuDIdDVCqUCp0zDjsW3r+3NywEgO9JJfYouCMlZcZsjAnUI/QR/yxlWRYEyqNovjbj0bXJUzHJmI9OJI/97vxkGGPyPK9UKuM+UG9zVw4pjCv4PvTxI0yIlv8BSQu/Xhu/8muDARrt9tqJ4/VaOL+4SFIOB8NAKWPMwf5BpVqr1Wtnnnhi/cH92cWFUX9gnN3f3dvb34uTSq3eaLZaq8fW2MHU/FIQ125efyOKgp2trXfffHdrZ/fkmVMC6WBn5/TpMydOn67UG6vHjnV6aef2AykkwiM1REEeFH/YzUBE7Vp87vjC9vrN3f7g8LDjIbfhyBTG9Ee6P9S1Sri3uz8Y9I6tLlcq0crK3PLCUq55q5NeXd8eDfJPnFr+va++dPbkWm80u7q2pqQK43BY5NubWyYvjC7+/E//7M71m8urK1/46pevX70GAGEcHT954qc/fu3Wtetnnjz3yc99LsvSr37rmwBwe31jZnrug7ffGuzsbzJ++MEH77355uz83Bd/87ekkF/8+tcWFhbfe+edE6dP7ezuttrtW7dutaen3nr1te5gONWeenDv3uza8me/+sW3fvx6WqRzS0tbdx9IFBGKD19/e7jdNQRf/dbvvvn6T/u90cKJ4xc+uHD0YfSBgjPaWeuFcse1eYBHAIyfO88PL485+lPEY23lex8Sfx8W/ibvR/TGAOWpgyTYWWtdKX/8yL4BzgIJYseeIGCtJUZ2BQIYXRJpiUgb64xh54SPJBx75uXRu/YOw75NZmxYwKUV23+FmFO6YAgSJR0UgIiscyXD1hdOwQkQXtqILY6L65OhmvSyPOTdHvl0/mkFY5lACinHf6eklwCA1nmlXgF0zrExQgShNgZJoGPHBrwlyvjAnigD+kHwEC8SSSG0NYiSENg6YC9/YYui8HiYNbmQODU97bLC5blSyvsKAqEnSo7b0HGCqJXA/BFPL493+tjU3zCz850SKgydAAIiB44QJEEkICAOJUQBdQeou8YW0cy8qFRZIkiEcnFNGobwlwS4k9Qd/UAzM4KzJh0OtM7DMBZSeDansSaMKuloqJT0ygqTybBH/GPL5Gq8k+DEGXjc4OvhQMcAQFmWRnHsO4Ods+zYWiuEco9CtpMo9mji9DC0PeIDzGP6MTLovBj0h4P+kBnCMKxUK8xOF4WUMq5Was1Gtdmo1KoqDIUQUikhZekAN+bLlhME4O15vcwYIoAB1uzIoRQkBZC3s8DG9MLqyXMHO/cKYwIbRGEoBKIpilFPZ6MgblKgZBCAQ3bMwCjQAWut8+Fo+8HG9vrm/Px8e6qNQgBhGWdLoZR01hlnUQACGDblXsHlLExm2esT+zFzrvTn8P3ffitx49f91HiAZnKzk6jXn3eToRaCAJRXJ/TBQxCUyYknsgMQP5qB+BmXSqkwjLTOvcqpXwRSCt+77QfbGtNqtZ544onV1dWZmRnPK/KZpJTSC3x6zSN/+oZh2O/3mTlNUwAYDoet1jQiGWOsdQCcZaNGo9XpdHisop/lWaVSbdQbtXrdWWOKwo8RAGZ5urW5WRRFszkVxhFa65xFgiCQmhhkMjT6bq42r27f7gx/85kTp9qR4JwIDHBR6E63FwZBoEIlg063NxyNTK6nai1kN2Rn0QE7ATQ05vJ258HQFky+EZSBgAGdIUIpJXpR5chNZmJ88Lg0zbwDOxEZ69lyk83OM9bZWj2BMI/2Bh096YuiSNPUa1H5pkIvywVjyyuflXoJ1aIoCBl/Mdjw3379em38yq8NZC5Gw/t3bt+6+lFnb3dvZ6/f7Q17vasfXhRCDDq9dquFgAcHB5/69Kd6/f7c8tLu1naui16vPxwMd7d2qtXa/NrK0598Vgr5wudearZa/XTQ7/Zajebs0sIXvvIlXRTHzpze3N+/fPnqQeewKIoojpUqmB2A8KsFxpvlZNwAQQrBNr1++cLu5mZ9aiaIHCBt7uwD8tTU1CDfiRPZmmqYIkeAKIgvXPgoVPTZlz574ca9a1t72ah4amnmuRPLbtB99ZVXTp45852f/XRhdfXrX/69e7duPfHU+b2d3eW1Yz/6/vc37z3Ii/zUU0/0Bv3PvvxikMTVdvP2934AhU6S5I0fvnLp/fe//Ftfh0B989vfnlpc/PDDD0QQLqys7e0dbD/YPNzbX1iYv3vn3tLq2szc3PETJ4+dOnn54sVGvfHuW28tra784G+/98QzTz+4cfPm+xebi3MfTU1tP1g/efbc8y+99KO//R5IkbMVEg/2t3v90Wvf+0Gn0/vyt35ndmH66pWrk6DKH6LOGrbGWz/8opBhvMtPGM+PLwMGBrDGluya8hw9cqCOhV2PALpYto+MGSYoSDoei8Ij0vjPjdVJ0ZXOav6/DoAEleCo8M1r6AQRO+f77hmAERyMkWFELtvKxp+hRFwRyrMVrf3lXXdMJEvBKX89Eo37Z9Cxc0xcwtUoHg6Rh54eshfsL0B2GdgyO+vfQCRIHkWLnbNKKcfWGCaUTM4CSyGdc8wW2ZF3QATwWasv+AKAs244HAZBYJ3Vzjq2CIDgvOUBEfm2VO+0TMpEcZgkSX9rLxCSwTkLTEgkfaAnxhNUhiFHIMmJiKljMNYil3sUE1lmcC5PUyEEgLBgmECAAMMgBArkSABGnFsrRqJSjafbVqGQRBIdgXOWfOnrFwe4R69yBbLXPHeIPEpHCBxGIREAgnVWCOWc8wQYY7RzLISc7Lo89oblI8otHgvwGyaPRVsJUUjFQGPpAMqLIgikdRacK/t6mb1f1+Ty0OnRp/Lo10fX1iTaG42GvV53NBoRiSiKq5WqZ5FEUZQ06km9WqlVgzgWQpDwJKLxav1YH+Tk8fT4Klhvb4LMpXskoSCUMq6vrJ3sdrd393eSapKEKHThdIo6Gwx6M/UZCiQzO/TsDAQCXeg8zbp7B7euXldCzM3NRXFMQiCikPKoTR2zZyhYrTUQEwh2TGNXjskgjFEbKEsxUvhnBQn9MYfjBHJSWMAjLAU8IqOOY5atMYbZBUEwNTXV6/WGw6GUUgjJPPkNj4+XR5RkURRBGHmFcK2tY5aMRWELrUNErbWxJoyi4XCotW632lLIKIo6nY4YV1iyLAvDcDQa+TqLX0nM7EMcX0cwJgdga22SJIPBIM/1RL7OB0BhoBi43qg1ms3hYOisp8azd2Z0Lt/d2egcHjSbrSROojgmkkEckaYQnCqoMEbFlQ/3swc/vvgbpxc+c3wm5CECRZV6glKRsGy6vW6/P9CFrYSREJwOR3EoDaPTxsn43n52aas3NMI6K5X0/oO+MwiIhJBSyizNA6XD0KeMDAgESALTdJjnFaOt75+RMigPDioL0Ijgv/Ax34QtNFkNMLYASdO0UvHNW84558fQGBNFkfcY82KrvuneOn54BvwDXL9eG//Y18bHeAsPi7B+xyRgXeSDXj/PciVUq9UWMphbXDwxGCkpwyhsNBr3b9/Z29uLldo/PDh55qQK1cmz5wajQfewN+j2RqPR9UsfWZP2DzqVavX4k5/eXF//wm99NQjC9e1NEPTRRxeN5a2d/QsXLna6w83dvfWtAwsRe87emMjIwEKAc6CNYQYCVAJqVRGyml1YoDDa2tkElNqwUKqfpg5gZqZ55vTxg909gulGvX73zn57ef6tD6//2d/+aJTl//x/87srrep0re5QhJVKb3//4P4DFYSXL3zw/ptvri2t/MZvfnWYpibLBeGT589fvnjxZz9+bX5h4Y//xT8TRM984hP7BwerJ0++9epPijzf39x646c/+43f/DpJOnv2ySefevbU+Sde/eGPw6Qy1W6itrevXZ+fmf3zf//vGo3Gzvq9mbk5dvZLX/8akjizuXP87Nn3f/omOlicn9++fefSW2/Priy3mq00Sz/3ld/QaZ5m+d3r106cOHHn0uWt7Z2TZ09srd9aXV32sCUSOKudtXBENYwfzulkemmCZ5QH2M8l75bgk3EOycdkKMD/PCAwwZip+RDoBQIsrbasNY4ZhUBQ4MCxlb6pCNkzFoDHv8UiAIBg9hwHRGQsWQNQimmgV4hgFj4cZrAIzvePAY0temFyfhL6kB8A0PKkIezRRV5GtsRADCjA+z1Nbp6PwLSMzpEbc0c9OXiMK8OEKuqfWOaH4DkwPybf5hyDHceSHlNEALhz91466i8vzlai2CPWIlRSEDsrvTgoO+0sjCtgiAjgiKg/GAABCmQNjq3vNXTOEaJ1oJRka5xzWhvhdVXBDQ86UkQg0LDV7MCCEsIBgwUeR14lGI+IRMBMQvDYTg+YJYJPMj0Ga40hhsIWCBjFMUtiiSAByq5DIEICYqQCKJlqcyQsWSGIEcB5pTaa9BJBidI+krfAkYytjJM8TQXIGZ32B5NyhZTK6EJJWeRFEIbWWue8EzUhQqHL8teEgAEAYfljnjnq3bmctZbBMQo/AgDgA2WvgkEAdswHK7Rh1s7ZceaFE/24CYJ75KnicRgKwg8vkTE6G+XDzqgoDCkRxmEYh6SkCGRSr9aatSBJwjiWSgopUBAKAkHAhMAoCBiACIAYBSrp2fFAyIjCo9HWAUApCeYDawAUMq43dWFIGAWxK7RAF0QqikQ27DIbYOksW2OQUUgwzmZpOuj2rl+72uv1jp840ZxqqTAkn/EKHMsa+DTQ5lkBbL2PjLEaERFowuwYA+oP0Wgi8n4yCN7NxtOlyvXguwaPmnrgmMxmrJ0gR+NHo2z7aTQa3W5vOByFofJ/EFHBhFT18FlnYJYkBADkeUborYcDb5pijFXSRVE0ylKtdZ7ncRgJoiLPwyj0sblvUYJxN4y1Ns/zJEk8sOR7jLwxaZ7nlUpVa1MUpcCH93DyP+8TrKLIgiCIk0QqBY6LnB3bMVoPiKh1tru7QSSCIFQqCMNIKu9XoCSR0ZpB3B3qf/ujCzc3l/74i5+Yi4QUkBb5aDg01mR5YRmkoCiKRsN+oAQpMcpsZu0gs9d2hoeF1NYigxQSyxoKM5KzjpnjOLbWpaM0qSRBAOVGACylMEYXRZFlRZLESikiNMaQIADnEy/rjEA5wUI8TXPCs/Rz7FsK0jRNksRr/sM40PHj6Ymt47EqlFJFYaV8KHfy9379em38o18bH48BHo17LXMQJ8vH1qqxWl1dywq9f7jXnplqHOyxsUtLyydOnbx65crKsbWDvf0sy25cvZFleaVab7Xbi4tLau3YzubW7vamHmRXLlxcOXHs3ddev/jehTNPP33s2NS733mr2WptbW0pEjPzSwKFNbZSq5sHeywYEGzpQYXoyVq+x5sEEYEx083qsZX6zUvvD9MCR0MUQaeTrq8fhJWwPyrywkZRuLe3z0Z/9jMvKCVJ2KTV/u6P39zd6vz+b33x/PG55cX580994u69e+eefeqNv/2uSConz565d/Pm+tXre3cfzK0s7+7ufuozzw/T9PiZU3/xp39GDgpd3Ll+4+J7Hxw/duy3//DbzVbr5pXL8Ym17b2DIivI8d/86X8+3O2cefbps+efXJlfWPjN2YWVxc17dxtTbWZ3sLu7PD//0cWP0NoPPrr01W9+4/7G5vza8tMvPN/t9XcazZljqx+89Y5zXKtUrn7w/rvvvBsqhYSfe/mlWq0ahOriR5eX19Zsln7vT/+CfCDoia7WMtsy+Hz8GnN5xiiSkOQcMjsuaaY//y3WWbQohE+rvGkgg0BgYPTt0ONGHyIG77DAfltgAEYEIX3EScQWxgLzPmxxjA7LnicEZHKM3tfOx+Pspcj8p8OxoggzAVkG55j8n/Af7jGghv3iOcKw/TnrnBjLWPUIFbfUKvKxMoMb94VJLD91CSB5oNtrSSARkkDrHNuxm8FjhAkGAHbswDEzCeGVcQFwf+/gYH93f3//7OnTU+1QOkfWCgKwxiERCs9rLBmWZXFWDodD61gqZZlJSqdzBBQIKJBQaJ0rJZjZq/RrbeKQDvZ2plaWpVLaGU/cZmawZqI16x7GYWVRHH33D6JzTpae4dZ54goCO4dIDMwIWhcI4MmjTjEFCgU5YJc7WVjICwsurEQGrJDCM2j9tPlc9hGk82ML2NMjwKdofmkxAKArXL/bDZQiKUkKZvS01MJoAGlsDuykFCqQRmsYo7YA4OtdACXXX0o5GAyshTRNwzDwVn8oHgasYRhobZWSzhkphO8by7Kc4CH78+cswsnnR3yYjDEjEgIIIvRKb6MsG2bMoFQQRZFS0jonlIyTSlytyjiKkjgIApLEXlCZiJ2vqJTbIxEBEit21iL7ZLaEUrzysHNOOGJiD5EyMDscdLqqKgJCJVQSR9blUgkhoChy6dAxIrEQZMHmWVqM0u2Nje3Nremp6em52ThJ/LIRcqLeU24D2mhjcwYjhTDGWGMmWOzki8lQCEETLLb8LoGzdsIM0lr7lMmOjSRgnDBMkN0ybxmvpUnxoVqt9Hq9TmeYJDF5ZbfSH/hhb2J5hgZBoJSUUgVKGGOIhJJSa41jhbnhYBiEAXn6v3NhGHoAyWhNSD7poVKFzk3u1h+9WZZ5tSOPzyGi1kWSJFoXvkAzYWYgUaEzAJiZmVm//4AYCCHPc+90CAC+VQIBnOMsy7Is7ff7gD5rojAMm83mcDhAUjKu/uTWTjW48O1n1+JAGWusM6awugDjsBJIZK5EEYAbZkVOOjV8c3+wPjKFX06M/qYmz4C/HaVUGIaDwdAYI8f23P5mfeVI60Kpur9N5xw6NMYRCSKlQFhb2tn5vmMe14+OInYe1cuyrFKpjJHOshXJS1v7iMdHQnREc+of6Pr12vjHvjb+Dhs09fuDB/fX1+9cT9M0TbON9fVsNLp54wY40KNMAFhjnnz2ma2t7eN85t7tO9Ye9Lu9fqergnB6ZjaqVc5/6pOJCtIsP37m1KWPLu5ubJ86d/b6latG20azder02SQMzz5x9v7mDkkV1uy1u+tpUVZLtdZchkforGMgJgIGJYBsevXivXTQrzWa1uHm+vZgpMMkDOOoN8ykhFq1cri/L8Du7u2w47VTZ/72zXev39n80guf+Mrz5y++/dP59pd/9Mr3Gs12Phgsrq6eOPfE7MrSf/q3/0/neOXY8YPtnb/+s/9MgfqdP/z9mbm5E2vHTVacf+7Zzv7e5u07B9vbq6eObdy5ffrs2XOffO6tN954Moo0wP7+YZ5mURT9+Hs/uPzehZVTx596/hOZTr/x7W8d7u8/97nP7O/urpw4vrm+NdWcyvrDiz9769TTz7z+gx9s3r9/8ty5T7/44vbOvrYwu7p67cMPExVSnr/7wXsuzSrt5unTp/c291ZPn7p5/YZJdQlaIhtrHE8Es/5rF5YtIM6VZDX4hSxtZ6zx62CypGFCLhzDWp7Ci4huzNzFsbmAL1oYY5EEkXTOIgJC2dDm0HqwHp0HV73oT+k0OyYTEKArFV1LAjCh88DuQ420I9eRgGlsYPsL1jZiKYj78HcwAxEJIUt2kGMHDpwRRETodc3KN3sEC8Yg3gRxhCMyCkf/HCCPmTc+SPFvmW5P9Qf9Bw92Njb3z549c/zE8VqtgsxKICAYoz3o5Ma9U8xstB2lmQqUtc75QG2szSQEWm2YQWvtJYcdc57nVAdtchGQc85TLpmZga2zQOAsA5UHf+kIwGydk0fsbMYjVoZNfrCcdNZa1sAA2lnQQIUWWoJ1Ig5RSQFO9wfpYVfWIlEJMBQe5iiDjBJQ40mkS+QX5CMM18kMTnIaz0qxthgOh3EcoCAHmBa6UqsaJqECBk+ZsT78mXBt/QBOohy/JQJ4RQJhrfMbcqVSiYGAH1LIAHyPVCnROJYHEfwLVtcjK/JRbm55C4gIaPIiHY6yNJVCChUkSaKNybIsCMNKtSbCMIhC9f9h77+aLUmONEFQ1cycHXo5jRucZEZyzgEkkOAFVPd0dU1N90z39oi07Irsw+4+777tn1iRlR3plZnt7pnu6qIocCCB5Cwig2QGJzcu54c7MTPVfTB3vyciMgFUV9VDYdIlJfLec8857m6u7vbZp59+6ntCSedolsPEoRbIXEw0KITLNoAAFpinaRDAdRcjEizcK4JRMAjLSb+bxtWg1ojCqrYyy7Ka7+cyEoFS5grvNE23NzevXrrsCTk1OdloNJTv89AiM8+9CGamNE2stUTsOFZHu+himVFe6OGLvp9AyFdQSNYYY+r1ujXGWpIy9wN2byuxchkk+djmMr9cAO3aFHe7bQAOw1DKYv1WhHEJkZXIt3xOFXlrRxtVKkZng8FASjk6OgoAg/7AzdNCiEql0m63BQprLCiQUkopkyRhZq21M/Z3teQAUBaN1uv1nZ2dUi7j4tK5bOgsC6IQEScmJnzfty7ShUhSMMYAg0DPMZdOfOnUGFzoNpRSUqmRkVEJEiSmSeKH9Wa1QdZobbJMk4FmrRZmiTGZ53sIIk1jwSyV2uvFt1tJHzyXGJLCH159lsPidmSMNVpD6Iu89M+Nm9XF5taOAGDJVXioOI6D0EPMrardGA4fvHu9vGdca1x3nZx7FBXeqA7KlDrOf2iY+0Vs/N7ERjF570/PxVmIwSDd2Nza2dmdmJwQSirlhUFlcmomS7J6Y+Typcs6i61OY62PHju+cHhhanZ6e3tnZ30zGSSry8ss8PDRw2kUHX/g1PGHHozTdHpy8tCJ46//4vVDR44cOXp8bGT8xtUr3V5vEA9WN7YIVRwnoGpFEqp4kLlpCxGIgG2z4Tcikdmw4k+ubGwYgjCM+omtNwIp1WijMjo2Ojszc+vGtbnZ6SRNbi+vvXXuyrWV7SceOvH//H/8X9/7xY+OnnoAQd6+ce0rX/nqD//zn261dr79T/8JAjz37LNbR4/MHDr00VvvsjbEsLe18/5b7wTKe+Vrrz769BN/+Z/+sxd4Bw4dNGn2+g9/Mn/wkFReOohf++634/7g9NLy3m5r6sDc2z/7ZTqIgfjcux+8+cavXnrpJRDwwMMPrSwtHT524vWfvb5wYOHqlcuWYGJ8cunTK8uLd5SnhMTW1uZDjz/yzEsvdgeDsFHvxXE1iNYXl7Kl5d3NzYNHj7z0tVc31lcrzVqr00bBLufq9Li/46RbzCuuKRQjuiKk/blzCCyyJQ0gXWSUbIp7a8kvDi+9hqCwUzVIQtCGfN+FrpumSy4135c7dB5SzRQSW5BS5WIABkDnaYWI6JjVMg9ZcDxEzmYBkWn4RIa2It/iRBJFgyVw6kFEYZkBIQeyzgeADKJ0u4P8I5jrHYXkvPGSgxDFTuDuUS0ORAgBiMTk1E2z0zO1am3Xb++2dj86e67Vaj/+xGOjzbpEoaRyDy4kUd4OWZYNBolSyrG8jCgl+J7KUu36BGibWaOFgCAMhNNIMRHZTKexHvhKGcfiF8jcMmOpkC2VA4hQCBiGY6a8ytZaISUSIQonbHD+xDn1YIxnSfrKdVwwlNVGJ9gXrpdCGaVltJYE212vDkVs+dAD95RCYOYs071+R0oEJBQKBPpeZIyWUjGnwrGeILTO04BuYe9Qu4Oq7rzcXBOGPpF1Kb7BIE6StFqt+r47aMGsncGFk9uV+odyAVAOEXOhcRleFhZR6s4SpZBCgCWdpINuL00z5amoUhkZGQnD0A/8KAi9MEQlle+7QgsniCnhnRPmusmFiLCYZpzhgEDBZNmRvW5N4yysmQGFQFBS+n7QrHph6GJMoPACP5DScwkDFMBsrTH9Qb+717555dqg252dnm2MNMMoUko5bwcUeUWgw+3GZMZkbh1qtKHC866cqtzP1lpEt9YDh5bLoHI/E7EQmGVpmqaBHwiBTAyILjlZ8rVlZLodYTFZlOEUBD4z9Pv9RqOhCq+MMqhK+YoKgoCZtTaVKHSeJlJKZiCyjm+LqhVrbRRFRhtgttYasr7vKynJEgO7VkyuV02pq6CiMYZz5pNSxnHcbI6497hSelc8ntc/FuxUGIaVSqVvutJT0pNCYpqmaWKEFEGgpBS5BAVBoHSrH0dlKSlRSjYCgJSnFGCn0+MsJtJeEHaMTeNBqMALI0CBgCKMLGGL5Fq307aSUAjODAEhy6GWdOWTnYlACM9TaZbXVw0/VZMkGQwGg8EAUTirAYEitcZXnucpTylXbeNwGyKWln4A4BaOpe0cFrppdwCO+3SDU6lUnOdf+Q32H7IL2hex8XsfGwygPP/I0WMHZyfnDsxGYbg0Pj6zcMCrhr70Tp46+cknFyMpF+/cEUKeb33kh0EQVEZHx0ZONpMk3VzfaO3u7a5vXFxePvXw6d3trTu3Fp//8ssjo6OnHnzg+o2bZ86cYU1nz57f6XR7vWR7ey+o1JJUV4PcXrEE9GSRGJitAA4EPXj0yGBveXV721obVmqJtsvrrc3tTr3mGU2CceFAtVarPHz6gUcePn3+0tXdgb69tjUS+n/wypOeGTz+5NNz8wuL168//vSzIghWllcq9Qi0+Yt//x88gY+++MLpxx7bXFndXlupN5omzRavXE901pgYW11cmpueOzR/6MgDJy5f/NQanp2fPfvue2vrazOz04u3Fxv1+nMvvzIyObF8/ZZU6uDxo3eu3ZSx3lpcbvU6q7fvVKrVnY2t6ljzkRef08wTCwcmZg+cO3PWCJyamrp54dNbFz7ptdvVakUAv/L1r22tbjDj7WvX5+ZmP/3wrH5EVz5436bpiYdOVmqV/9cvLhNb/t2p3JJIKvAKkWCycBejz0M/5HxrTqXdzfrj3b8ObyJXpyI7PMhoDfm+z2yZyFF5+30Y8o+gIMh52zJt6RhWxPxAiv3mMJoZhkgyziUbf4txyJmhfYapENwiDukd2FqNzoPLMV0oCLn8lvKNDnoAAAMjlSZsnztKANBs1iuVoN6ojE00lu6sXr9+s9vrPv/MU9NTEwJJILJFNypOnT8YDFAIJNY6VZ4nJKIApaROM51lCCARDOQlgybn1USaxAqTQdLDamjz7AgyFO3K7x4y5v3RH86zccGWibIljRBCMgCQq9UjBmblKZMZHadZPwawca9TGWtApEDdNRIFTKESbeTpqft1JgXmLj6SC6TTNEmSuBL4QrDWiRdEjgsQiFlCUkgphJTKZIYJXTMvz/NMQTFQ0XpGFuo7l0P3vGoQhO12p9vpV2vQbNYLPxxjizY9JUr+XSKtCK1yKSid4sVmWTpI+r2ezjIpZL1en5qaGhsdrVYrSiqWQiiBUmAZovfdffnaoFA3gxTAhEKgQGIAgUgIaN19zETIrjE9Cs9rjo/WI+N5gfQVI3h+JL2qsYWMhMiS1lka9/rLtxc3V9fq1drI2GitWQ+jKL/8UoCrDXVBAqBNxmzdQkQMudEBgJvZy0Eojx/yZUwREszWqcytbve61lLoe57wNVvna1HajOwjfuZ89VIUpblVkBOmr62tBYE/OzvrUkxup+Vq3H2bcpYlQqDromStNdYyU7vd9j0V+IGjxH3fJ2PdezKjkyTxlEpNWjZtcnlVZ3LkSo5ceBljyVrf99I0c36rWZYS5VlXa22tVuv1elDIymq12tjYWNIfSCWYSQhAFNbEliyxiILQWVNIIZVSIHKnNMwVXySkMIyS7dxYvRIoDR6Rt9JNP1nbiTx5emZ8slbp9rqubEIoby/LNmLAoCp0xgKF8CA3dc7DC0tujAic1YBUDvOV4aik1EY7239m0lrbfPklAMDL0Ztwmfry+pUMf/kIoNxEwxNC+j46JxdidvgvTVNnn+GWmMOLzn+g7YvY+N9BbKDOdKfdTbo7AFYpdemTT7vt9mAQN2v1ehQ26vWDR4751bqP4vatm3Ev2dva29nabjSb45NTC0cOz8zPZXF/p7VTrVYunbvQ2tvd2T714VvvtFrd7W5vc2f70MIhlLLb7Y+Mjda2dyvNMc/bcQSEiwTI+Z1y8U3V0Fu9fW13e7ka1oXvxUbvbu11+wPhCRCYGet70ljz6YULJ44daY6OdQbZ7ZUtPwhfeerkgwenf/Bf/uyZl7+8u7PV7/W++off39xYf/CxxyvVMEv1zsq6ENja3Pnxn/1ld3f3qReee/Cxx379s18IxJHRkYmR0Z/82V93293nXv3S0QdOpUk6Pj4RNSvvvvXW7NT0oNU++/Y71lq/WvXu3BkdHTn28KmHHnv0590ukdZkoyDaWFt/+PTDH/767WOPP/yrH/5wZXHpude+OjO3cPrpp4w2zenpc+9/hCAmxscvffDh1ctXqtXIWH7xq18WvkrbbZ2mC/Pzb/zop7euXZ2YmXjokYeYyVXkDF+yz7uUAOCQKxEBoFIKAKVUgEhkiSmvbsb71z+fmYf/jXGTQyVEAHalVOB8oFFIgcCWgfAeoJsfpECRV6Ehwt0Gvfvvy0lYAQXVR0RDRKF7z+cDXgZn+OnEB+UIutUh528pz9rdygSQG0/c9U13Hx0iFpJfud89+PPHLwwDzxeej81GbbQxsrKycfvOzV/+8vVXXn7hyJGDlqzzg0XEfr/fHwzIWmCQnqeUlFIwMFsrERHBmEyAECiUJ91EHgSBsUYbY6zRJuknvSAaIRIoEJlB5KuX4aPbH0FH0hccrduoKEcTiCjQEjn5hQRBRIJy6O97Hmcm7ffbO9usYGysjr7E+y6225yMyqGTcslx1+bgC4ItBpMJgDnLEmt0OBIykKdUrVIha6RQTDYIAp1lQglEKZVgYyxpKYTzymUm1xweC9sWIdAYy8BsczWL7ynP83vdHiKGoe97fi9LS3O8cub6XZ6i5bMai+WBM0zQme73+oP+gIlVoCqVSr1eC8JQCAkCUUqU0g0O5E/+IvYKrLgPcxEZgSUSofSkCHwBARvizBAzsWVmtoyKXfNcYtJWSz/w/MgPQuVLFYTCb9aaEwxIZBk4TZJ40N9YWrl2+Yon1djYWHN0xI8ioSRKFGrfKhtzpyCd6RQlUOEIVKJYNw6ucNxRtqIQHrjRcDmTYRBMloLAHwySbrdbq7IXhFTYRTMzAAqB5fSXTxNFOossIYAx9s6dxcXFW48//oTneWUUwxAydoJJFfhKZ4lXWCsHYWhs1u21w9BnYk8pPwyElNZa5XtplmZZZq3NGMIwrNY9JkriBACcyRQVnn/MbK2t1upJqlFIa0lK4QzwOp2O698YhiEKQcAEHAaBFBIRTaZrtZr0PXTOjp4nhQXGTqejM8KqCvzAFRAIKVEiFGoqRgnMhIZY1YQ6MFJnYzQZIIxBrRkRpOnhzAwGPYHGr0RItqP5ajvdIyHQlaVLRssAqCQgEkDesI5BShF4Ub/fZwSQEhBBqLxcAUAqsJnJdApIni+FRCsUW+tJHxDIMlnyfQQAz/OcnWqJYFwG3xGlaZoSkZRKaxOEAVqjyRpNYRgKT2Vp6p5rrlmAKdq9/tab8L96+yI2/rHHBsNdgKZgdqB8NgnEVGdLy8uD3bW4N9ZoNlt77ZlZUwkrUnkfnzk3Mjqyt7vbaDRGJ6YefOSxvb3Wxsba7s5ma3u7s7OrAn9mbm56bm5s9sDhhYNJL2ZPRFFt9c4iCz/WKFRlfmFWSAYLzbGxzY2NlIiAiYksGTCQz4JowQJYIaQn5MxUI+Se0GNRrXZt8VZqyA8rnsyaTa9SjdrRYGJ0LBCiRzwxPv3Dn7/56w/PByr4P/7LP3rpqZN3rt9ojkwg2Y/eflMbun310o1rlw8dPfjkK1+6cv7iyOSE9L1Gvfbhr9/a3to69sjpmYOH6tXai1/9clCtaGu2NzdQKEv2jb/54c1r117+1rca42MvvfrVqenZq1c/TQbpyMSEFPj+T36+29p76dtf9wO/MlJ/7fnv7W3uJN1Bc2drkBmNcmZ6/vzH53a2ttdu3Dr/znuW+KlXX5mZmb1x/NjuWGt0dubyux/Uq7Xe9u6FCxcE0OTERPP4cS2lRlhaXIyTdNA3/+k//pWb/HInBFeulxfqQJ5V56LErCQcGQH2s6hSIIMsm5MBAIAoBKj5x7CEcpadpv2+1HLuiQCuIzAAI4GrJGNGgcRMKDNjIkQlkYRA134XmYmRGSwzWpDAhIz51J5rCZ2UYQgkCSBg15QMiR3TWWaEEREZGZEVojH3O+cikJPkitwZzTXYdVoHx9mizJlhIQEB6C7vJoLcjM9ZOrnBslzYlhRiAHIAqEBmJYme32K5/MExZ4AoPSmjsaBWiWqV4Nr167/85Rtp9vz8woxEDr0wzmxvkGaGUAAQSBS+H+gsFUIEvq+zWDAIEACQCxmt1UIo5kGa1QmE8izrbn+7WptgDpUwIkfhJISQQ3AESzcxAC46eQgp0VmmYcFfgytBu6t+CNDZkjEJAA8FMlldn5+RzSogkxODY+ER7no/M7townxZQlzkDMpBd2l3LChtREQhgVAnCVOqvIidIwQbBBSAliwhKk+5FYu2RgiJpWqcLFmLnuMjwLKVQmqjnaKCCn+MeqOaaQIgZtvpdEwUBUHY6bYc0sIigQ5DSp4hPLrPQZQhgEOiUkQkpiTL+v00jjMAVH5YrzcrlYqQUirJKFAIidJNbYhoHBPJIBisS+CwAOFKzgouVCB4qCLPq1ZBeEBMSZK220ITWwuMQJaRAH3SmQTjST8IVCA9tpRomJidrdQn4n6sTWq1Tnr9zdW1K+c/MUk6NjlZGx2JalXP90Hk9ZeONAV2/DRkOmVBFsiJQByCtC6EmJnZWuMeOHnje1HwQWKoJBEAUSpPuMdGve71er12a7cxMhpUagBoiVhIREFMbolbpjeN1UQWAaVQJsv2dnY+uXB2YX5uYmLCrZn57to1KPQkuTKydNkF5m6vo5SqVmtZmirPU1JpoweDQbVazbQmY4MgYGBH6Xf7A2uMS0yX5eFlsgAYnIunpwTmtTJ+FEXM7PtojOn3etV6rdlsOmG453kZZc1mUwihXOONwjTbVZo761ClMO96Xy4T89sFUQiwXAtkJVASGAnjwaAugjllG7Vwsh5EHgJ6Qok0pY3YrrRjlMotbhjyYS3PorTcFywc1HM0m9NQ5qMppdMVDgaDfr9fq9WkUiw8Y4xElEoN0thaG5AVRctW56BR3jmIWEITz/MB2BgTYeT7vjOHIqayrsj3/cFgQHlTmX3nlH+g7YvY+H2KjftfsQwSxcT0VPPg1Ei9Ojo+HoTVhYMHq416FIW3btwMff/G1cvjk5PLi4uTU9NeEMwdODA6PtnttHe2t/q93tLtW7euXZk9eEhao3zvsWefjdPssWefrTRGf/T2GTBGySBNslvXb03NzW1tbW91km6vP+JXy1nBjaQ2hlBK4LnJkfmZ8ZtXVtvt9na7HSdaW9xtt3c7A/AqBHZspPH8s0+0NzePHD6gPf/9T66RpZcfPTHfVEePHxZChGGEwLu7rSeffvrOrVsfv/H2gcOHpufnu62dF1/98vSRg7ev30iyVPne3NzsL37wwxuXr548/cA/++/+25s3bx49farfjxcOLnz0xhs7axvbt5bf+/mvas3606+8qCFDptro2CBNt1t7QRg2K9Vf/+DHW1tbYeglg6RaqT394nPLy8uTBxfq1eber96qN5sewuatxU6STMzP3LxwKYvjx555/KEnHt3aWKv2Bp1utxZV71y7qcnOHTz05a9/LU7isFHLyOy2umvrWwBSCCbrvHyccwKwS6xLAQDgUsnDV7koISpjEhCFlEBArqYNxF0wA7nwxkJGAfiZndXu37C8sThPSgpEYYk9KYVkIFYOwOQ4cz8C9xPlnx+Zw6/wkFDP7VMI59Txub655TwHeRKcmRkLmFJ8GwKwKy8ThcQxlz0VR+ZytTmmwWLkPndHn3E0aZoyMCJZC0QUhsHhQwcbzealTy+//vrbL7z4/LEjB/p60OvHQihikoAuW+VgKANkWWqzYZ29+x8AAJFVytdaExEr6va74zoVwrPkrKhyfFb2TSiH8XP4kbtKfD7jQmCudhBEVuteu51ZboxPMkp0Jlf3FTuW2erye5B/h9hCJqJ4MCAiIYX0hBOzCYFZlrmTUEoBCGOMK6UyBJ5wfs+ofM+SlcLJ2AQikmVPuQ5qeapNawOA1VpNZxkzp2nmFiuulbotrKz2qcQiOnhoK452H93mjzUGo3Xcj7vdXppmIDAIwlqt5nm+klIISa5xSfHoBsSyF8RvGBZm9DxfegoQAAwIISLP06Hu9ZEFMbs+Y8DMxngKwWSc9CyylbX6xGxtZApRWaZBv2/idHt94/yZs91OZ3R0tNFs1BuNqFLxPM9NnfuzJzMgW2u1SZktAwkhuSgCEUMdRqy1zFZKpTxlCvmHEMKV0ORp1WLzPGWtYeR6vT7o9zudTlN6fhgIB68x9ysalpEAo0AJAGRtmqZnzpypVConT56KokhKJaQEuuuhUVwdVJVKpdvtuiIhY0ySJoiiWq0IgdVaNU3TTGfEZFIbRVG1WtVpJoSQSiVp4ilPSuGp0Pn/h2EYhqHz7CWiKIq00b4fOOd/a40TEdZqtd3dHVdE7HyjarVat9NRMs9lR1GUU/llBkBKrXWSJEmSONTlnlmclxSUgipmRsnmwEitHnpJu+upSiLSqqAnZiYE2lARColCKiH6Qn66vtG2AoUEACZTLD0KZVihCXN3vrvN8lErbhVrLTNIwVKqJEniOHYLHU8pIyVpbVLXW4G0Nk4m6s56+DIQ5csjZq7VqkmSWWu01qhyOMXEylOubabv+4jo3u9kAL/tifFfv30RG79/sTF88xevQJbpFLiLjMpbWVqOB/H03Mzk5OTRo8cqlSiKoiRN9nZ2lpaWEMHzwrkDhw4ePjQ5M723vdNrd1YXb9gkfu/XrydpOjrWvHj+k0q1/vRLX/nBe+cvXr4qTUo63djaqY1OSC+I41Zexg375yhcxQ8IhUZkncsXlnf3dkabI7ud7l67DypodwcoUUjZ63RHq9HG0qJSaubAsf/4Fz/Zbbf/+be/OqlMIOiNX/xifuHQxPRBBPjK175x8Pixn/zoBwDewsEjl86f++jtdxeOH/snJ495ynvlK1/uDfphvXbz2nWtdZKk589+fP7jc3Pz89/5Zy9FYfjRu3JsegqAl2/dDJv1s+9/cPa99yYnJ15+7WuD3iBudywwKrm6sjI9NdnZ2F5dXYvjeGt9/dbi4rf/+R8ZbV/40ssTs9PbuzutJIkqUVV4H374we7OrvKEyRIvCF760pcuXbjoBf7y7TuTkxMfvfdOfbSepvHRo4cq/slfvP6O8BQCI0ohXN5GFhRh4UoAwHmr6yEylHNea+haSyGAgdEylwlRcG26cmqyyGxz4ZP1uzoV7iMnQERhibQl35NKFMdAnE+KmCfKHQ+EiELkrk73Ucc5huACpJb5U3CVOkWV0mejXMzlReX3lYdaIAmXTkVmwcBCoGCgQtM5rBFx7yZX5V04qd1zBxVYrpSN5Kyve00IYR0FJWUQhEQkfJyaGq1Wnzz78cX33j1TjaJa1ZNCWjLIpNCTSmid+Z5fVvpbsgDg+57WRutMeb6xWoEHgF7eHcZIgVkWW5t5Xu4ldw+cLUnZMjbKv+arYimttcUV2afPufCVAwRCEMSsje0lnb12NDUmI7+4l7mUJDgiwz02C7KzuB73SVnuUuQg5ssSMv1+TwhBYG1mPN8XiF4YCGRE1Mb5kJCTmhKT5weuRzygk8YKFgD5eo+d809ZusRFJz9PKcrdLYwxxisGHIv27MN8Ad+33R1U++MphCBLWZI4w0qpvEqlUqlUZFnwB+gE0HK/LQIMl6B99obCC0OUSKQZGIUSKFGhJZJOOETARABksoR0IqznY8DIQX18fOYoo0/MWZbFvf6g1bly8dNuuzMy2myOjjSbzagSOc8HN6si5m2iXZ/fNEuItLEGpOskkkP/vNhm/0rmVkKiqOErDlzgfsOa/Eorz8/SlJhq9Xqv12+3WtV6vVqtAaCTgUOxJCtWGkiWmImsuXr16u7u7gsvPluvN6TnK+Uxf+a9CQCg3HSYJAkROaDAzMJp8JmlUgggQEilpJRRGLIlnWVCyngQJ5hUwsihliRJXMdRN/G7r9XG1mo+EZHVSkovipym0FpSSjjOzxqbJEkURda4JluKiKrVar/b9YrW1Z7nVavVwSDu9bque1Y+TGLfsA3RiVKEZDNbC0AnUipilH4AmfaNlh4KKcJqhUn20/ROJ73VSsiLgMiSZiAaWomWqxkeosHLzDsWohMiStOkEgVKKYfn3OtSKbdW0+m+3Metqn3fD8PQFu1ejTGuKYCrP2Del6dIZxIopbU2DENE1K5dQhD0+/3SI/AfbvsiNn6PY6N44iAQbG5sbSVtT8Hc3IGt9XVkDnx/bWn54MGDDLhw7EiDeX5+YXV5eXd7u9vp3L5xZW0tqjfHms2Rqem5kbGJsfGR5ZWNA4eP7ey2Pv7wo4NHjl26+OnNq9elkNbS6NhYc7fdaDQWFhaWN9soDOL+AFq3abJaz86NTtYoHlhUotfvt7v9qFqzKP0oazYatcjv2ezAzMzeXnug+Zfnf7C0uvN/+td/9C+++9qFj95Hzw8R1u4sIdGZsx8/98JLIxOjzz37/JHDxw8eP/yTv/oLD9TE6PjF9z585423Zmamv/W9P2j1u4ePH1taunPqwQduXr2+fP3WztbO488+093defK5Z8empne3tyH0Zubn2xvbO3dWe3t7l85fvH7lWr1R/9I3XsvS9KmXXpiZm7115TID1+r1jaXVrB8vXr70/tvvjo9PPvrsU+D5z33p1epIFaxp9bpeJRwfHTv/zocbG+vjjZFBPPjSa1975xe/6vc6EpiT+O2f/7zf6y3Mz0UV8dIrT733nz/Awu8pJxRxXwMpAEhKcC6wlobB1hCadHpT5TjKPLnpUuNFet3N0b9Z7Lr/3Q7L5LyegzXI1kkNBABrw0qCJ0Xe3kxwLqJAYIHlsQkhKK+SZCHygrNhdA55EtptzuE/x0+5UAAg7y5x30HikNKxzCkPT36Odyv0vjnVWt6/sP/P8M3yGYMBOThBcBqAfFG9T516nseaIK/7JkS2pIX0pqbHnnv+qY3NnUazqU1sTKakVFJorY1lKQWRFVJkacaUr+mVEtYOyFhttMxbHgZSSmfqxFUim/YHPd9vACooBQAFsCvPrlS7uT+VJ86FIqPkdHmoXN2NGhMTM2gb9/pxksxOj4FgMjrJkjAIJArIdQ3l0iWPKdwfLiivdXkthiiJnD1HgEG/7ynJCABstVZSELl2j8JTUggka5wqQwAwWXenMLMlRiGcZg1BkjHM+5Arr9AlEkI680pm9pSndcpOcQHgKAMcTj8Wx1kC3HIAsbjjylOwZHWSxr1+0utba5UX1mq1MAiVUlDYEjsdL5ZGs64Fy100xH5aoXhagvB88ASzZavZaCHIpqkAECjdUDMxgUnirgJbr9al5xtVG5s5rKJ6mhmr085eO+n0Fq/fbO/uNRuNRrNZb9SrtVoYhdLz3LTirgLkQBYsGW0SZs1ATGCyjIsy6HxYcssFmTdXsYRSlB0fhu+R4WttyUqlyNpM63qjniTJoN8ViA7pWktl2qcIQmZgY/T62uqlSxdPnDw+OTnpB4HLXeB+7467chFCCOUKXwaDged5tVqNrE3iRCstpYyqlSRNJaJSXpqlg8EgDALmPMvj+z4K9H0/juPyrnCe/51Ox6EZYnalRf1ex129Xq+nlBoZGdnb26lUKk616XzvibTneU5cWKlUOq2272Ex0DKKopGRZpLEziXULbhxuDMeMwoEQgE0WY/AaGILYAXm2V/peSB9bVFIqb3w48Wltkbw87U7FX6I5f3ABWPnrpbTtsuiwyq6pZiUSZIoiYHvO3I+y7Jer9fwIiZGACGEkrnWx5n8u74J7iFV1sI7Zt7zPOZ8d1S0znO9AIwxUklO2OGe8th+y+Lv77Z9ERu/97HBAJa5Vq/PHZ6WAg4cOFipVqNKpdlstvb2sizb291N036m9ezM3MjoaKVW7/d7uztb/W5v0OmtLy9NTk1OTs1NzUw99ewzJx969OrVy4dPnjx1+qH1rc3tzc1qEB07fmxyYpQsWTbKU0mWGKuHDw0FWmOtsZHkmfG6HWyvra8ZEEL62koC3G33UkOjo41aqB5/5IGZyfEzFy4trW+tre+eXJh86dHjq7evf/nVr7a63Y3VFSFgfXllsLsXdzs//vP/0t7effZrry2cOPrUM88s3rg1f+zwuXfezzq9TSE+vfTppQufTE5OPvns0wcOHPj4zBmBeOzwkdb65k9/+NeN8fFv/ZN/NtIc+ca3v33g6NEz73ygKpXJublBd3D78lUvDA8ePnzn5q3xycmHnng8jIIkTlHIN3/+y/mDB7e3dtJOLw6rH7///rkPzk5Ozzz3pX++sbHxyHPPpSYNa9Xdjc2RWmN7afXc+XP1oDI6MXbq0YdSgEE/4dQC4frG9uLtpUPo5RKCfPJzwLTApG70APO+WEOoLP8fkbVGKg9QILJgBa6DaB5ZWLwT7/75N25FVN0H/BCAEQWgIKuNsZ50hVCAgOzOAvd5T3JIF8Vv3i8zU07ClXqDUonEiPDZqgXEUmD6Wzd2sMgy/lYu7XfasMC4YggoKK0TCcJaay0JIVmAMdnIaG1sfLTX60vlIwulgCxZbaQSAJxmiRIKALTRSuTwlNn1oBAEpDwlhEjTrFqpaqMBCJDipDfChHnVuShx7ectfT8TwQ+jurteL6ohjTXdQV8EXqXZZAKB0pc+W9rZ2qqOjgRRdM8HMf/s7zqCCGys7Xe7vu8xQhiGAlFKV+ahjNGe5yStYIw1JvODwGl5LBGikEKglJnOyLASCCAEoiXjqvqc6bvRJoxCKuQc7pr5fp5MwyIv50iHz1nn5BsRA9xFnLPlLE37nW4yiAHRD4NareY85rEI41wacJca5zePCzOz1sZTkUCJSqJO0lY7bndDL5RCEAtgRrBk7aDbUZI9XxoRjM4cq47NZlqz1kmn1293Whub2xub9Vqt2qzX6rVavR5Fke8HnrfvaAkMDG56FFYnRNqQQQRLIKQsXZLc4Ni82hvd3FdakJSSBh7S1pcjLIV0rRellMaaMAiAOUliz/OgeGcZwHkAkhkM+h+fOzM61jh06EClUlXSQ8HuSUNkpbyLRXaHp/r9PhHt7OwcPnzY9/00SZUy1tpMZxFH1Uo1TeJMZ0ycxLGf714gCqWktaQ8z7fETM75SBvjB77ne8IIZvaUTOJBvV7P7bURfd/LsrRarSrlpWkmpXJFgoHvM7E22g/8LM3q9fo6rjGAEy8bslKIMArr9Xqr1XI9TozWOhMlxeUeK8S2IsVYJSLXF1GClFKnxvNUEEbSC7dbXam8bQPXNnasrAIRuKbqnLcLQgQhpRyyh8RCs+9QhfMxAQYGFFJZbfq9vj/qOVgzGAzCKPKVNJ4yWjOztQYFOs2lgyzMrJRE9JMkBUDPY2O1tSyEcC2sHBGjSFbCKE1TYtJZFoVRKhOH5IpkCrnu5/9A2xex8Y8+Nn7DwzPnqxiQDYPnBWwSa3Sr1ep0OmPjow89+nCSJnPp/J1bt8HQtcuXle9VavUHTz80PTPTabe21jf2dnfWlpda29vLt66mZGbmZgZ7e08++/Sjzzz78cefhFFk0iTpdG512rduL3Z7sQqrvX5sObdSFLmxIpBlZmpEamttMenveUFIhtc2drd2OkG10u+nUslBvx+3+k8+9IAKa20jl7d2J+rRn3z3td7WptX6ytVL84cOzh06fOLBk7/467+aml8YHRv/9OOP4sFgd33tl7dvWJ0+/7VXJxfmbly5JlfWTz14emN149LHF4Sn5hbmO632448/0T7WeeCh05+cOZcOMjkudlaX3vjpz8empw6ePDF78MBr49+dnJ+78ckVZJ6cnky63Uvnzh8+frTfaadJOn/k4OTkzHOvvHLq0cd+9sMfQViZO3R4d2O9u71ps/Sjt9+5/unlRqPxwmtfrkSVa5eu+YHXbnfH6iO3r13b6+w+aB796je/MegPLpy/oHd3U61RVj46czmnc9B1JRW4z40BgGsjBjLvzXv3pQVHuwomAMxt8CV6LFzn2BJcuh9cNZUrBBOwX+X2eZEzDAfZOWtJyNOuIJSxRlsOPde4xWU57/4ChxwkF7/s5yjBkTYEAGCZid09mJsgOEGGQLAsiMzdx4nFGlOhkM52qEgbcKGXFyCQqRhHh3GJymnVSSWGaW23poTCeXZ/Z47xys3Y3JR873uAQSAaYwWilML1jhFCWiJDjAwIJJGEYAS0RgOBQCRDAMzWCl8xWWBC4Ts6yw+CLDNOkiulMtp4UhJbzwuTOK1UAp31mLUUkQBELDy8OD9CIsolLMUCXgjhWrfl6LKoTy9Bxl2n7JZVhkyi+51eONEQvu94W88PmckLI88LEMSwwUM+OJC7tREwAwz3qXdROMzSIwBZ2x90hacEKgcKEQWiBSBXg18W2iql2BX4CxQoEZnIAoJEVL7PRDqzSilEsJYBUEiXefMA2Vojpa+k4yOtEF4p7YBCT1Vi0CI49zHc8OtQoDdEJGvTOB30Ym1ICa9eqVcqFc/3UQjXqvdunSoU/O5dqyy++zZDECjYxjEQSc8DJjPo93d3lVBSKs7rAxEByOh40A+CEINKND4/MnWEMUyStjC0t7WTdLobq2u+UtV6rdKoV+qNqFr1w9DzfVfzwm5BVchMCGxiEm2tEJLYArM1hl3D3rKocV/ZAo6jBgTr8ks4zDjtmycQ5LIWoRRZYsZUWz+I0FohJCAQsZIKYN+mmKzN0uz8+Y/jQe/hp56qVmqApXK6vFO5rEzI718ixcyVSoWIOp3O/Px8kiTK97TWSqo0SWs1z6mABWAURgJFEAYSVZLEOtMA0O8NACDLEm00EQdhmKSp53lOLAjMWmdZlipPGWOM0UHgG2MQIYoqg8FASiWFBIAkSSrVarfb9TwvTdIoipTnaWuCMEQLxMxEnvIajcZgMHDZbSGFztJy7KTyJQMhjYbBVKMB1JOeZGONJRRCOl04Q31kYn1r7+Ly5gAVCeUGD4mRXcdyFgKhUJw4/MGFoYbLpHtSKSGtte7SMlESp1mtoqRyrofjY+OCWQrhROyWbNmhCgBKF2WphGuFZcmQtpgbYqe+7wGwUoItqcCzUhrDpI2qSuceJaV0eXBXRgz/YNsXsfGPPjY+nyQoJmYGgL1W+1p/N+3uxf3B4q1bSnnAtttuR5Xo2LFjlajGTLdu3tja2Ojs7l7+5KIfVaZnZg4fPz6THlhfXdNZurO+3hgf/fTjjz984+1jDz9UqTZuXr7KjFOT47PTUx+cuwCMvW5/rDIiPJ91RmSd6FIIaS1bS4EHxw7PSdPaokEv0e3uINWmMVpF4UepbjaqyDQ+OtYfJD977/Uri+ujlej//n/7ty899fivfvHTiYlxHScfvvHGxOxsJfTHJ8affPFLQmDw3tuq1hifmHzrJz/Zae2MjE+uryzPzc0fP35q4eiRf//v/h0z1eu1JE7+9Ef/qxLqmS+/9NCTj3VaLSG8qQOze3utQa9fG0nPvPvOh2+/d+z4yUeefAKNiQI1fmDu2qeXrOD5hfnL5y6OjIzc/PTymbffr01NHjp2YnJ88uC3v3vqsYf/+n/7j6Tk2Nxcv9vZur24gTh9aDaJ0/GpiRdefvnN138djdTXVpYatcrZd972/VCG4aNPPEZJ/PGFCzeXtzvdhDl0l6tgQvkuKaMDFM4EZJ/F3c8FO+6TrMVCzu784S1rIMohNHPxESRmca99Z7GrYre5WmFI201AIEDm5XEMiIZEqq3vRPTAIAUTglPCMhfzNzPkKzEamtCZmcmlKYHcTAiIzCUmd6IJIsgp7GGNAwiAvPNZqcVw6QJkkI5eQshtAUiTNoX2oVAl59rS/TFwXYVLKULZD83d/oL38Vk5l+eXgQFcP14iIiaZ4wAUIlABIRCxYaMkIgERG+Py76QzrTxPAFpjpEBESVBkzwGkJ9laByOSOJUCkzSuVapEIAVaExNlUjhVd3FIcFebDwZARAIQiK5ThgXGITn2XXCkSBznnzVk0kwP0jQeTI4d4rygDIlJCFEfG3cy71zcAsCYd36B3K0NoGj/PBzGIJzcs1jDESZJkqSJ8qUABQQqUETkeb5SwjGyLt1XOH/lzz1g41RhQDavuWSQvm+tRXbkqQQUBMYPPTLa8xSRJbLGaERwmUaXuGfm0myhjMyhUMsnl5ytLP7ixspoEw+Sfj82hqQXVSv1qOi5wAJB5uJxhymHb9eS9mbmvP0KFKQmAgBLJjPoJtqYOCGdSk/5QSVvTJ2780mTZWR1fXTcr02MzBwTQT3TJlCq3dpr7+1tra2zMbVaLahEUSUKq5EXhl4QCKVK+j8/IgFCouZMU8ZYphENM8vi9MtGSI72do8T1+05z+4CQmGyWw4jossrFZGG6Lw1hRCh5ztdh0B0NnAu8slaa+3S0uLtWzcfOv3g+PiEp3wiEBKZcpMHyMXYd9HG0hXHhGE4MjKysrIyMTFRZkjdZdZaO6mMdQ7ASoZRNOgNiMhag4jWUKPZSHXih0GWZsCMAEqqTr+TZZnv+47HqtSqrhqUkIQQg0EMhQzF8W1CSDdeSZJGYdTv912SukQVblyiKKrX67u7uwWzZXMCET0mYxiYuRaGkUKZEQMabYFIKvR8X0j0pSQUm7346tqulRGhYLdGodI6MK+ax6F8TXnD56OmcgcQIUSSJC43OOgPRkdHjdts3iPAHSQUyaZS9eKC2VpSSinlaZNoLTyltDbMLIQIgsDpFamw38Kh0iIXDdZayi1c/qG2L2LjH3tslMeJn4lcnN0PsBf4MzOjHk8cPXZMRWGW6moY7GxueVLurm+Mz0xXGvUDRw9Pzc3tbGxvbmxku632zm6lUmmMjMzMzjbHRlcWF2cPzF2/dNmvVienZz49c/aTC1f67e7i3lb62IMjI/XmSAOEDBvNMPJbg7SQjjJS7gw60Qw47a6uLm/t7oS1kaha3WkPlOcxQ70enjx5RNjs+IkTV5Y3rq9sQJY+durA/HhNm/5Xv/Hayup6b2d7c33t9OkH3/rxj9Y31r83PiGkePErr44fONjrdncG/dGJibofvPGTX/Ti+Mvf+Za22bGTR0fqUX10rNVq9dtdIaUi+Nlf/82g13vk6Scefv7pd3/xy4kDB+ePHBzsdZPdTm9v9+zbb3343vuHTj3w7NdeJWsPHzlSqURXblxX1YpPcHPj+sz83Bt/8zc3rt964etfTbNk5uDB2QMHjz740Fs//1ls9OTMdIDi/bfeBssjtSogvfzVr7z3ztu6219eWkt73bNvvME6PXz4UKNRV55vc8GM68FQXsJ7L+Vd6smhrQgPp7hk53cghAQpOWdgP68J8N9uE0IIR79gAVMQtLGpJvR95fraSwHEQGx5vx1reQDDN5SDufeeiyMDEQDAMmnDlnifUC33OjQ4JciDHMYSAgBbp++zZNiaHPKBcH5mBT69V5WLd2/F9+erhHL/w38tNwKyTC4RhFIBAYIfhNVBMvA9z/NENjCDQd8VobqsFxfXjohce1hrGQGMzlAI31NEFhmQybpuHMTEgFJoo5UCskZIx6HnmWTxO9Mhw1UH958LM5C1ZGwSx9raxkizHIp8nBGgqEIrRc5cOF044HT/TvO/DsWwQEiTOIkHoyM+gBHCU8pZwrIxlnnf2cYY43S07ntcY0hmtlqjVM64UKB0HYIwfzaCkJ6QPhmDQgBZIRVaK+S+F5WzP+fCSQAKlWd5sg4Q3zNQpVzVGJPEcRzHlmzk+9VarThIt8zgvAHHZw3y527M7HqsSCUZwPPzPnrKB0RC6UhVRLImMTYl5Xn16ag5a1ECaJtlOxtb6ytrnU4nCsMgCiu1alipBGEYhpHne7lQ2JVgOl85gYCcJgkDCwGuZsRalgVmdbNP6aEri84O7lLKoQ7SwzNREQxQUublpMlDim051DrYfardbl+8eHFh4cDCwkIQRFJ5zm2mzFpgoSwvP+KGTUVR5Hne5OTk5uZmp9NpNBppmgoher2eq4bx/cASeVJZa5MkIWZL5JZQUkpm0NoEYaizLPD9wWDg+77v+WXTPDfvAoMf+NZaKPhtKVUQBFprKVEIkWWpsaZaq/W7PSllEAROnTl8FyGAUqperzv3KPfINIVTlUABKJGpHigfSSjVT6zzlkNmyxZYAHNisrXuoE2SlBLAKIBpH6xYa6BIJzhzK/e4KX3sXVIYGVz1DwBEUYXIDgaDIAhcQwRXcTWsYXcgBlw5guveYYwQ6HmeENJTHgUBojTGImLpwOV2XS5YHefnjAVcQLiqrN/1Jvnbb1/Exu9NbHwmDAIo0ryIUSXywBNSChSjIyMnT57otFtZlt25s4h7uzdu3mjWRyampg8sLDRHRva2t7utdr/dae3s+ZVgev4Ak52enkkGg4OHj84fOfzrn/ykNtpksawzMzrSBM/b6/Ys3d7c2kjTzJVGAzMgMqBO00ByI4S9rbVBrzc2Ntnqx2ubW3vtpFoLkyxDgEGvNz8zceTkg//5l+8Zoi8988gzJxYG7d1z68uHDh1dOHhYHpyXFd9vjK+tb9aqjbTT+cVPflRvjv6zf/WvRC365nf/IGrUVheXOr1eVItC6f3p//zv93Y2H37s0Ve/+fU3f/H69OyMCoLRifFf/s0PB92elEqFMu52vvL1r5189NE3f/zTsbm5g6dOLi+tdLd245n22z/6yccXzn/3+3/AQK++9jWTUmdnL9pYH52evv76m2AMWv2X//P/0t3tPPDk4zOz0wcPHamGlYmZyb3dvW6nd2B+funmzU8+/bRZq440Rw498tjaxmaWah2nWdxfW924ubre6faboyO0MXBXSXCOWD7rUnI5Pdz/V5eU4KIK3mWnpZQIwGSYeR8o3pek/l228iPO+ZSRABCEAJCpMUJYAKmURCGALRcfyT97dynn8KxWLi9LcYHTm1smImts7h00hP8Fs4OqQ6eA+XvyV5nJGGuNy1ADAAp0CMtlXoc7QQwj7wLD3Z1TLrqPclFkcw8Njrms0KJggcK1q/CDENBnhjAMfd+zWZIlablcd40My94E7ssRAIGkAOEpY4xSMk05yxLfD6VSzEgMqdZNPyAmItOLO43mDIBCRGtJCEFscQhDEJF0HYmHWqDB3Tn68qKUccXMQCAAydp+v49SBLUq4P47y/Me/tn9L7c+ddqb4Za2nwmpGZBh0OtqnXhegIKVklprIV1HBeFaCOWlY55nrZVSuboIBz2VUsSGTMaWmAAVsCFwME5KIBbSi5NESeHqnBBAKg+RS+TqnqWOiKnW85TdMHIa3oYlCO49OsuSQZwmCQCEURiEoed5eTVVmegXAoUo42woZIu7AIoIL//EOSUuhUJFgCyEIgKQiALdAxUBtI4NE6lGbeIQqwpZUkLsbO0t31rc2972lJKe8qIwrFYq1UoQBMpTUimpJEoBQgDkIgFE0FZnOmYwLuPCzg+3gPLl5aOi629RAkglZi1hrttyDntI/lHC2fKdOTAYugettYPB4OKF81LgiePHm82mlEG+qhAFc1xEUfk9oqgLUlj07ZicnNzY2BgbG3NQxpFtROQHfpql5SkZYwIvZKU8TwFAkqTamKASJEmSs9rGxvHADwI347rdxHFca9SYOIkTlU/qKgzDVqvlVmNhGFmynlKVSiQAgyCo1+t7e3tcuIe6e0IIEYZho9FIkhScvzBZrTNnMoUAAqgeBmQylGp3kOgkGa2EvmAGJBD9JFvvJIs7nVR4hALBohQ2r0gmQJZSGmJXDORq57GQoucDJaUUElxjW2MEYqPRkEp0Oi0HBOM47vcHcRK7a+PuFlfO6VLSDuIQkRNXCSGDICC2wCIMQ6211joMw2EUVZrPObSUuyQym0z/1oqRv8v2RWz87yE2EMBoc2dxMW7ttPdam5tbtWqtXquMjI+NTIxNz8+ur20gi/bu7qDX77T2xienDhw9xIZardbWxkan01m8dt1a7TGdOXPm+Vde2dneHBkbeelLL79z9c7IzNjhI4fO/uCHnX66ubnTy6w2FlyxDIDyJFkySf/ksbmZEdVvQ5qke51eZ5DESeoHqlKtZNpUogCYN3Y7/9P/7z8tL639n/8P/+13Xnkm6/fvLN2amZq4fukygtju7D7/yitRpf70iy8wy93tVtqNJydmNxZvvf3rN44/+MhrL72ohOw+8ZgfBp1+b+XG7SSNN3d2Pnjn3fWllQdOn37ipec21jYG/UEQhAcXDnz01ltXLn762HPPNyfGwih47fvfPXzqxE/+7C/q4xPHjh795Oy5rNdfuX37kwsXn3r2GWtsVGt+7Xt/MDk68cnHF2sTnheE7bWNbJANev2f/sVfLF6/dfTEiZe+/KUP33v/1GOPNkdHlm/drkeVzdtLd9bXoiB85dVXA98/+/H5xFJYb25uXFpa2RibGAeRq26Ji6YO917Xu+ych/9QqLStu0EYCB3URQDH24GwTq74X/uIuCeUnLQnR7ooDGFq8jYlKFi4BsCfBceHQYP7/Z6vZgTX7ck6qd5dWgWAfQ1oORgl6OSilTFZo4ktkRkuYAeUgBIElotYRmAiCShKdqrkJu9TT/4GXRAzAzMqEapACKGkYhAEoCQLhVL6WRIzGaVUEmcltHX3tVu4IqLWWiCSzQ/DU8pa8pRi0uhEz8AEggC1Nn4lzGwWJ31jMlEIhYlICsW541sObS2RULLE5cMA7p6zGMa+SkhtM5PquD/wfB+UIGZxz7qI95Fb/pei+dnwV5e/lfGwv2BAQKJBr4f5c84ChEScqxEK4hCKlLTzkdQ673Pu/rU6E9LRJtZpcwUqIAOMRDZUERmNCKnJnK2AEMKJO5VyM4YAADdPfcZlvXeg2DG5jukwxqRJOhgMdJahFJVqNYxCpZQoyiidfOjeL/y8MLprw9ymTQAW3mfkXs3LAwUSx4MYhZg6cCyoTxOxRDCJXr2zsr68ooQIPN8LfD8KgjB0/ylfSSlh2Fk5l/dwqhNiC2iJnU8IKiURwC0qhtel5Q/lr1RYbZZy53vQ7TBQLvEAFKS4y2bk05kx169fX11eeuzxR0dHR1xZLQGoPHhAiH0u2UXscN5VuQQoM09NTW1ubu7u7oZhqAuyDRh0pqUQ2lgiiioVFBj6YafTds4RQkhAVEopz7NaC0BgTpMkjKIgCF35URiESZYaZw5aJGcHg7jRaACwsSbAgJkd3RVGUTyIG43G6Ojo6urq8BUuaapqtVqt9uO4L6USKJgo01pKoaRgtoHvCYA4NbHFVq/frFV1lgTKF0Jtt/tXl7e2Y21VHZgBkGjfSy8XgBXXad+/BgCKjoXuaUqWHEBhZuV59XodEVrtdqfTEUIQWSoeVc4Dyy3QIScFc7soIosqDynf8111fukhFQSBKTZZ9B1w2KhAQirTyT2P3b/f7YvY+P2PDQZgCrxgfKQC1ejwwUO1ar3f76+trrb29ojo+PETzXpzYX5hZXlpY31td3urtbNbrTdGxscazcbJ0w92252t9XUUsLm52drd1Wny+k9+urWycuz0k4PB4Pjh4wcOHxqfnGh1l6NqZW+w5+yGGQUhOgf8yBcKsjt3ltdXVxAVqLBaq3cHSb3ZHJ+caDZrs1PTSuLZyzduLO88+fDJx47O6UHr8AOnJ+bmbl+7XBtt7O5uXTx/4fDcwp3lRS9QX/7GdzcWl3Z2d6fmD9y4fqu9ud0Z2/jwl79cW7x15NjR0y+8cOa9D5oTE9zam184+PE7H6wu3pk7cujJr7wkBL727e+QUrXxyaXFOwHKqYmJX//kxxfPnP3qt785OtY8dvzYI888NTI6eunTKydOPbC73ap44cbSctzv3Vxafem1r3fWtw+dOPr0V15dW1lpjE+k1XT24ML5t9/ZW11dDdSbv/zFzes35w7MP/3yS7/+6S/atVq7361FwQe/+vXMkSMnHjn91PPP9Ac93w+Tn/2aGJJMu2nHiTy5mOTuuYY41FqzNOiAfTEDIufWSgzAAtG5AiJA7rUOzKV4AMCRrL/jtHtXKJWwUgCQo+pTbZDJKhICFeZze/nl1lLJXeVzdmGqnN9rBWVLeXY+V3HcDcZcptz5YeV++0MwGJ05H1gDQFjIJIr8sUBRKCbdsRVw1nWLHUZj96wl8vmbPq/VAjiaMIpCKRUiEoEUEpCFZGLj2CpkJGIUwqQpFinXYXbK4SEphfNsQkAAEghEFi35gfK8gJgtQy+OwygQyDpLrdUgfABAdE5hLEAQkARZLgWISCi1P+bDLPvd8Ncl37CglsmaNI6rEyNCCQvkEgS/OTbcqTBZIgApnL/B8C7uXT8wdTsdpaQQiEpYsq5Owz0zS0SFhSq0IGTyR2jeZIeZrJFCSuGEthoAAKQAMDpFBE8pxEhnqStsZEAhpCvHdPcRDbWTgCFUd8/PUN6DQqAz1YmTQa+fZTqo1KJK5AW+lLJcKQ1vudIc8uXB5991XGpycg0zIroKYqbilgMnwu51u0FYmZ47zBggZwLE6p2V61eua51F9Vrg+34Q+GHgh4Hve0p5AgUhKEQQTuALrkWbIW10KiRYYiLnOIFCfG5fKi6bAIsc9OPdCQE3TbupivfTpJaZnYQPijVM+Sn3183NzU8uXjxw4MDU5KTn+blOn/fXZm6mLuUTXMj53C5UvlwiCsKgOTqy29pbWFgAa5WUOtNJmgBCGIbumeHailgyYRjkx0qcpLH0hO/5qQUUhpidK0cYhr1eXymVZqk1JvB96StrLVmXKLFxGo+Nj+229ligUNJk2mpTqVQy3xitgzAIwiCJEymlHKIbCtKuGSex1uT5EhGtMVoLQJREnpTCEwrsWCRqUAObCk8Qizgxq530ykanhwIUs86bTrJw0mkWqCzbvEFQwRQyMVsrpPKkcv050jRLsoQsU16/yiBlpd5kFK29Vq87yBJtbU71Oe7T8XAA4HlemqbWWiU9gcoYXdy36Hme7wfWmsFg4OCLw0Baa2c9S4U6HgstJqIwRn/uffF33r6IjX/ssUGwP0nfe3GLUiIpcLRemZwY1zqpNmqGYebAPBF1W+3O7t61Ty8D2MnZmajePHL85M7ubntnN+73sniwvSq8KBidmFg4dnR6ZnZrba0+Oj42Od155wMhPRJKG63jwZn33qXBYHZiTKKINd/abFuwSEZJYRmRsiOzk2lvi4zxg5BYdgdJu5t2ulk14tb2rs4G8088sry5t7LTGWtU/uX3v97Z2rCDcBAnpx959OTDpxsjzZ//4EeT45NZkl49c17Vo9mFQ8vXbz38+EMPPP3Ez//sr6qNsQNHj1z75MKtK1da/a5qVNcXbz3zwjPjczNxv7+1vQEMC4eOXD57/t1f/Wrh8NFv/fE/Z50++/zzrV5vYm7+7V/9yq+ElTD86X/6L2vbm69+/7vM8NCzT5966MEP3nprYnLizs1bSoXMQhK9/uMfeWF08MTR1dt3jj58+tADJz3lffDrN0jI2fm5m5evXrl4eWdjqz42kln70je+cfnCuZ2V1d2tRZslv/rhj/QgOfXIA5PTY77vKyW00ZIFu/66OdeIw4JadEsFQAakohltieRK4FlkQslaYgZkCWUG19VrcsZMiITMQBbR9TErjWCBgfm3IBnAogcROhEAI4BgttpaV/dFKPYZVmYmgsIHAfZfLdO17mYTAExIuaMBsAC8p/kZshMbICCw4FL86dxV2Bo2GZIBBC4MJorPC0BkR3re9YX7B7OPqBgEAxNhwT+5g4OCALsf6iEKYCAWSkhPyTRNozC0xiJY0sZapZRMU53ozBptgbM0rQQhFjkiR+gKIbTWSklrkaw1ZIkBpZJeACgskbVsNVvj5vNAKS81SarjKKhaC0oBMwEjCUYCC1RWvYuc2sdy9X4/c3lPfoBcLS6xSRO/GuWDfvd5O0k05d1zXBcPECgYGITgAua5uj3JuJ+k4KI6jQEsdDstlAxKuHvB/cfMQiCAIwgcGQHMaK3JCwSFcIaMxGht0SODiQEQpNNpSE9ZNkKi0bEQ0leeW9JYYwgQhWIB6Ax8gsBRmMMnyEPpdUcnlzJwN2KU6qSf9AeJJm4EUTWMAqWElIyF5wjtqyCgXOOVe3HSIoaiH6HTVReUOOSjRCAAXYU0AIq82QlaMHqQJDOHH/SjUYtWoWqvbX764Uf91l6lEknlCV95gR9GoR8GyvOlJ7EgsN3VQkAQipG1TlkSW0JG14hDCkE5+VXKEtzlZgdYcxVBIfyAQr9brsPdiLmoLskpKKAqDBW6oIsfgd1O98L5s1GAR48frjUaKJUQshgwLNI/eX1n8TBxBwaOq1JRFAEAMXmet7CwcO7cuQMHDrhjdWruElkX8hrsd7u1et2h7CRNlKes1kFQ0VpD0b8uTdNKpVastNiJ61EKY4w1loQrlsywWlFKaWs9z1OeAoY4ToQQ3Tj2fL9Wqw/6A7I0jO7dQFSrlWql1um0ledh3tzOldphmmVaGyQaqYRGobVWKJVou92Lr6ytb2XaRFWjDRlDzGDZaE2Fz6hAYYcSaFJK4QnSRgohhSCiuD/oDvpCyiiKHNnpdiqVqFSqSZJmcRInicMrRe0huCau5SUsEysO6zhs57CLUsq1wK1WqzjUUqt82iqlypaw2mRlgeE/xPZFbPz+xwZzIEXoq9be3u1bN/a2ty3z/IEDhw4dmpwYR8Tr168z2Tt3lpRcm52bm58/MD83O+h1N1bX4n5/b2u7s9dCqbKHHtza3Dpx6uT41OTTLzxTGxlpaxVnab1WXV1aDn2/Fff2Op219a04zRClRAUgSOtIwMGF6X7L7uzsyL5aW9uWyo+TRHkiqHhJuy2EvLOy9da5i0mi/y//9r//8pdeOP/+O4P+oLvXOfveeyoMvvzqq488/khtpLmzvaOBZ8YmN24tvf/m20mSBNVoZGTkO3/yx/XxkQ/PfETSP37i1Pl3P/zo7ffGpib/5H/8V5Qlz730Yrc3OPnI6bd++fNeq7O3vbN589YHb79Va9Se/epXmhOTjz39dCfpk+etbGyGUSQ0/fV//A/TM7P1SlCrVo8cOTp/9OjirVsp4vbu7iDJji0c2bh1+/2f/7w2Onns9IPpIH348Sf80J+cnvzk0/9CxNOTUzc+uXz+o3PjtXoQhM+9/PLftFue5+luf2+7tVxbunL5ShzHzZGRjZ09wMpv5+QFFoZMv8sFz2vPUEAu9EMppbKkwakCTEpkhfLvNj36zKPgz/0l/wgCCGJriYUrpS8mIZfwcY2RhvDkvepWdiwt7xtMMDHTPgUGAMP4uxREIEKe87QWwH5uTtgV2tzF/X72G4c+sZ+W/S1vBXeDK4EohAw9z/XGIUIl85yssVYIERttilm/rKzifC3gmF0hhMsUoxBgyTmL6Rz2WDLasuVutzs+NmY5G8SdSjBeDFv+nwMGvG+jmw9c8etdDGWJWpRSzr7GgVdGMEanaRpUIshbnN2Dc6HQkXG5SxSFc2rZB6RgI7lYn5XliwIxS7NWqyWVNNZ4hET7MuLigSyIjMtiAQARSwm5wKyoXbbWOq0zuHIoBkRQUiopu72+5yspXB7DpctR+b5gMtZYS4LJk4IM/YZC3jIShkfAGpOm6aDfHwwGUnmVSjUMg5KqHBpeFE6Yi/l9UVjYMQA4Y/XP48j3I7CofywaxzGiyLIsqtYPHD7BKCVgv9X5+IOP1paWQj8InLItDIMo8sNQ+b70lPTckBQF0AhOx29IW7J5P5ACgBYsqdsnDzUa3O85MrwMKElrN38NM7humuOhnkdQ+FQMs8XW2tu3b21ubTz1xKONkaaQUgqFAgsPwH0xLhRSwLt3DYig3J6CIJBS1mq1er3e6XRmZ2edRVn57jAMXcdXpVSlWnUKRWutq8XJskwpG4Wh0dqYjCxZzUFgwjDSOiWy1lqttfRUFEVJHFtjoyjSg36/369Wq3GSIKInVRzHSZaOjI01m81et1upVoQQxMR87ypTKVWv1waDvjVG+MpdAPfM6MeJzUgBG5NYowkxsVkvs8u7rdvbrb6stLv9QT82OtXWsiGyLAT6flCtVj3PEzIX5bgrZ4zxpfI8bzAYdLvdNE093/cjv1RnushwV8j3/HQwcA6pcRwrpXzfT5JEFNJsKHJS7hq7NQ0Vgmu30yiKBoOBKzMqzzfvc1M03Irj2D0Cf4dH7X/99kVs/N7HBjL7nkqTRHowMT42OTWZWr28cifp98IoOnjk8JHjR3wvvHNrcXtjfenO4s7OzujE+NyB+WPNBhAtLy239lq9dnt9cemTS5/WKtH5Dz/a2dz8yne/02qlAsWjjzxyeKwSa3v1Z6/vdjrdQUzEEhFBAKFg3ah7N659otPu8vKqCsJqvRJV6oSi2WwePX5w484yierlm6u7rcH8WPXU/HQ66D71/LPXr9wwqb55/fKx40d/+Od/ttNq/eF/98cT05Nf+s635+fm33vjLYFyenzqzK/evn3n9vf/xb8IYu+Fl1+yjGPjYz/5wY99qUbHRq9++uk7v3pjem72te9/f25u7ublT01mTp5+cGNteeXmbRn5Rx964L233hKMX/vWN7Ms21zbCIIgTtJsEM9PTn7wy183xkavXrr88OOPGJN947vfWV5aWT26fuiBB5auX1EoRkea67cW3/zVG/VK5ZXvfGt6dvqBhx7am27NHFz44L13RmrV7tbWuQsXvvqNrz/2zLPT05OfnL8Ya1OtNtc2NwdJ1k+5Uqvs9H/bFcS87go+r1fC/lsJGJkJCHPKSOQLJOFq0gkQybIFssKwk/1A2dfqHqvPz98XAggGAgAUAKKsznZumoVKoSD1irMYorTEEHTNZYs5x8v7VXTDadzyizAn1sBaY4yF3N/sMw/V7aLkyH/XBykV1Ta/w3sZADylhEAlBPp+HA+EQGO1EKHTUzHn+MAV9dqiWwEAOGmT25e7/R0jYK0VUuUWEYhGa8/zjNbWWLak01Sg6LS3xkcOIHrMsuwFWQ61Q89CSS5e2X9euUEpMC4MsbxuPWQyY4ca1twHcvOyXS4r2DhHOSUMEojk0EkxRsx3CVEYIMvSwaDne55SkpiM0b4fDRMrxmgu+rq5BBcU31NKuVzrTTcZWWuVQDIkpSRtfSmVUJaNtQYIhFRK+S4cAj8gsiZNAaVUiAUfgZ8FOu8FvgBMnGVZvz8YDGIlgyiKfD+UUpXvx1xgITHXwjHzXcmSYjT4Xp787v2iy+RgsTCjvMbUEswcOORXqgxCx8nV8xevfXpZCOEHvud5fhAGYRBWImeUqzwvP5IyNnJPNzI6szYjsG6KLTEuQL6ccIRXQaNiOVVBmTwquuthIcx19E1Z5weFG8M9spmc2WVO02R9bfWTCxeOHDkyPT3jqmIA0ClAyogtbxlED2Bf6Vs+YVS+VwBncjQ5Obm2tjY9Pe3uKxfuftHGSRQyYSJyk6uz4vekEgKDoNLpdIIw0Jn2lbO3KG2VyBFRlUoFUTAbY4xTMVZrNSllkqYGtUAMggCK1VitWvU8zxoDEkoo4DYpZaVSiaKo3+8pzn0riFgzx5m2xGg0MVttLGMKsNXure92exZTRGAR+YER4JGTRoHrJNlut4UQ0vOqtaorewcArXW/0+12u45jD4JAeV5ZeJRfP9dFE9HzPUTR7/cHg0GJAksqzqETVxHvwsX9605tOD3k+oc50s7domUpbpqm5XpFKiX+IUULX8TG701sfB4hAcie74WhH/qi1qiOTkz4UaikQqKttfXtzc1Gozk3vzA7P1utV9aWV0ySba6s9tptYp6anp6ZmztwaKG12zapnpiajqLqras3sixbubPy5kefsqWt7e2pyuRDjz1+5uLlO6ubUnnMCQhiBCZbCeRYzbdZnMY8Pja10+5agHanlyZpMC5DqRpTM8vb3aW19YavXn78NMXdKxcvHDh4cPbA/PjY2Nb22tjExPmPPlahf/PS1Q/efmd+4dBjTz7xwOOPzB09ODoy8sH771aDMNnd+fO//quwXvvun/wJED/z/LN3FhcPnzi2snh70O4up3pvd/fTc+dq1crXvvPtow+dev2HP/QbtflDC0lncPn9s0GtevjoseWlpYnJiWe//KVbV66efuZZr9Fs9y6PjI7EndbazdvvvPNetTa2urz80KMPP/ulL/+40+7Fyczho1ubW9QfJCZbX1154xc/B0sPPfnkU88+s7W31dtrJ1pHyrv40VlRi46dPP74C8+1dlvT09MfXTibaLvViiuVAMD7zHuzfMTn2XchHGtGiESGyN6XSyYAYCAEycxgiZ36wU0FiEL5AJrIADAiExlgIpRKKZc/LNManznfAwBKAVzqHFAiEkgGIGJDGqwVwk2W+yeQ2x3cpwgtc5EATEyWc+taAnfgjjFy/rggnLMpgQBUQhJbY7LhW+azKnwQUXBOPApmKMiwuybOUiMrhEDOeUQuNMSfh3SHUREiCARkztLE95SnpCWSKMhqYLBaCyHSNHFYDQsWigurRBia+EsCLF8GSyWlzHQWSqW1UZiZNBWVKlsrPczSnrFx4Ck35kQWh7xd3WatlQWRVp5LmaqCghsrD6kYdnQrfCllMbJ3PVsKKMsFGw3lB++F2sy5xTEWGlWHfoiSZJClaaOhnBuBU3mWakt3MG56KtGSG6Ly6rg/leQuIpIFtpqJM5NJKU2mlS+FQAICJp3FQikQAlgiADFnWeYXTo5YbO77hxXwzFxmFBjAkM2ybDCIjTFRWA/Dih8EOdrbD3xE3F8MYN49VLhwH/5mHA6pIpTLOBFCENtCzgAAwEjCU9VKiCjA2OXrtz49ew6MrVSqQRCEURRUw7BSiSoVPwql76ES+weULzTd91trEwZjifJcStE8HJwaB3Kky8VWTj2lbgGKNZLDBmXV2jCVU+oWSvBQjk5mTH8Qnz1zplmvHjl8yA9CZwVvtCmfD7kvePGp/Frs96rIB0ohYhAEQRi6PdVqNa11r9er12rW5HU2rrOUI5/UECfsMhpkrTMZYY+jSqXf7xhjPC/XXtRqtXa75Wyk4jQhoqgS6SzTWtdqNW20tbZWq7X29oKo4ikllMyHTIggDKWUpiDPhuMMAHzfr9frrlNXjgaYraXdbk9b4ixzlaTa2HaatfrJZqvXS41X8VWkkClJEyaQqBjYYQt3nyQ6c82lfM83xvT7fSeNcfYCnvKkp4QUww+70qtFSimVzLJ0EMfuurpjc3DQ1Q+51x2H56RXLrfiqDv3+JBSpmla3lFa60ql4h6F1tpKpeLW9/Jz+jf+fW1fxMbvfWwgMJD2PU9KunLp8trq6qlTD8zPL9RqtZ2t7cWbtwb9+PrVS/VGc2pm9tSDp+M43d3e2tveYmNv7FwOqpWJ6amwUZ89MD86MzV/YH5jfUP5XlStbWxskDbXL1/pLV/XWTZSq85Nz1y9vUnbHSkIkJjt9PjYWAPjfrq1tRunZmu7XW024nhAWksQq6vb1zZ2Vrd3G1Xve69+6dtfe6m9uy6Yrl++MjI6pudnX3jl5fHZmcufXK7W671uv7/d7tf23vzRj28uLn71e99eOHLkkeWnfc/f22u3NrZGEZev3Xjz9ddnxsZf/Morx0+d+g//078Losrh48cozc688aY15qVvqcb42MzkzPz3vz97+NCZt98FxPmF+e7O9rl33h2bnhobH1u8fuPp558fDPpfmxi/dvnykROnrl++0miMbG+sn3n3nUefeOxCGNk0e+7lVx574bkf/flfyiCsTY6ZNNteXE7jpFKvJ2mMxF/95reWFxf39vbiXk+x+elf/SAexKcffvDhxx7+5NKFN8/eMAyDRIP6bJh7/+Zq3qWUzpPgblxH+/8iIQuHZ4iIBQou/T4FGrQEzBbAOk9lY1wNea5LH4K499KfOeGKuSaYQQAgColsicAaNpIKN3xHxvJnfc/dOkhgAioK6Jj2VblFppiRcmYI84Uf6dxc4jdtCHna3LkN3MWcuYcJOTfa++qrPg/l33XYOSi0COCsghHYWiMEpqm70xlQEFGWZYHva6ulJxDAMiRJUi6Vnf7e931HGUjPCwLfaAMIvh+w1lkWWyJfoBCcZTECkTGgJJHNsiTw6+54hBBC5I0cSnQCiFz4rpcolooqdRhC2Pm/XC4Hcr/C4UfufUMwBOMQy9V7Mb7A+/A4R1e5YJsZgXu9LiCEYcCcSqlk0Uer3F0p8ZIF0nIrE0fBQEEQlnDHMQ7K96SUlOQQrRCzue4KIJAZKEsTIYRgZMuGrBR3acNKVDccCcPMorU2SZJBfwAMYRhVKpXA86VQOLQJIT5HBfS32FzjOnYJw/2FHEtfSSURYHtt7eL7HyadfhgEYSUMKpEXBUEYVqqVIAqVp4R0GBcEDg0vAwo0NjM2s6zd+rI86yHdAnLunZ/rbsupHwDs3d3meUiQwMMqxyE/wXsWWsZabeyly5d73c5zzzzVaDSV77u3ODxdhhIPqXvLUtph4I4olJRSCJmL5S0Fvj8xMbG8vPzAqQdcbsh51DlfpyRJicETktkZoMg4TgDA8z1DlKUpCuQcqhsppdZZFEW+79dqtSRNrTHdbnd6corr1O/3rTHWmFarNTM722g2KDNE5Ek/juPA96UQge9HUZSlKQ0VPIrCb9UYnSRxEPql5h2FQIDtTi8D4UlBlqSvyNIg0e1+ttUZGFSe9AgBUSrPFyA86bn2LeXo1AuHASLre17g+Vzw8258hZRlYxKRt8MWrg5RCuEpL0mSJI4zrQEh01rJvLuBqyjaZzpNLvxxp+M62SKi8rw0TYUU1q1JrQUAbQwKYbV2MZHnuyUOi2P+3rcvYuP3PjYchzDodRoTo2Ojo77ydja2OnvtkbHR6ZmZ0489arJ0dXGx1+n2e/HY5Pjk7OzJhx/c2Zqw2mwsr3banbXlNcMrS3itOt7UaRxG/uPPPiM9//jx4+9+/ClbE/oVk9n1ldWV5ZVev++oDxTgK0j7rTt7u7u7O+04kzJoNmrTB+Z2dnZ9wYeOLNxa3V7f2vMFHpkZfeSBQ4eOHjSHZpav39hcuz43NfPzH/34qRdfbO11Dh49+vizz2xubt65cWv28KHt7e3tpeXlK1duXjhfG5l46Rvf/PSjj0bm5k48eGpvfWNvaWX1xu3m9FSrvTc+Pj6/cPCRp5987513dJI2R0fnp2Z++ed/tbGy8sjzzx199KEDhw40/vB7E/MzH7z+hmA4eezYjU8/vXzhk3qttry6+uijj88sHHzgkUf2+v1ZIXf3Wkr5s9PTF959Z+nOqgzVyK1xP/Sf+sorR06dOP/++91etx5V5iYmLrz3we7G9szkbJIlL331K++9/ZYvZXtnb+XOMmVJa2976c4yIRKA78sBDalQ79uG/4CIAOzwk0BJTMN/dFd76F9mdq2vBAASEAqBAoXywSJZzaxzKMyWyEpglC5YxOdl+EtCqzi4nBlCIYAkMxnXC9QxqJ+V7y1+GFYs5OU4KIDgvnYWDIDIwCiEFIItWddd77dsWApB3aA5gI6F4Ws5QfJnqR32J+/813sRS4mSXUaf2QIzIuhM+55i1+YXMcticChFoCBB1jpthrUkJIdhkGXaWAsAHrAlYgThBKYSTKaFJUvk+QFZi8BWZ+ipLEmjMBQgpKfiuN2sTzj4gQjFYmBo8ArMuA9VmQUiE2OeA8uhiVszO17OutWGw8qfNbj5dyIXEGyf3s5/YMfC7YcR5roS17sakaDb6WidoAhdp5DyGEqM7pr/WqLMGCWlGGrJ657YQkhXn62UspYAUBsThhEzS18BMbloKQzLlRLEViqPyOpEO8sFIWXh21GM2OcIGApcxTpJk37S7w8QZSWqhEEopQIEFDlv6riPz/iGz0S+hRf0PRcOciER5DQ4cdkoWUiJIHqt9idnPt7Z2AgCX3kqiKKwVgmiKKxUwlrVD0Knx5VClvsQKACZgVCA0drpyJlBSkWFghFyUmkfX3IuTlDFxc/lKOgMNoekDiXd676qXE0NjScDIJEribFrK8tXL196+KEHpmam/CAQ0nOYnIXDtcjs4jOvMyuvAg+FumtfrKSUgEJrq5RHlphoYmz88uXLTlxujGG2rt7I82W90cyyzBjt+74xplZr9Ho9AEh1hojI1Kg2Br2es/Y0JgNAIhtFkRCCrA38QKDo9Xp5/ydrFQrpyTRNwyBItXWRrlCwpSgMe91uEAQ4ZLDiIIV7iOzs7MRJ3/eD8fHxvb29LMsMkwSxM0h3BknVtwDI1mpjerHeaMetONOhUgyCUSrJLm0C5ZUrcAmzEG694FmyoLxy7IjyW64cSqUUMYMlJ3JTwuX4OB4MBvFAqDoBoxDWGD3EO7oLYAtTKnfJjSUiS2RSrYnZ9z3pe6avBSIxZ8ZEQWAKVs/zfCEEwG8lLf5O2xex8fsXG+VkgPnMAn7g1WoVRDE9Mxd6ngXb2mv1brdbuzuVamVu/sDhE6d2trdXV5a3Ntc7rb3t0REvimbn56fn53a3dtbXNvrdTmt1XfjizNvvbG1tNUdGtre3O3t7Fvj4iaOvvvj82Pj4nbXtQXzJsDP9F8x0YHq8gXEgp7qDwezo2NZWq96shp6o+HJ+buqBRx9+59O/nJ+ZmhutPHhoxmN99cKF2cOHH3/muVq1mWRpb5AGnnf2zbe2Wq3J+Zl+t/PKa68ePH7qh3/2ZyPTU/V6440f/6Q6OTU9NzPotL713/w380eO/Pg//a/KD0bHJhr1+i9/8sN0ED/w6BNRvTI+NvrcS69UxpoGaHV5iY0JPP+nf/ZnNz+99Nizzz959Nhgpzs1c+DAsQM/+C9/fmDh8ObKGmv96x//tD45npmsEoUvfvWr5z782AujcGRku9XyA79aid744Q9Xbt4+8ujDTzz/1Pjo6FMvvUjAMvTbu3v1am2wt/vm229/63vfPXLs+MTU5A///C8ztvWRsbW17eVb6zrVkS+rvmrFeDefOAQji6KVEowROOWjEBIZLBezCJdYrMxtFpJIJAmAzvEAJTKgAB8ILBCwa9tKAGBNigRK+SwkgwAQ9/ZCKA4jL3yGItXpQAwqZmuZkEEiSHc8OYU6jIEQuFxV5gyiABAKLWE5lRfjwAyuDYUgZiINNFzK83kbAmBO3xWcsqNz8xHCYWSWK2Dv5ywZgJwHMN47EvtICBGALenAD1xfQqtNFFb68cAtbqWUxiRsGVm4zhWIKD3fsmUndxAohEi19jxP+YGxLKVkIEYZaytRSMFCiDQZKC8izTrTyMIYsjbp9/Z40gqFDHnJXvl0ynW3BSlQAg7BOdIlYx3IZWbXwiCn4oABiciSJb5vFZ2fuLswDGQJCKS374WTP98soQPTZekCo2vLy4zMyMa2dnYEWmNjAEvkk6WSr82xJoJxClEpGMFYW0oCClwllPKZuexkyQxGa2ut5ysA9nwJhh0lKYQgEiiEE/xIKYmFUIqACu+9u+rz9p/57oyKDDoTmSRN+2maauV5gR8Eni+VcIV1rpsIiPysh9luGFp75U2PS1VDjmZhyDglPwjO7Xwc024BUIJSQqaD+OqFT+7cvCWF8AM/qlaiahREUVSthPWqCiOhpEAhUQoUIGz+1XkTNdCcpTphZoESEJj25QplbJfTbvEvMTvjXXADuL/YKzYa0n8PpwKwUO4yMBCABQGi0977+KP3pydHDyzMe35ErpExOTkJu5mWma0thLzFReEiz0lFe1FmUERW+SpLSw9O8jyv0WgsLS0tLBzUWmudgXMDxrxXUzwosAhRoe/Oz7zX6zWbzW63i4hKee7+cWpCZnalOa5UPKxEJtNOd4/MSqqYSAgRx3G+UAChlBdFkRSCjC2XcZRvnKUZAI6NjbkEijFGWCaEdpatbLcOHxi1pA2xBUyNjtMktcayK/ElsFAOjRD7TVzzwSoewGJf2pxLSTAXwuTLFs75MCykZuxyzVmWxXFSqVaNMZUwiqJIeZ6j6Bzzd8/d4srq3Yl4nmcBGQw6TxmlPCEssPJUGIauKMH3lZQyy/T9i8K/x+2L2Pj9jg0shGWT4xPW6CufXA4D9dTTT84vLGxtbnbb7fbOXq/dHZ+enJqaqtUqrd1Wvz/YXNv0PbmxeGfh8OGoUT/24IkoiO5cvSY8dfHsufHJOZPyuQ/P3lnv2ExfOH/h4OzU+PTEI48/+M75i976DkMfQIQKx0cqEGdZOiDmvb3W2ube7NzM+urqoNup1mp/+tc/vbOy8j/+yT+bGa0empvq7e7Zfnb9/CcbKysPPfIIMSlPVZvNjZ2dRrPW2dr85Y9/unDoUHNs4oHTDzz36is7K2s6hZNHj33y7rtXPr3yyre/JaScnZuf+t5Mc2ry6uVL7e22kmpyavqnf/mDG59eOfXgqZe+/rWtzY1Tjz02GCRTM3PnPvww2evp/uAXf/GXy3eWXvr612cPHnj6hRemp+be+sUvJiYnrly5dvjk8Y/ffGswGNSbzcVbd5574YWR0ebVq9dBSOmHu8tbEfpV6f/yL35w6ey5iYX5b/7T77PAG7fuSMJuMgh8f/X24urGxp/8m//h4SefXF5anj20cPbMh6nRcWKAuVKNeKA/j0D6jAvqZhEuSsuFsJbo/gw+OlWDk7cSk3XNOlyoChSoFLJbWZWJZiCiLNNCkpAeSmdH9VuOxx25QBRSWCZmtsRSKMCCotqvH0W4+zS5UNQKgYyS2ZK9H20CuFp5ImfSxJ9NNO+fec42CenytEz3vgHvdqr/Td9VbJ934u5IrKUs02StEMgAZWlXlmWuIocsFbyUzWt0iJx0oZSfWksqLxMkpXxDmUTJ5LoegDUGEKQnLVO312k0GsrztNHGai9AIuFkUwDOt8EBBUYE4Dzd7Ag2T8gSSgoh8tFC1ywaAYGYEEWZsMLPyjQ48FqEIvB9LPJnjiTg/t6sNf1eV0q0ZFxHiJLKdXOKMUYKmVfjCeEercgwJEIQ1hKi9LxcLeDc2RzWJ2sR0Noctzk2l5mRBRi2mpWvyBAAMoIlE+0rY+/94Z7NWpvprNfraa2jqOrSlbnjmDtTByaHo2YIPd8dP7+hAu3eLf8GIdCTOs1uXb5669JVsBQ42USt5keh8ryoUqlUqp7vOZP6fApDB0lF4V8GWZYQ2dzDAfME5vCOhmW1OFShOHRWOAw62fWlG+pOX3rGl/caMzlnZW2NybJPLl7MsvTxxx+tVqr5khFzs47hry23ctdUOHJA2W0YQMVxUkHlmuklSeLePDk5cfPm7dnZOZePdc2ogNnzfScVgkKXGQRBr9dz7v0umKrVqsPyw5J5h5PcuLgzrFQqfdtz70yTBJhl0RXDlfYHYWisrdVqSnmZ2R9lzPMXNgjDOB20220oJDhSyszajMR6N2Pps9GZ1WmmDYNmtoiEoKS0Q54jWBQcuGtQjtcwtebGVA71a0ZG6aTzd08/DosIIbQxDr1lWeYenFQYajg8VyKzsnzKZc9c1xAGtsZ6Pgop8giTSJYcYnNhx8zGWry3/Pnvc/siNn6/Y4OZpUAyZnd3x/e8eqPR73bu3Lq9cOjgwsEFa+fXV1a2NrY2V1d7nc7U9Mzho0cZ8ebNG0h6c2V9485yajQhHDpxItbJQ6ceqlYqo9Mz2SAdHRvnrV6WZt291s7m5uLtG6mOD8xNiYs3AIHJjlaCjZXbaJKN9TXDkGY0NtJYmJ/d3tzwlb+23bu6tPbw8YXNWzcfnH/qoYcf2Ntuf3Lu/OjIyOVzF0PlLy7dee755+cOHfzKN74upei0W3GSNJvNj371+u3bt//43/6bqanJV7//nfpE8+x/+bjWaI5Uqn/1H/99Z2vnsedfeOz5Z7vtvedffjnWujLafPftt7JOb31t/erFi5fOXZifmnv1my+kJm1OTiLi1Nz026//cq/V3l1dOfvWmzNzc0ElfPbLrwjEVr8b1iqbGxtHjx7dvHPn4pkPR5s1Zq5WKl/+9reSQbJ2e2lne7s5Pn7hw4967U5nMLh28dJOa290bOzFV1659Mn5pTt3jDZxt/fOr9/cXt86evzYy195sdvZvnJjSd/e0QzdQYpl/vh33sq4ZZc3J2bcZ2KK97j/EwMwIxAiGAYhpGIgFChZuRovsiYnZ10dubUMLMFjVBIFD8/9n388EiUIdg5flpwBGrNAAU5Ud9f73dqy/CwDUk7NfNaJsutvAfD54KN8v8vxAoo8Sc48rDUuwNZQhhr2p0973/l9Jgwp510A18mC0zQ1wvieR0TMTuycs1xEFIZhajMeyuQyM5G1lkv3AM/3rXXWrwJQAIK1xGAD32eyjGiNhpC1yZRRaSaMjTzf0zpN034YjQBIImbQstBfWbKAEhkliOFnWtmgIIcsQkABVtyTCmkfVdwTk3c9En/LddhHJOX35OsTdE4Faa/XDcNAKaE8dNoXKuqW3EoAC52Y26Mxhi3RkDMaABBZ5n1nVge8lFLM1nWVs2RF4SkhpURArS0CSqFIgUDndEvlk/8e6HZPJCAiEWVp1u8PLFnf98O8x68sG8Xly8iiHBBLh5Ayh+CGt0xzuH/393X3yJb2DMwMoIQgS6uLSzcvXdVx6nt+EIZRrRJVK57vh1EUViLf90vrjeLoBToNgKNsWKdZwmwBqDjf/GJxQd+WM2AZse4LuWj9IFVuV1eO2/C1hrL5s8itjguxryVLgLS4eOvmresPP/LQ6Oio53nWPaQQUeQugcNKwvKOK18s8TQAsLEgpWo06kTo+X6app7vMVGWZZVK1fO8brfrmlExkzWGPBcirMlKKRz08X3f81SSxK5QNAgCz/NqtVqv13OWdUEQpGlaq9WyLCvZLG00SIlSOEM+YBj0B2NjYy5Gfd/3PC9Ok2aj0drdk1IIKW3htFKOVL1eH8S9OI5LJs8XQgnUJBZb3T5zRUkk2ndfQsGAWDxbyzUr362PFvfpZsqbZCis4d5XissppXRGg71u1421tQYhL6QtMVOZLXJnlKapY/wtWczX3Oy6XikhpVLMYMkGng8ArghJKcU0TIf8/W9fxMbvcWwUjwas16qDQX+z15+ZW4jC0Ghz89qNxtbO2OT4/MGDjZGRjeXVdrsziOPN7Z3ZubmJ2amJybGJ2dm9zW01iJeXVtYXl1ZXl00cry6tfOXb34r7/YcfffRaK5Hq0iMPnz794APdXndpeXFp8XbcjxHQE/DgicMeJSbz9lrtil/Z3tqdm52Yn52IKtFWK7nw4cfPPvbwwfGa6Xd67dZHH7z/6ONPPf7ic4N2Z3llORvENz69Mj05dfbsR77yv/397+3t7AzidHJu9sybb1aCYOXq9Q/ee//lb3994cihJ557XvlBP0t21teFJib68V/++e0bN46fevCb3/r25ubG+Pj4ljYnHnrw1qWrn75/dql5c+7IwZXVpeMnji98+5sIxELMHzwoLC9evtaMKn/9v/1vRx44aTJ9+pGH5w7Mr6ysTM9MX/nkcr1SDX3vzLvvgfAPnTi2s7k1szD/7KuveL56+41fGYUHDixgai6/fwY8cfDwgk7TV197benOHX9jPe0Obl+52u116vVw9c7yyEhTKLQZ9eIMIPpbYVxmHl5fCSmEEgw0TMnAPnGWB4mbuxiAQRNIB6aEkJDPu3ZoTme21lgrhA/Og6n822cJFt1HwE2mJIlBW3I9lqDgg8u8CNwPVTmHTS6/cs80n3//byOVh04ZnA6APudzokRdLnE8pBcpD2wYz/2GS8PMLgltrXU8rUBERkvW8/Ju50KINE2dDsAlwVxrQxQgikLSKIq0McxOXCu0sZ4npZIITMYggjHa97wkTYRSkMbSk5nVFYk6GXR6O83RaSAJ4FzdcihQKKzyXLF7pAhEhH1+DgsZSZ6iKlqglSBvn6++b6QxL/kq4OA9b+O7Stn2MZ8bXIQsTZOkpyQKgVIpP/CDIDBGl6lzqZQ1xg5ZnhERDfWMdSqFEl1x4QMAuVDE5tm2ISNet6oRSkgrhEDJaMlaNoXMp7hd7oa5ZQC4H6y1SZrE8QDB9fTxRelH+7faPpMn/w1vF0IgC8St1Y0bn17ud7oCUSrlRYEXBF7gB2EYVSteEDhF7lAV19CjAACQszS1VjMYB3OJ7j0MLmS1XDhylK8jolMjQO7OnY9MeU+V65Bhq/jyPVobsrbT6Zw7d3b+wOzBgwthGCIiFHKlstpN3K3rxSGLknsONZdMWUuWOFIVZk6SATArpaIoWlhY2NjYmJ2dbbUyIYTn+45IA4AsTbTWSnlJkg4GsbMs8X3f7Xhvb29sbMw5g0opgyBgZs/zHKRwy6Z+f9AYHZFKUWbYWgcweEhjUQwESinDMLTapGbf6x4REUWlEk1NTbVaLRfu/UGfrPWkYFBrnV4r04ECgUKA4IIJYABEIWW+mCjxBwxlqLHYyiGjwhaufBiXD4vhA+KCTfR9P02SQRy78nlryVPSkqsaIvdsGP4GV4WqdSYBhEKBAgEs2UCIIAjZWiEEMVlrSRIAuP4C7il5fxT+PW5fxMbvcWwQEaKQApSU9WpIxBvrm9PTk/Pz03u7O3Gvv7680mt3Jqamjp16YGNjY3dnq7WznfZ72pjd6enR8fGpAwcajWZtbFwQd/v9bru7s7G5eOP6hQ8/ZvRanY7ne0dPHH/2Sy/+9Kc/vnrlislSIALmqbFmqFD30/X1zTjVvd2tQT+enBlfWV+7tbp7e7V15ODcl59+sNdpVw9OV6rV1ub2mffeP3TqxNj42Lf+8HtXLl9ujo2Mj41eOvshEX+yMHfr9p1Tpx968IknVlfXxsZH79xe7my32hvbP/nw45mDB1/69jevX7h44sHTu3vt6bnZX/34b3bWNzTDsVMP3L5y5ZFHH2l+9SuT87N/+v/99yjEwrHDS4s3f/XDH4Vh7ftzsyZLXnr1awdPPXDhzNna5IRXqSStHqbZh79+Sz/79NKtRT+qPPHiy4ThXKfTS7JOu3/iwUM7yyvvvv6raHRs4cihve3O6Ucf68XJsWMnrly8mKWD+em5lZs333/jna9+8xvjs9ONsdGbV65mOmuOjNy+tXTug/PtlKpKJSkR2b9LQTaWVAfcDchc5ZkT4DhNIDMDATm+kNklqgFcoQ8RuhAFAGdmjwBE1uhMCFlOdb8h2hBRCESlwAKRNmSVVK7YXuC9tZKO9SwQrGO49r9peFd0999+w/5LjOuyLJ/3Pt7P1dw3u+/nY4v/F2+5HwEP/5plmRQyzuJKGLErdAPwPK/f7+c9uoVCQCo9YXJzwCQIAqWU0QYAPC9wY4IosyxzpWyZycjmjo2WWOvU84QQaIxOkkEUVAaDtjGpQOWYWQCw1rizs2QVeO588+o0IRBBSlU+aYkob/4GuXKhJL+JiO3nPF/KYijIl0iFhAHLv7tXrLVCoCuCHB7YJI6zJA7qwhVIKM+DoqG6MwjXWWZ5nx10uIoLXoCIjNFO5IWFHsMlFWFID0rWgsgRsHvRks2MBpY2jhElESgPrMkAnHJ4/7KW1GYZAI62SNI0HsTODT0MwjAI5d9fkTiWy7r7Y55Zearb7a5cv9na2QUAZysRhmEYRWEUhdVKWK0oTwkphzkUl+FweRsGy0xpGgPkvsau3Ho4vIslxL6abji36d6jlHILgTItCcMppmIql1Iaa+XwQoVIa33hwnkAPn36gSgKicg1bCRnvEYkhHB63BI63xUGQ4fhjk2hkIjKGHLSwDQZMBkhPSJQXnBgYWFp+U6v0wp8zymK0iTWWVKpVlEJAYKI3DNQCFmpVYlo0B8QkTPUkHm9Ta5r9MPAEA36fU8JRPA8ZbVRQg1swsye5xsyWaajKErS1BJTlkkEnSW1ej2q1nq9PhatodzjQEpBRFFYiWaqiJBlmjc3kjhGZKGwFSd39uLJyTDVKUgEgSAFSCGlQAHALGSesWV3090nuykHEe57eOVpQNzPpLg/i8IBTimFEpNBPx2kYRQak/l+BYCV8qw1KBBBuFy/LUxPXZZcaw0WKsLZ0KAAdAI7gQiGLPIgIQKwZITAMAjiOM6y7O9693z+9kVs/OOPjYKFyGvUhfupKHbWkZQ67XdBHjx8sNXqpslAevLYiRO7Oztbm1t7u629nb3J2cmp6ZnZ+Zmtra1uu9Pba68t3tnd3CKEAwcXgsCfmp6dWphLenFQq3th1O51/Go9y0y/17l27er5D85cPX+utbt79PDhi0u99e76gYnxzY3VLOmvbW4qL0yzdGSkevTIocXN9q213bFm9UvPP/LW22+Ojoz86//hX4zUK59evNhtdXfuLJ99551v/cF3ZmcnH/hX/5IsoR/MTk/aNLt87hwSxd3OwQMHnnj5+b/8z386c+Sg6cc3L1/TABfefvPqJ5cPHT722h8+3Ou2WUot5WOPPr545eobP/951Gj80b/+FzoePPX0E53TpxaOHXvv9dfZ8tTs9Pby0s/+5kfHTj904OjR0Fff++N/vrO1s/Bg3Op2iLFer5197/1E2/HR0Y3VlS995Sudbn+v1V04fuz2J5+mmZ2s1jfuLP/ypz/zlPfg048/8czje5291JrJseag0/NQbK+t3Xx/8Tt/+D31yEOtdr8xOrGxvkrAgFIzEkLoefC373JIJQ5DBEfAuYS38ogIygWYK3VHcjxL/qvJU/okmEGgkIhSoGTQ4OgtLsri2RJbJiRGBCmlQomOF0MUwG7fhVcBM7rOr6g0MhEZQ1IKBqA8N44A5NovCUQhnZ8XMTOjqz/L4dF++pZpCIwigCzknXkCnPd9Gdw7JQOy+IyWtgC5M5NgYADLACDA1fegcKws5jgDnYUFAggQSFwCYEZgZufaRa7hMoNEvHlz+YFTxxBBGy2lFEri0DRsjEEv74GcZUYpJSVkOhPSVyogi1L6KIRlNGQlIgBJgWQtM7nr4AW+1lpIZVKjImkzyyFbbTnANIvTtB+FoVuhO8uX4mnpCRQSEIgFs0ufs0QCYEQLLASWpOv+wptZ5LVZzNbiEFE7hL1c8VQuAgEHaqVwvXwZ3BgJzksUkRkYGci6q4uM8SDWRgs/NEAeS50ZViCck42nEDFJEmOtJyVpC3KfR8AhK3FE6cCT41OJWRsTBAFZK0CCAEaByE7pW4BjIpaeks7+0WhCtr6nqDCzRRg+46EpgBkYmMjGadpPslh7KgqCivQ9kFjWe4oh7639OSL3hSjpc3AxxkzITpnurAIRkUvepRhtdzgslNBZtnprcWt9HawFABX4USUKKxW/EvmV0AsD5XnS85Sn3KSRUyoocgNpIEROTWJZC4nOJ9thXB5yEBMCjSEi67KvJYea8ziupzHgsEPRMM+KhULG/dWTktgNnNXGGqOXl28tL914/Iknm6PjQkiyBCilALYkUFiw5bcNfz8XEgUconUdnjYC3AIOncWu1lkQBIiotTaGtNFh4G9urleiivvYYNA3xlhjXIU7ADSbDURM0tRaG8exkEII0Wg0hBDj4+NhGPq+jwjGmMGg75SFjjBnYpNpBDQm7z5QrVatNcRAxGmaWrKVKFRSNpuNWq0upPJ8b3gJVYSKUEpJqXzfr9XqKISxBpBSwGvrOwYlCiRXvIAM+bKKGVkIga6VuVvLCFFes6EnHw7v664A/ZwVvOMjlXLNytNer0eWBv2+S7gAgFTS81QYBnLISxmGyD8m1mWDWYC8l1UhiLFEYRgFQQAI1lq/6FPwD7R9ERu/r7FReCdZKUAADwaDXq9Xq1WN1devXLl142YQBMdOnJiemyOi1aXlCx9/vLx0pzkycvLkqUcef3xsaiqsVAaDwY1rN65dufLum28s3b6dDAanH374xKmTTz37zNMvveCFoTa6Wq1dv3ajtbV5YHZ2cmrC93CyUX36iQdm52aqjXp9pAlKNkebR44dPfHgQ3dWNyXKf/Mv/8ikg263P9JoLN1eNGRf/NIrB48czpIMCVZuL/74r/6q126B0V/9+muvfe97WggVRZPTUx+8997yncUbly4dXFj4/h//UTdJyPceeuSRT858fP6Dj955952drc3l24tPPfnUH/zTf3ry4YeuXb+mPDU+Pp70Bv/L//v/8+tf/DKqVU+cOvnQww89/vILDz795J3lOww8MzX5xo9+9PO/+evW1mZnZ+fLX3v16KmTT73ycjg+2o7j0YmJna3NT86dvfjxmTPvv3/s+PGXv/zl6YUDhx4+ffj0qY2trbjX7+20eu3Oz374w7XF5aNHT3zzD/6gNjZaGWl6YTDodD/5+NyNy1dPPvjA1775tYVDB5oTYyxVK0k00+ho4+9y/+YQDFEIZ6fgEGVR6b3/Lsrf62ZjS+zSC1zAIhRSKikVCjnEvTnYYokssXHegoB33yafKQsQkgC1cemLIVFAaS9VZDgRAZEFIn12C977X7snD4v3vs194+fTa7n5SLkDGjqJksxz33K/ROO+I3L4bXl5rdvtA4Ali3lyRrtp2MkSyJIQ6MBZ2Zbc83xjyBjLgEJIt3jWWislC4crJwURcZIYVybLkMSJTjOdaWbQ1hJTu7PLbMmVIloiYq0NESOiQHS+jdZaYJB5hxFGsQ+/eLjWxy0mhIS8vbD+zamG/YdkvurY/578Dc4+tqDa3fMWmPu9nlLKEfUChZMEE1GSJG6UPM/zg0CAYCImttZqY9x4urGVUiolSw2Y42uFEMYYrbUAZxicN4F3TdSllNZYD1ECAhm2NvCdPF3em0u4bxMopJTAbI0Z9AdZpn0/jKKK0xCXowF4r5z7N0zexfKQGajQ0ORakeEHu4O+///2zjwqiqNb4NXdMz0bDJsCERkIKBBAREDZzCcoekxO8jSebE9jiFk0ajbjEk9i9OR8iSYYzXqymc0Yj2h8mBM00SQGTYKJCyioAUmIjsomDDvM1t31/iimbWemm2EbdKzfXz3VPV236966dau6qhpyXP3l2lr9RavFSpIkrZBrEF4atUZNKxRymqYokrr2g2c2BdlqDQFNZiN/Cf/2kt+1AA24ok4tadspDNpmnhAEQZEkChj4wJe0feOTn2HCx7io/er5zgTLWK3W1ta20tLjOl1IcHCwbYNs23QqiD40cnU/MjuE8nCCtTQMwzAsKyNsL2Rtsx4AmjdtZcyBQUEXqv/1DxiJBrrRVlAAAPSWmWNZo9HIsizHsgRB9Cx7Z3tGnuVyGkLAMCyEgOM4YLEqFCqyZ5iaQsNUHMepVCoAoMViVql6vuqk1mjMJpPJaJJTJEGSBAQajYaiSALKGCsDbZNseoqVovjZORqNprO7w9htBRzgKHl1Y1Njx8gAhZwgbEuVkaFwEKCtCsHVamx7ycsRV/tJ9tNu+APhBUiYq2+oBdGM2WTp6ury8dGaLRbQs6qJ4DiOZRlKKe8Zz7R1JdGMFn7CFt/nvuZ5IUFSpFwus1KUycQRkCFcWxHcb7BteLZtyGRySkaRJOnj49/Z0dnY1Ozno2UtZkPDlbbWlqCQkMBbguVyqqmhvtnQfPnCRUOjQU5REWPHBut0Wi9tfV1dQ10dCWBTfa2apqtOn9VFhpNyymTsip04kQW/aX19U1LTjK3NCqU6fMzYti4LtFpvCQzo6jRwjLWuod7Q2kbKVRxrNbQ0F+z7qfpC7Yys9ISYiPrzVSnJybf4+0GWKTlxYmx09G0JCY21dVo//8YrBsCyXc3NP//+u5ePz5yoyJEht8yc9T+QsZq6jaEho3/+/geKJEeFjI68Lea28YkKJX1JfxFCbmz02JoLFw5+v9/XRztr7v9q/f3GJSbW+GiDQ3V1l2u6W9pJiuxob9uzc6e5s3N8euptCYlmYzfJEX5+vqV/HAkPDf236tzZM2cJAuovXUybMo3WqhNS03y1Pvq///b38eMY9mxZuZUjAICdxu7kyWnx48bt3fV/apWKYOGo4FtKjh+tvVhn7jJFjtHJNKqMadmM2QwBVMmVJ0/8ERBUHxl7KyEDcQlxXFWd9ex5SABvbzVoNA9CTYZorTwBAWcbH5K4Fu3RT6KxWQ7NbbBNvGNZ6GBXEELAsizgWLJnp23n4QAkAASoHynjGNbCsUqyp5XlG2++92ib/0cw3NX9HvoAgcIkKIwlCJJ0+GSxSCH0xGNOvmZ79ekcyhBFDXbdy85u4+WauriYSI5he/a6pgD6NDpqjxmWRQVIkj0fqlXSNItWzTJWGYBWlkEzrtHmM2jxA4rerkZypIykSIqiOMihmUsWi5kk5N3d3RzkCFKOlvDycSYhGPfi32JDW2BKkiTLMKRt0jTyfjKKAhxEbgcQaIMdyUjNVkoQ9mx+DHo2thD4TDT3m0CnCOQw0XclISRpOU1SJAdZWi6DEKKNetHHcSCAMooiAGBBz45g1wZwyPOTMhnJ2ooIPSxN01aThQMQktdMJ4UQQo5lGVapUFutLOAAwckYKyune/8+C8dBDnKM1WqxWIzd3RBChYJWqVTotb5wQKQPuyegcdCe7oXo5BwCAAKC5paWmouXzEYjmlgol8sVSqVSpVKpVAqFgpLJ5DIZRfXsLnL1vz1NBwQAEiSwWC2M1Yom5As3buc7YLaXtAQ/EMM3cIRtPIjlOHSBsCkk+Gngwh1tbUPvVqsFQsgwTGVFhVxOx0THqNVqkpIR/JsTGzIZiSJY4SMAmzHbTfYTRgLiXzHBYDAYDAaDwWBuWIZwnT4Gg8FgMBgMBjNc4DAXg8FgMBgMBuOB4DAXg8FgMBgMBuOB4DAXg8FgMBgMBuOB4DAXg8FgMBgMBuOB4DAXg8FgMBgMBuOB4DAXg8FgMBgMBuOB4DAXg8FgMBgMBuOB4DAXg8FgMBgMBuOB4DAXg8FgMBgMBuOBuCnMNRqN69evHzdunEajCQ4OnjNnzp9//umerHmefPLJxMREN2d6czJ69GiCID744AO79JkzZxIE8fXXXw+LVEImT55MOPD6668Pt1wYzKARExPD27ZCoQgPD1+2bFlbW9ugZ0QQxLfffuvixSkpKY888ogriQOBYRiCIPbu3dvvO+j1+sLCwkEUaajpn7o7OzsJgti/f//gChMcHLxmzRrH9D6ZCpLt559/HkzJrifESmmA9+TNQKlUxsXFffzxx/2+m7AW9LtGNDU1EQSxe/fufosxQNwR5ra3t2dkZOzZs+f99983GAwlJSVJSUnZ2dmff/65G3LHDAtRUVG7du0SpjQ1NdXW1g6XPI488MAD8FpWr1493EJd7wxd90Cs/etTu9gP8fp0/xuOpUuXIttubW3Nz88/ePDg9OnTTSbT4OYCIZw9e/bg3nPYmT9//uHDh4dbir7hHnUPBI80leuNl156CZlBY2PjqlWrFi9eXFBQ0L9bCWvBjVgjEO4Ic1esWNHd3X3o0KEpU6YolcqQkJA1a9a88847S5YsqaqqcoMAGPdz1113/fnnn/X19XzK7t2777zzzmEUCTMouLl70Nd2sa/i3STtrkqlSktLKywsLC8v/+ijj4ZbnBsAjuOGW4T+g9WNAQB4e3vn5uYmJSX1O8wV1oIbt0YMeZjb3t6+bdu2559/XqPRCNOfeOKJwMDATz75BDi8NxG+qmhvb1+0aNHIkSN9fX2nT59+6tQpAIDJZCIIYvXq1UFBQaGhoUuWLImNjeXvfP78eYIg0JVOQe+ztm3blpSUpFQq4+Pjjx079uqrrwYHB/v5+T355JO8On/77bcZM2aEhITQNB0eHs4PC9XV1d1zzz1arTYiImLjxo1hYWH5+fli0t6c+Pn5ZWZmCt9T5Ofn28UTjY2NCxcuDAkJUalU2dnZx48fBw7KbW9vFyttp9pByv3www9TUlIUCkVkZGSf5kg45i6mU6fpAzStAQqPwUgTFhZ2xx13oOoDJG3Y0QgljJMfEd+1a1d8fLxarY6Ojn722Wf7N47otGpIOHmJTI8fPz5p0iS1Wp2cnIzci9hT21X8nJyc4uLiTZs2hYeH9+MRrhNcUTePo+tz6p/72tragUxFwpZqampmzZrl7e09evTorVu38n90Koyn4vRhJcIkaSiK0ul06FjMBpxWOmEtEB4PxAYczcz1Yuk/cIgpKioCAJSVlTmemjdv3sSJEyGEHR0dAIAffvgBpaOfP/30E4TwrrvuysnJ+fvvv1taWjZs2ODt7X3x4kWj0QgAiI2NvXLlSllZ2R9//AEAOHbsGPr7q6++Gh8f75jdokWLxo8fDyG0Wq0AgLCwsJKSkpaWlilTpqhUqgULFhgMhqKiIoVC8c0330AIDQaDl5fXG2+80dHR0dbWtm7dOgBAeXk5wzATJkyYMWPGpUuX/vnnn7S0NADAjh07xKQdilK9zgkJCfnvf//7zjvv3H777SiltrZWp9NZLBYAwLZt2yCEDMMkJiZOnjz53LlzjY2Ny5Yt02g0586ds1OuWGmLaQcpd9SoUcXFxc3NzcuXL6dpuqGhwU7CzMxMx2E/CKFd7lBcp07TB2haLgo/jEiX2wsvvBAYGDh69Oi2trZff/11+vTpo0aNksvlYWFhGzZsgLaq98EHHyQnJ9M0HRERgYwBQggA2LNnD4SwoqIiODj44YcfZllWmN7W1rZw4cIRI0b4+Pjk5OScPHnSdfEghE7lEd5/586dcXFxKpUqKirqmWeeMRqN6IIrV6488cQTo0aNUiqVWVlZyM9IPMj1Q3R0NP8Wm+ell15Sq9XoWMKGHY1QwjhRGVZXV1MUtW/fPpPJVFFRodPp8vLyHKVKTk7Ozc0VSxSrGmJOXixTJK2/v/+PP/7Y3Ny8atUqtVpdW1sr9tSOFT8zM3P58uWDpQs30D91842vo+N16p9dbG2DgoL4V+dCkKmI2RLDMOPGjZs5c2ZNTU1VVVVycjKKBMSEGdTyGwaclpLYw0qESWL37Orq2rp1a0ZGRnNzM0pxagNilQ5eWwv4YxdtgKexsREAgNo+x4rmBoY8zEUTNC9cuOB46plnntHpdFA8zC0pKQEACCPFlJSUF198EZXUm2++yaePHTv2qaeeQsdxcXFvvPGGY3Z2Ye7GjRtR+nvvvUcQRFtbG/o5YcKEtWvXOv69tbUVAHDgwIEff/yRJMnLly+j9LNnz6LAS0xa18rJo0Bhrl6vJ0mypqYGQvj2228vWbIElTwKCPbt2wcAqK6uRn/hOC42Nvapp56yU65YadvlyGsHZcEHMS0tLQCA77//3u76zMxMu/7erFmzoK0S8rmL6VQsfYCm5aLww4iL3YN+xPGo/bOLcaEgDHWlDykmnoQflw7RxJqc679DAkXino0bNwIAGIaRtmFHI5QwTlSGv/zyC0EQhw4dkpYKxS6OOMa+UFA1oIiTF8vUriayLHvrrbeuXbvW9TbFM8LcXtVtF+byJSDmn6Frra0rYa6jLaGxSV7Io0ePokhAQpgbGqelJPawroe5djUrJibmxIkTULw5s7uDsNI5DXOhazbA4xjmCiuaGxjySQsjRowAAKCCs6O1tdXLy0viv6dPnwYA6HQ6fjXJiRMnKioq0Fnh66T58+fn5+dbrdby8vKKiop58+b1Khj/d6VS6efnp9Vq0U+aps1mMzo2m807duxYuXLl7Nmzx40bBwDgOK60tDQ4ODgkJARdExsbi55CWtqbEJ1Ol5CQgOYtOM5YOHPmzIgRIyIiItBPgiAmTZqEyhAItCNW2kBEO+hUZGQkOkAXo1FkO+ziIeE6JD53MZ26aJl9NS3XhR9Gdu7cKVzgJVTro48+OnLkyISEBH9//46OjlWrVnl5eWm12mXLlgEA6urq0GVPP/10RkaGn5/fmjVrLBYLcr4AgMrKyuzs7OnTp3/xxRckeY1rKi0t3bt37+effz5mzBhfX9/Vq1dHR0c7nXToVDxpeQAAer2e4ziNRqNQKGJiYvR6/cqVKwEABw4cOHXq1NatW6OiokaMGLFp06awsLD33ntP+kGuZ9rb2728vCiKkrZhMSOUMM7bb7/9vvvuy8rKGjNmzNKlSw8dOiQmg9PRXP6sWNVw6uSlM01NTUUHJEmOHz/+7NmzrrcpnoGL6ubhS0DCP/ejtXWKoy2dPn3a398/NDQUpSclJSE/IN1YeBgDf1g+dDaZTKircM8991itVgkbkGiPnDJAG3BzRRvyMDc5OVmpVBYXF9ulQwiPHDmSlJQEACAIQniKYRj+gKZpq9UqdIj8ZGqFQsH/Zf78+QaDYf/+/Tt27Jg6dSofFUkgk8n4YzsBEK2trRMmTFi3bh1BEPfee+93333H/9GpBUhLe3Mye/bsb775Rq/XV1ZWZmVlCU8plUq7izmOo2kaHfPKFSttMe0g5HK58CeEsE9i87mL6VRa1/02rUERfqhxpXsA+hXHv/jiiw0NDTqdzi7GBX3pQ4qJJ+3HxaIl6SbnOu+QOKWsrAx5XWkbFjNCCeOUyWQ7d+48ffr0okWL/vrrr6lTp65du7av4klUDadOXjpToSFBCBUKhettimfgorp5+BKQ8M/9aG2d4tSWhBZFkiRFUdLCeB5iDysWJkmgUCgmTZr08ssvX7p0qbq6WswGpNsjpwww4nJzRRvyMFer1T7yyCObN2/u7OwEAJhMpokTJ3766adff/31P//88+ijjwKbuXd1daG/XLhwAR3ExcVZLJbff/+911zCw8MnT568e/fu7du3z58/f1AkLywsPHfu3NGjR/Py8h566CH0ngVCmJCQ0NDQUFNTgy6rqqpCj+a6tDcPs2fPLi4ufuutt+644w47pxYXF9fU1PTvv/+inxDC48ePCye2I8RKW0w7gyu/mE4HqGv3CO9+eOfVvzj+wQcf3LJlS15eXllZmd2dB9iH7NWPi0VL0u3rdd4hcaSmpubAgQNz584FQ+av4uPjV65cWVRUtHz58i+//LKvf5eoGhJOXizTM2fOoAOGYUpLS+Pj411/aqcd1BuLgahbwj8PRWuLSExMbGlpqa6uRj//+usvZAAuNhaegdjDioVJvWKxWAiC8PPzE7MBiUonrAXC415tYPPmzVOmTEHHaPPmkSNHuijwoOOODcXy8vL8/f2zsrIOHz7MsuyCBQuWLl2am5ubm5ubnZ0NAKBpOjk5ecuWLQaD4fz588uWLUN9uLS0tGnTpi1evLi0tLS9vX3fvn2+vr6fffaZ01wefvjh7du3Nzc3z5kzZ1DE9vf35zju0KFDZrP52LFjaPfy7u7unJycxMTExx9/vKamRq/XL1y4EABAEESfpL1JGD9+PHrJO2vWLLtTU6dOTU9Pz83NraqqMhgMK1as0Ov1ixcvtrtMrLTFtDO48ovpdIC6do/ww0j/4vj777//sccey8jIeOyxx1iWFZ5yT7/CMVrymPbVaDQWFRXNnDkzMzMTDS4Mur/as2ePj4/Pr7/+arFYLl68WFxczM8ZcB3pquHo5KUzfe21106ePNnS0vLcc88ZjcbFixe7/tReXl61tbUGg6EfRTHsDFzd0v550FtbxH/+85/U1NTHH39cr9fr9folS5a4IoyHIfawYmGSBGiO5YYNG+6+++6goCAxG5CodMJaYFcjpG0gOjr6yJEjRUVFzc3NeXl5gYGBKSkpg1tQfQC6BaPRuGHDhvj4eJVK5eXlFR8fP3XqVG9v76VLl1osFghhaWlpeno6WrP81VdfBQUFobnVBoNhwYIFAQEBCoUiNjb2ww8/hLZZzIWFhcIsWltblUrlQw89JCaD3RI0tK4FQrhly5aAgAD+stTU1BdeeAEdr1mzJigoyMvLKzU1dfv27RMmTFi5ciWEUK/X33nnnSqVKiIiAu2JVlBQICbtTQhagoaOn332WZqm0TIs4RI0CGF9ff28efN8fX01Gk1OTk5JSQl0plyx0naqHTvl2v3kkV5KJcxdTKdO0wdoWi4KP4y4WG7o61MFBQVochiKC3fv3i3xgPxBZWUlTdP8mgY+fdq0aTExMSUlJW1tbXv37vXx8fn0009dFE9MHv7+BQUFWq328OHDZrNZr9enp6ffe++9EEKO49LT09EStKampueff16tVldWVl7/moIQRkdH837e29s7Li7ulVde6erq4i9wxYb5n67o7q233oqKilIoFAEBAQsWLODXdwuR3mkBintdKOLknWaKxFu/fn10dDRN05mZmfzWHC62KYWFhQEBAb6+vgzD9KnYh4v+qdtuCZqwBJz6Z0Svra3jQijU+PZqS42NjQ888IC3t3dgYODmzZsVCgWKBCSEuXERKyWxhxULk8TuKZPJQkNDV6xY0drais6KNWdilU5YC+xqRK82sH79ep1Op1QqU1NTjx49ihIdzWzevHmRkZGDUZyiuCnMdcqpU6c2bdo0WHczm82+vr4HDx4crBu6CPqyF7+5BmZIwaU9vLjePehrHC9MX7dunUqlqqqqEqa70oeU2FBMzI/3GqI5bXJuiDDX8xguJ4+xAysCcwPZAAGv+/lkvcIwjMVieffdd/Pz893wRYbq6uoxY8Z89tlnc+fObWlpWb58eVlZWXl5ea9vEDD9AJc2BoNxs5PHiIEVgbnhbMAdc3OHmrq6usDAwC+++GLbtm1uyC4yMvLLL798++23/f394+LiGIY5cOAAjrqGCFzaGAzGzU4eIwZWBOaGswFPGM3FYDAYDAaDwWDs8ITRXAwGg8FgMBgMxg4c5mIwGAwGg8FgPBAc5mIwGAwGg8FgPBAc5mIwGAwGg8FgPJD/B00DrNDFN2FaAAAAAElFTkSuQmCC", - "text/plain": [ - "" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "render_similar_faces(person_image=people[15]['image'])" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "031c13f7-c830-45e0-b36e-7c1d71eca383", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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1qrw4UdDQ8PFF1+8zz77/PGPf/yg61LF28HYsWN7aQHa2trWr1//Pjw6GSaVY2cH8R5VOwzDH//4x2/1V/93xvu7hWw2e8YZZ0yePPljtvy95zS3u7v71ltv/frXv55Opyuvf+ELXxg0aND1118P2ym3K3eW3d3d5513XnNzc11d3eGHH75gwQIACIIAEb/5zW+2tLSMGDHiggsuGDduXFLy66+/joj2zj5h96a33nrr5MmTPc+bMGHC888/f8UVVwwePLi+vv6LX/yiMcbe+a9//euII44YNmyY4zijRo1KztE2bNhw3HHH1dTUjB49+kc/+tFOO+1055139lfbKiyuv/76884775Of/GQmk2loaDjnnHNOP/30n/70px90vbbBx3Wcf1D43e9+N2vWrKlTp75bB2Fv9UHJWP4/CK21lNJ+HmBqeuGFF/bbb79UKjVlypQXXnhh4Ps7Ozu/8IUvNDc3ZzKZgw466Lnnnhv4en9T6A5iR+b/7u7uPifkAZaVu+66a8KECalUarfddvvKV74SBIG9Z/Pmzeeee+6wYcN83z/kkENsa9j14je/+c0+++zjuu6YMWPeC31qL3zqU5969tlnW1tbkyv33HPPUUcd9V4/txJvY+y8R9U+/fTTH3jggfeH5X+A6FP8BhDjRMXenzy/PULCOR85ciT0NdD6K/BNh3mfP3yrzO1t4z2nufPmzQuCYOrUqb2uI+JBBx301FNPDfzzU045ZeXKlc8888yqVasOO+ywgw46aO3atfarBx98cNGiRQ899NDpp5++ZMmSZIK+/fbbJ0yY8KZmuN/97ndvvPHG1tbWpqamGTNmrFy5cvHixffdd98tt9xiKU57e/tRRx01c+bMZcuWtbW1nXnmmd/61rdefvllrfXRRx9dKBQWL17897///d57712zZs2b1rYK13WfeuqpQqGQXLnpppsGHicDLDDr1q075phjstns8OHDf/e739mL2w/Lt7fKJuN8gClme/Q5SUH/DCDB0qVLhwwZcsYZZ3zMONkLL7zwyiuvfOpTnzrxxBPvuuuuzs5Oe72/Vt3xWXUHHzRz5sw5c+Zcd911o0aNgr5sFXq1/DvkZB8etLe3X3PNNfPnzz/ttNPslQGmpl/+8pdXXnnlunXrZs6cOWPGjA0bNgxw/7HHHvvSSy/961//WrVq1ZFHHnnEEUd0dXX1d72/KXTHX2RH5v90Ot3fhNwnVq5c+fnPf/7aa6/t6Oh44IEH7r///l/84hcAoLU+4ogjlixZ8vjjj69du3bvvfc+5JBDkvPGK6644uc//3lra+txxx03e/bsTZs2vaUeeauor6+fNm3aPffck1y58847e+kmd3AP0N8g6nMKhfIw6TV2AGDu3LkHHXRQJpMZgOjvSLX7G2UDzJNCiCuvvPLSSy/t86H9veBHyzZpYPEbAP3JM7x1QlIoFH7/+98LIS655JLkYjLQampq+ixwR4Z5nz98e8zt7YDeY9gjjFWrVm3/1Ze//OWRI0cSUU9PDwA88sgj9rr98+9///vcuXMBYM2aNclP9tlnn29/+9vFYhEA/vu//zu5vuuuu37pS1+yn8ePH3/NNdds/7jzzjtvr732IqI4jgHgRz/6kb3+i1/8AhG7urrsn3vvvff3vve97X9u185HH330b3/7G2PsjTfesNdfeeUVALjjjjv6q+2OtdPHH3fffTfnvL6+/tRTT7355pvXrl2bfLVly5ZMJnPNNdf09PR0dXVdfvnlAPDSSy/Znho6dOicOXPa29svuugix3E2btyolNpzzz1nzZq1bt265cuXT5kyxQqMFYxx48Zt2rRp4cKF/RXbq2ItLS2J0UI+n//d7353wAEHtLe3U/+SmVxPPiilJk2aNH369GXLlm3evPlrX/taOp1etmwZER188MH77bffkiVLNm/efNVVV9XU1HR2dhIRANx3331LliwZPHjw6aefrrV+H3rh/cQFF1xgB/gbb7yBiD//+c/t9f5atVf3EdGnPvWpmTNnvvrqqx0dHVdffXU2m60cX2/6ICKaNm3aRRddZD/bBqd+Wn4HpeXDifHjx1fO6oyxffbZ584777Tf9jc19ZoJtdY777zz9773vf7unz9/PgDMnz+/19P7u94LyRTa6/q0adN6rUrHHHPMANXuNf/3NyH3J2b//Oc/EfGJJ57oVY2HHnoIAF577TX7pzFm3LhxX/rSl2wrXX311fZ6R0cHADz88MMDv+w7wbBhw37wgx/87Gc/O/DAA+2V9evXjxw50tqn3nrrrfZin6NjBwdRf1MoVQyTZOzYFhgyZMicOXNyudxll10mhFi3bt3bqPYAo6y/eXLMmDGXX345EZ1wwglz5syxJU+bNm327NkDtEPyItvP1e9Np70FVK44CfoTv/7EmMov2J887yAhaWlp6TX6dt999xdffJGIeg20HSwwGeZJzQf44Y4wt3eO95zm/vOf/wSABQsWbP/V6aefPm7cOOp/2evTcPO4446zrX/PPfckRf3Xf/1XU1NTFEULFy6snPIq0Yvm3n333fb6DTfc0NDQkNy2//77X3rppfZzEAS33377xRdffMwxx4wYMcJW8oc//OHQoUMrS85kMnfccUd/tX0Hjfdxw/z5888555whQ4YAACLOmjWrz/1PMk76W2CsPjUZNnbfn/Ckyv1Pn8X2uj7AON9xmtvfJDUAA7CvNnjw4NNOO+3jx3HDMGxoaPjqV79q/5w6deqECRPs54Fp7ludVQd4EPVPc9+05fuTlg8nxo8fb13QlFJ33HFHbW3tzTffnHzb39Rkx9dTTz2V3Hnsscd+9rOf7e/+W2+9VQixfYv1d536mUJ73TNt2rTtXdAGqHav+b+/Cbk/MYvj+MQTTwSAMWPGXHDBBY8//ri94Zprrmlqaqos58wzzzz44INtK9111132ov3z/vvv76Mb3iVYvrh69WrGmGWTP/3pTy+44AL7aMsXd3AP0N9t/U2h1D/NTcq0+vuHHnrobVS7F5JRNsA8mdDcVatWTZ8+3YpZQnMHmCXgI0Vz+xO/N6W5/cnzDhKSysoEQfDcc8/tvvvuI0aMiKKo10AboMA+h3lS8wF+uCPM7Z3jPTdamDJliud5c+bM6XWdiJ5++unJkycDACJWfqWUSj44jhPHcWWNE6NJ13WTn5x22mlbtmz561//escddxx66KHDhg1704oJIZLPvSpg0dnZuffee19++eWIeMIJJ/z5z39Oftjn4fLAta0CACZNmnTDDTesX79+8eLFV1555dNPP33kkUdqrQEgDMM77rjjkksuOfbYY/fcc0+osAwbM2aM/ZDJZAAgiqKXX365oaHBDicAmDx5MmNbJTk5ZRu42Er0GudQQQJ2EIsWLWpqaho9erT9ExH322+/l19+edGiRQOEGvj2t7+9cePGkSNHVtb/44EHHnigvb39+OOPt3+ecMIJixYtevrpp9/0h0n32WOvkSNHJnEwXnzxxSVLlrwrD+qz5XdQWj7M4JyffPLJP/nJT2bPnv2nP/3JXhx4aqpsASJyXbe/+xNL317o73p/U+gOYgfn//4m5P6WFSHEH//4x5dffvm8885bvHjxoYce+r3vfQ8APM/rVYIxxnGcPt+RiN7Su7wNjBw5cuLEidYAYPuj/4FHx5sOooGn0D6RlFlTUwMAlgO91WpDP6Ns4HnSYqeddjrssMNuuummHW+HjxD6E7/+xDhBf/L8NgiJ67r77bffd7/73bVr17722mvJxeTRfRb4psN8gJq8Deb2NvCeL641NTVnnnnmj3/841wuBwBBEOy777433njjH/7whxUrVpx99tlQnkHy+bz9yapVq+yH8ePHR1H073//+02fMmrUqOnTp99zzz233XZbYo72DvHggw8uW7bsueeeu/baa0899VRLeoho4sSJGzduXLdunb1t+fLl9tV2vLZV7LHHHt/61reuv/76JUuWLF26dOBx0ucCU7nMMMY458mfybB8G6tsr3H+plNMgv4mqf4YgMXJJ598ww03XHvttQsXLnzTun20YHfwBx10kF17LrroIgCwLqcDt+qbzqo7/qABsH3Lv0NO9qHCWWeddeSRR55++umrV6+GN5uaFi1aZD8opebNmzdhwoT+7t9jjz2UUtYqYEeu9zeF7uBb7OCM2t+E3N+yYjFhwoRLLrnk8ccfv+iii6wIjR8/vq2tbeXKlfYGInrhhRcqXWTefxx77LF333336tWrly5dOmPGjMqvdnAPMMBtA0yhfaLXDQP04wDV7m+UDTxPJrj00kuvv/76xPh+4Bf8aKE/8RtYjBP0Kc9vj5BEUYSI9fX129ewzwLfdJgPUJP3grltj/dDh3Tttdc2NDTMmDHjySef1FqfddZZF1544RlnnHHGGWcccsghAOA4zpQpU2644YYtW7a8/vrrX/va1+yI+sQnPnHYYYedf/758+bN6+7ufuihh+rq6npt5hKcfvrpt912W6Ve5x2ioaHBGPPEE0+EYfj888+feeaZAFAoFGbOnDlp0qRzzjln3bp1q1evPvfccwEAEd9Sbf+v4emnn0bEXt5Xu+++OyI2Nja+1eVw0qRJHR0dyXZz8eLFfWpe3/Yqm4zzHZxioP9Jqj8GYHHiiSfOnj37gAMOmD17ttVqfzzQ2tr66KOPJtYmFqeeeqr1D9vBVt2RaXrgB0E/BzXQV8u/Q072YcOvfvUrRLzwwgvhzSbSK6+8cv78+R0dHV/96leLxeL555/f3/0TJ06cNWvWBRdc8NprrxWLxdtuu81xnNdee62/6/1NoTv4Cjs4o/Y3Ife3rNx33321tbVPPfVUFEVr1qyZM2fO/vvvDwCHHnro1KlTzzjjjOXLl2/ZsuXiiy9evXr1+eef/+70x9vCscceO2fOnJ/85CdHHnlkLyK4gySmv9t2ZArtb+y8k2r3N8oGnicT+L5/6aWXWovegV/wI4f+xK8/MU7Qnzy/DUJijJk3b97VV1/96U9/entbvv4KfNNhPnBN3nXm1gfofUGxWLz66qsnTJjg+34mk5kwYcKhhx6azWYvvPDCKIqIaN68eVOnTnUcZ/To0b///e9bWlqs9cmWLVvOOuusxsZG13XHjRv3m9/8hsqW0Q8++GDlIzo7Oz3PO/XUU/urQy/bXGt+REQ33HBDY2Njclulbe5ll13W0tKSyWT233//2267be+9977kkkuIaPXq1UcddZTv+6NHj7Z6o3vvvbe/2lZBRMaYQw89dNy4cX/+85/XrVuXy+XmzZs3a9asc889l4hsHqZ7773X2gxYDco999zTq6eSP7XW+++//4wZM1atWrVq1aoDDzwQKow7E8Hor9hedas0TtJaz507d+zYsZ/5zGfslSlTpnzyk5+0FHbGjBmc8z5tc40xU6dOtS5obW1tX//611Op1NKlS4lo1qxZ06dPX7FiRaFQ+MMf/iClXLFiBVXYwC1dutRxnPfI+v4DwbXXXiuE2LBhQ+VFG9HW+of12arbj+vDDjts9913nzt3bldX11/+8pfa2tobb7zxLT1o1qxZn/vc59ra2mg7FzTatuV3UFo+nEhscyths6BZJ4Q+pyY7oK666qrddtvNcZxp06YlxpH9TWVtbW2nnXZaXV1dOp0+4IADHnvssYGv9zeFVqI/29z+qrG9nPQ3Ife3rPzkJz8ZO3as67qNjY1nnXWW9TclotbW1lNOOcW+xcyZM+fOnUvbrRe9/nwvYI1c7edRo0Yxxqw3YS8j1z5Hxw4Oov6mUKoYHcnY2f6VocK55S1Ve4BR1t88mdjmJvjkJz85dOjQxAWtv1kCPsS2ub1omGUmfYof9S/GSaf0J887QkgqKyOEGDFixMUXX2yd/7aXpf4K7HOYVzb4ADV5U+b2zvE+0dw+sWDBguuuu+7dKi0Mw7q6un/84x/vVoE7CBvM7/nnn3+fn/uRQz6f//73vz9x4sR0Ou267vjx46+77rrksKnPcTLAArN58+aTTjopm80OGjToxz/+seu6ffKkHVllBxjn1M8U0+fU2d8k1R8DqHy1yy+/3Pf95cuXv+vN/oFg/PjxfTpfTp48efz48dRPq+74rLrjD3rwwQcbGxvr6uqsaUQvmkvbtvyOSEsVH3J8DCbkSr74la98xXEcGwioF83dwT1Af4OozymUKkZHMnbeBs0doNr9jbL+5sntaa415E1obn8v+KGluVVU4n1gbkgf2VO5BEqpKIp+/vOf33nnne9DRobXXnttl112uemmmz7/+c93dHRcdNFFCxcufOmll97UtqmKKqqooop3F9UJuYoqPop435jbx8G/e8OGDYMGDbr55ptvvfXW9+FxY8aMueWWW3760582NDSMHz9eKfXoo49Wp9Qqqqiiivcf1Qm5iio+injfmNvHQZtbRRVVVFFFFVVUUUUVvfBx0OZWUUUVVVRRRRVVVFFFL1RpbhVVVFFFFVVUUUUVH0NUaW4VVVRRRRVVVFFFFR9DVGluFVVUUUUVVVRRRRUfQ/x/GAl2Zps9WxAAAAAASUVORK5CYII=", - "text/plain": [ - "" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "render_similar_faces(person_image=people[188]['image'])" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/ai/image_search/.gitignore b/examples/ai/image_search/.gitignore deleted file mode 100644 index c791ff59a37a9..0000000000000 --- a/examples/ai/image_search/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] \ No newline at end of file diff --git a/examples/ai/image_search/README.md b/examples/ai/image_search/README.md deleted file mode 100644 index 317c24becc145..0000000000000 --- a/examples/ai/image_search/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# Image Search with Supabase Vector - -In this example we're implementing image search using the [OpenAI CLIP Model](https://github.com/openai/CLIP), which was trained on a variety of (image, text)-pairs. - -We're implementing two methods in the [`/image_search/main.py` file](/image_search/main.py): - -1. The `seed` method generates embeddings for the images in the `images` folder and upserts them into a collection in Supabase Vector. -2. Thw `search` method generates an embedding from the search query and performs a vector similarity search query. - -## Setup - -- Install poetry: `pip install poetry` -- Activate the virtual environment: `poetry shell` - - (to leave the venv just run `exit`) -- Install app dependencies: `poetry install` - -## Run locally - -### Generate the embeddings and seed the collection - -- `supabase start` -- `poetry run seed` -- Check the embeddings stored in the local Supabase Dashboard: http://localhost:54323/project/default/editor > schema: vecs - -### Perform a search - -- `poetry run search "bike in front of red brick wall"` - -## Run on hosted Supabase project - -- Set `DB_CONNECTION` with the connection string from your hosted Supabase Dashboard: https://supabase.com/dashboard/project/_/settings/database > Connection string > URI - -## Attributions - -### Models - -[clip-ViT-B-32](https://www.sbert.net/examples/applications/image-search/README.html) via [Hugging Face](https://huggingface.co/sentence-transformers/clip-ViT-B-32) - -### Images - -Images from https://unsplash.com/license via https://picsum.photos/ diff --git a/examples/ai/image_search/image_search/main.py b/examples/ai/image_search/image_search/main.py deleted file mode 100644 index 37c0fe5150f7a..0000000000000 --- a/examples/ai/image_search/image_search/main.py +++ /dev/null @@ -1,78 +0,0 @@ -import sys -from PIL import Image -from sentence_transformers import SentenceTransformer -import vecs -from matplotlib import pyplot as plt -from matplotlib import image as mpimg - -DB_CONNECTION = "postgresql://postgres:postgres@localhost:54322/postgres" - - -def seed(): - # create vector store client - vx = vecs.create_client(DB_CONNECTION) - - # create a collection of vectors with 512 dimensions - images = vx.create_collection(name="image_vectors", dimension=512) - - # Load CLIP model - model = SentenceTransformer('clip-ViT-B-32') - - # Encode an image: - img_emb1 = model.encode(Image.open('./images/one.jpg')) - img_emb2 = model.encode(Image.open('./images/two.jpg')) - img_emb3 = model.encode(Image.open('./images/three.jpg')) - img_emb4 = model.encode(Image.open('./images/four.jpg')) - - # add records to the *images* collection - images.upsert( - vectors=[ - ( - "one.jpg", # the vector's identifier - img_emb1, # the vector. list or np.array - {"type": "jpg"} # associated metadata - ), ( - "two.jpg", - img_emb2, - {"type": "jpg"} - ), ( - "three.jpg", - img_emb3, - {"type": "jpg"} - ), ( - "four.jpg", - img_emb4, - {"type": "jpg"} - ) - ] - ) - print("Inserted images") - - # index the collection for fast search performance - images.create_index() - print("Created index") - - -def search(args=sys.argv): - # create vector store client - vx = vecs.create_client(DB_CONNECTION) - images = vx.get_collection(name="image_vectors") - - # Load CLIP model - model = SentenceTransformer('clip-ViT-B-32') - # Encode text query - query_string = args[1] - text_emb = model.encode(query_string) - - # query the collection filtering metadata for "type" = "jpg" - results = images.query( - query_vector=text_emb, # required - limit=1, # number of records to return - filters={"type": {"$eq": "jpg"}}, # metadata filters - ) - result = results[0] - print(result) - plt.title(result) - image = mpimg.imread('./images/' + result) - plt.imshow(image) - plt.show() diff --git a/examples/ai/image_search/images/four.jpg b/examples/ai/image_search/images/four.jpg deleted file mode 100644 index 91a61643ce6aa..0000000000000 Binary files a/examples/ai/image_search/images/four.jpg and /dev/null differ diff --git a/examples/ai/image_search/images/one.jpg b/examples/ai/image_search/images/one.jpg deleted file mode 100644 index 23a53846a45de..0000000000000 Binary files a/examples/ai/image_search/images/one.jpg and /dev/null differ diff --git a/examples/ai/image_search/images/three.jpg b/examples/ai/image_search/images/three.jpg deleted file mode 100644 index 537b6bf30e9d6..0000000000000 Binary files a/examples/ai/image_search/images/three.jpg and /dev/null differ diff --git a/examples/ai/image_search/images/two.jpg b/examples/ai/image_search/images/two.jpg deleted file mode 100644 index 6d5ed9caada6f..0000000000000 Binary files a/examples/ai/image_search/images/two.jpg and /dev/null differ diff --git a/examples/ai/image_search/poetry.lock b/examples/ai/image_search/poetry.lock deleted file mode 100644 index ca16827c24717..0000000000000 --- a/examples/ai/image_search/poetry.lock +++ /dev/null @@ -1,1705 +0,0 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. - -[[package]] -name = "certifi" -version = "2023.7.22" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.1.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, -] - -[[package]] -name = "click" -version = "8.1.3" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "contourpy" -version = "1.0.7" -description = "Python library for calculating contours of 2D quadrilateral grids" -optional = false -python-versions = ">=3.8" -files = [ - {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:95c3acddf921944f241b6773b767f1cbce71d03307270e2d769fd584d5d1092d"}, - {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc1464c97579da9f3ab16763c32e5c5d5bb5fa1ec7ce509a4ca6108b61b84fab"}, - {file = "contourpy-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8acf74b5d383414401926c1598ed77825cd530ac7b463ebc2e4f46638f56cce6"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c71fdd8f1c0f84ffd58fca37d00ca4ebaa9e502fb49825484da075ac0b0b803"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99e9486bf1bb979d95d5cffed40689cb595abb2b841f2991fc894b3452290e8"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f4d8941a9564cda3f7fa6a6cd9b32ec575830780677932abdec7bcb61717b0"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e20e5a1908e18aaa60d9077a6d8753090e3f85ca25da6e25d30dc0a9e84c2c6"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a877ada905f7d69b2a31796c4b66e31a8068b37aa9b78832d41c82fc3e056ddd"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6381fa66866b0ea35e15d197fc06ac3840a9b2643a6475c8fff267db8b9f1e69"}, - {file = "contourpy-1.0.7-cp310-cp310-win32.whl", hash = "sha256:3c184ad2433635f216645fdf0493011a4667e8d46b34082f5a3de702b6ec42e3"}, - {file = "contourpy-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:3caea6365b13119626ee996711ab63e0c9d7496f65641f4459c60a009a1f3e80"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed33433fc3820263a6368e532f19ddb4c5990855e4886088ad84fd7c4e561c71"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38e2e577f0f092b8e6774459317c05a69935a1755ecfb621c0a98f0e3c09c9a5"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ae90d5a8590e5310c32a7630b4b8618cef7563cebf649011da80874d0aa8f414"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130230b7e49825c98edf0b428b7aa1125503d91732735ef897786fe5452b1ec2"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58569c491e7f7e874f11519ef46737cea1d6eda1b514e4eb5ac7dab6aa864d02"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d43960d809c4c12508a60b66cb936e7ed57d51fb5e30b513934a4a23874fae"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:152fd8f730c31fd67fe0ffebe1df38ab6a669403da93df218801a893645c6ccc"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9056c5310eb1daa33fc234ef39ebfb8c8e2533f088bbf0bc7350f70a29bde1ac"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a9d7587d2fdc820cc9177139b56795c39fb8560f540bba9ceea215f1f66e1566"}, - {file = "contourpy-1.0.7-cp311-cp311-win32.whl", hash = "sha256:4ee3ee247f795a69e53cd91d927146fb16c4e803c7ac86c84104940c7d2cabf0"}, - {file = "contourpy-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:5caeacc68642e5f19d707471890f037a13007feba8427eb7f2a60811a1fc1350"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd7dc0e6812b799a34f6d12fcb1000539098c249c8da54f3566c6a6461d0dbad"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0f9d350b639db6c2c233d92c7f213d94d2e444d8e8fc5ca44c9706cf72193772"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e96a08b62bb8de960d3a6afbc5ed8421bf1a2d9c85cc4ea73f4bc81b4910500f"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:031154ed61f7328ad7f97662e48660a150ef84ee1bc8876b6472af88bf5a9b98"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e9ebb4425fc1b658e13bace354c48a933b842d53c458f02c86f371cecbedecc"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efb8f6d08ca7998cf59eaf50c9d60717f29a1a0a09caa46460d33b2924839dbd"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6c180d89a28787e4b73b07e9b0e2dac7741261dbdca95f2b489c4f8f887dd810"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b8d587cc39057d0afd4166083d289bdeff221ac6d3ee5046aef2d480dc4b503c"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:769eef00437edf115e24d87f8926955f00f7704bede656ce605097584f9966dc"}, - {file = "contourpy-1.0.7-cp38-cp38-win32.whl", hash = "sha256:62398c80ef57589bdbe1eb8537127321c1abcfdf8c5f14f479dbbe27d0322e66"}, - {file = "contourpy-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:57119b0116e3f408acbdccf9eb6ef19d7fe7baf0d1e9aaa5381489bc1aa56556"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:30676ca45084ee61e9c3da589042c24a57592e375d4b138bd84d8709893a1ba4"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e927b3868bd1e12acee7cc8f3747d815b4ab3e445a28d2e5373a7f4a6e76ba1"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:366a0cf0fc079af5204801786ad7a1c007714ee3909e364dbac1729f5b0849e5"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ba9bb365446a22411f0673abf6ee1fea3b2cf47b37533b970904880ceb72f3"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b0bf0c30d432278793d2141362ac853859e87de0a7dee24a1cea35231f0d50"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7281244c99fd7c6f27c1c6bfafba878517b0b62925a09b586d88ce750a016d2"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6d0f9e1d39dbfb3977f9dd79f156c86eb03e57a7face96f199e02b18e58d32a"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f6979d20ee5693a1057ab53e043adffa1e7418d734c1532e2d9e915b08d8ec2"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5dd34c1ae752515318224cba7fc62b53130c45ac6a1040c8b7c1a223c46e8967"}, - {file = "contourpy-1.0.7-cp39-cp39-win32.whl", hash = "sha256:c5210e5d5117e9aec8c47d9156d1d3835570dd909a899171b9535cb4a3f32693"}, - {file = "contourpy-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:60835badb5ed5f4e194a6f21c09283dd6e007664a86101431bf870d9e86266c4"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce41676b3d0dd16dbcfabcc1dc46090aaf4688fd6e819ef343dbda5a57ef0161"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a011cf354107b47c58ea932d13b04d93c6d1d69b8b6dce885e642531f847566"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31a55dccc8426e71817e3fe09b37d6d48ae40aae4ecbc8c7ad59d6893569c436"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69f8ff4db108815addd900a74df665e135dbbd6547a8a69333a68e1f6e368ac2"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efe99298ba37e37787f6a2ea868265465410822f7bea163edcc1bd3903354ea9"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a1e97b86f73715e8670ef45292d7cc033548266f07d54e2183ecb3c87598888f"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc331c13902d0f50845099434cd936d49d7a2ca76cb654b39691974cb1e4812d"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24847601071f740837aefb730e01bd169fbcaa610209779a78db7ebb6e6a7051"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abf298af1e7ad44eeb93501e40eb5a67abbf93b5d90e468d01fc0c4451971afa"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:64757f6460fc55d7e16ed4f1de193f362104285c667c112b50a804d482777edd"}, - {file = "contourpy-1.0.7.tar.gz", hash = "sha256:d8165a088d31798b59e91117d1f5fc3df8168d8b48c4acc10fc0df0d0bdbcc5e"}, -] - -[package.dependencies] -numpy = ">=1.16" - -[package.extras] -bokeh = ["bokeh", "chromedriver", "selenium"] -docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh]", "docutils-stubs", "mypy (==0.991)", "types-Pillow"] -test = ["Pillow", "matplotlib", "pytest"] -test-no-images = ["pytest"] - -[[package]] -name = "cycler" -version = "0.11.0" -description = "Composable style cycles" -optional = false -python-versions = ">=3.6" -files = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, -] - -[[package]] -name = "filelock" -version = "3.12.0" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.7" -files = [ - {file = "filelock-3.12.0-py3-none-any.whl", hash = "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9"}, - {file = "filelock-3.12.0.tar.gz", hash = "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"}, -] - -[package.extras] -docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "flupy" -version = "1.2.0" -description = "Method chaining built on generators" -optional = false -python-versions = "*" -files = [ - {file = "flupy-1.2.0.tar.gz", hash = "sha256:12487a008e9744cd35d0f6ea3cfa06f4b2b27cb138bf57d0788f5c26e57afe69"}, -] - -[package.dependencies] -typing_extensions = "*" - -[package.extras] -dev = ["black", "mypy", "pre-commit", "pylint", "pytest", "pytest-benchmark", "pytest-cov"] - -[[package]] -name = "fonttools" -version = "4.39.4" -description = "Tools to manipulate font files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fonttools-4.39.4-py3-none-any.whl", hash = "sha256:106caf6167c4597556b31a8d9175a3fdc0356fdcd70ab19973c3b0d4c893c461"}, - {file = "fonttools-4.39.4.zip", hash = "sha256:dba8d7cdb8e2bac1b3da28c5ed5960de09e59a2fe7e63bb73f5a59e57b0430d2"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "scipy"] -lxml = ["lxml (>=4.0,<5)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] -symfont = ["sympy"] -type1 = ["xattr"] -ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.0.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] - -[[package]] -name = "fsspec" -version = "2023.5.0" -description = "File-system specification" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fsspec-2023.5.0-py3-none-any.whl", hash = "sha256:51a4ad01a5bb66fcc58036e288c0d53d3975a0df2a5dc59a93b59bade0391f2a"}, - {file = "fsspec-2023.5.0.tar.gz", hash = "sha256:b3b56e00fb93ea321bc9e5d9cf6f8522a0198b20eb24e02774d329e9c6fb84ce"}, -] - -[package.extras] -abfs = ["adlfs"] -adl = ["adlfs"] -arrow = ["pyarrow (>=1)"] -dask = ["dask", "distributed"] -devel = ["pytest", "pytest-cov"] -dropbox = ["dropbox", "dropboxdrivefs", "requests"] -full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] -fuse = ["fusepy"] -gcs = ["gcsfs"] -git = ["pygit2"] -github = ["requests"] -gs = ["gcsfs"] -gui = ["panel"] -hdfs = ["pyarrow (>=1)"] -http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"] -libarchive = ["libarchive-c"] -oci = ["ocifs"] -s3 = ["s3fs"] -sftp = ["paramiko"] -smb = ["smbprotocol"] -ssh = ["paramiko"] -tqdm = ["tqdm"] - -[[package]] -name = "greenlet" -version = "2.0.2" -description = "Lightweight in-process concurrent programming" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" -files = [ - {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, - {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, - {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, - {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, - {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, - {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"}, - {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"}, - {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, - {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, - {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, - {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"}, - {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"}, - {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"}, - {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"}, - {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"}, - {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"}, - {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"}, - {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"}, - {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"}, - {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"}, - {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"}, - {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"}, - {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"}, - {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"}, - {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"}, - {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, - {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, - {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"}, - {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"}, - {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, - {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, - {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, - {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"}, - {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"}, - {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"}, - {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"}, - {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"}, - {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"}, -] - -[package.extras] -docs = ["Sphinx", "docutils (<0.18)"] -test = ["objgraph", "psutil"] - -[[package]] -name = "huggingface-hub" -version = "0.14.1" -description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "huggingface_hub-0.14.1-py3-none-any.whl", hash = "sha256:9fc619170d800ff3793ad37c9757c255c8783051e1b5b00501205eb43ccc4f27"}, - {file = "huggingface_hub-0.14.1.tar.gz", hash = "sha256:9ab899af8e10922eac65e290d60ab956882ab0bf643e3d990b1394b6b47b7fbc"}, -] - -[package.dependencies] -filelock = "*" -fsspec = "*" -packaging = ">=20.9" -pyyaml = ">=5.1" -requests = "*" -tqdm = ">=4.42.1" -typing-extensions = ">=3.7.4.3" - -[package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] -cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] -fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] -quality = ["black (>=23.1,<24.0)", "mypy (==0.982)", "ruff (>=0.0.241)"] -tensorflow = ["graphviz", "pydot", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "gradio", "jedi", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "soundfile"] -torch = ["torch"] -typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[package]] -name = "jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "joblib" -version = "1.2.0" -description = "Lightweight pipelining with Python functions" -optional = false -python-versions = ">=3.7" -files = [ - {file = "joblib-1.2.0-py3-none-any.whl", hash = "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385"}, - {file = "joblib-1.2.0.tar.gz", hash = "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018"}, -] - -[[package]] -name = "kiwisolver" -version = "1.4.4" -description = "A fast implementation of the Cassowary constraint solver" -optional = false -python-versions = ">=3.7" -files = [ - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, - {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, -] - -[[package]] -name = "markupsafe" -version = "2.1.2" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, -] - -[[package]] -name = "matplotlib" -version = "3.7.1" -description = "Python plotting package" -optional = false -python-versions = ">=3.8" -files = [ - {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:95cbc13c1fc6844ab8812a525bbc237fa1470863ff3dace7352e910519e194b1"}, - {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:08308bae9e91aca1ec6fd6dda66237eef9f6294ddb17f0d0b3c863169bf82353"}, - {file = "matplotlib-3.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:544764ba51900da4639c0f983b323d288f94f65f4024dc40ecb1542d74dc0500"}, - {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d94989191de3fcc4e002f93f7f1be5da476385dde410ddafbb70686acf00ea"}, - {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99bc9e65901bb9a7ce5e7bb24af03675cbd7c70b30ac670aa263240635999a4"}, - {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb7d248c34a341cd4c31a06fd34d64306624c8cd8d0def7abb08792a5abfd556"}, - {file = "matplotlib-3.7.1-cp310-cp310-win32.whl", hash = "sha256:ce463ce590f3825b52e9fe5c19a3c6a69fd7675a39d589e8b5fbe772272b3a24"}, - {file = "matplotlib-3.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:3d7bc90727351fb841e4d8ae620d2d86d8ed92b50473cd2b42ce9186104ecbba"}, - {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:770a205966d641627fd5cf9d3cb4b6280a716522cd36b8b284a8eb1581310f61"}, - {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f67bfdb83a8232cb7a92b869f9355d677bce24485c460b19d01970b64b2ed476"}, - {file = "matplotlib-3.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2bf092f9210e105f414a043b92af583c98f50050559616930d884387d0772aba"}, - {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89768d84187f31717349c6bfadc0e0d8c321e8eb34522acec8a67b1236a66332"}, - {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83111e6388dec67822e2534e13b243cc644c7494a4bb60584edbff91585a83c6"}, - {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a867bf73a7eb808ef2afbca03bcdb785dae09595fbe550e1bab0cd023eba3de0"}, - {file = "matplotlib-3.7.1-cp311-cp311-win32.whl", hash = "sha256:fbdeeb58c0cf0595efe89c05c224e0a502d1aa6a8696e68a73c3efc6bc354304"}, - {file = "matplotlib-3.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:c0bd19c72ae53e6ab979f0ac6a3fafceb02d2ecafa023c5cca47acd934d10be7"}, - {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:6eb88d87cb2c49af00d3bbc33a003f89fd9f78d318848da029383bfc08ecfbfb"}, - {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:cf0e4f727534b7b1457898c4f4ae838af1ef87c359b76dcd5330fa31893a3ac7"}, - {file = "matplotlib-3.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:46a561d23b91f30bccfd25429c3c706afe7d73a5cc64ef2dfaf2b2ac47c1a5dc"}, - {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8704726d33e9aa8a6d5215044b8d00804561971163563e6e6591f9dcf64340cc"}, - {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4cf327e98ecf08fcbb82685acaf1939d3338548620ab8dfa02828706402c34de"}, - {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:617f14ae9d53292ece33f45cba8503494ee199a75b44de7717964f70637a36aa"}, - {file = "matplotlib-3.7.1-cp38-cp38-win32.whl", hash = "sha256:7c9a4b2da6fac77bcc41b1ea95fadb314e92508bf5493ceff058e727e7ecf5b0"}, - {file = "matplotlib-3.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:14645aad967684e92fc349493fa10c08a6da514b3d03a5931a1bac26e6792bd1"}, - {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:81a6b377ea444336538638d31fdb39af6be1a043ca5e343fe18d0f17e098770b"}, - {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:28506a03bd7f3fe59cd3cd4ceb2a8d8a2b1db41afede01f66c42561b9be7b4b7"}, - {file = "matplotlib-3.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8c587963b85ce41e0a8af53b9b2de8dddbf5ece4c34553f7bd9d066148dc719c"}, - {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8bf26ade3ff0f27668989d98c8435ce9327d24cffb7f07d24ef609e33d582439"}, - {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:def58098f96a05f90af7e92fd127d21a287068202aa43b2a93476170ebd99e87"}, - {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f883a22a56a84dba3b588696a2b8a1ab0d2c3d41be53264115c71b0a942d8fdb"}, - {file = "matplotlib-3.7.1-cp39-cp39-win32.whl", hash = "sha256:4f99e1b234c30c1e9714610eb0c6d2f11809c9c78c984a613ae539ea2ad2eb4b"}, - {file = "matplotlib-3.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:3ba2af245e36990facf67fde840a760128ddd71210b2ab6406e640188d69d136"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3032884084f541163f295db8a6536e0abb0db464008fadca6c98aaf84ccf4717"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a2cb34336110e0ed8bb4f650e817eed61fa064acbefeb3591f1b33e3a84fd96"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b867e2f952ed592237a1828f027d332d8ee219ad722345b79a001f49df0936eb"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:57bfb8c8ea253be947ccb2bc2d1bb3862c2bccc662ad1b4626e1f5e004557042"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:438196cdf5dc8d39b50a45cb6e3f6274edbcf2254f85fa9b895bf85851c3a613"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21e9cff1a58d42e74d01153360de92b326708fb205250150018a52c70f43c290"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d4725d70b7c03e082bbb8a34639ede17f333d7247f56caceb3801cb6ff703d"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:97cc368a7268141afb5690760921765ed34867ffb9655dd325ed207af85c7529"}, - {file = "matplotlib-3.7.1.tar.gz", hash = "sha256:7b73305f25eab4541bd7ee0b96d87e53ae9c9f1823be5659b806cd85786fe882"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -kiwisolver = ">=1.0.1" -numpy = ">=1.20" -packaging = ">=20.0" -pillow = ">=6.2.0" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" - -[[package]] -name = "mpmath" -version = "1.3.0" -description = "Python library for arbitrary-precision floating-point arithmetic" -optional = false -python-versions = "*" -files = [ - {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, - {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, -] - -[package.extras] -develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] -docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4)"] -tests = ["pytest (>=4.6)"] - -[[package]] -name = "networkx" -version = "3.1" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.8" -files = [ - {file = "networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36"}, - {file = "networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61"}, -] - -[package.extras] -default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"] -developer = ["mypy (>=1.1)", "pre-commit (>=3.2)"] -doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.13)", "sphinx (>=6.1)", "sphinx-gallery (>=0.12)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.10)", "sympy (>=1.10)"] -test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] - -[[package]] -name = "nltk" -version = "3.8.1" -description = "Natural Language Toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "nltk-3.8.1-py3-none-any.whl", hash = "sha256:fd5c9109f976fa86bcadba8f91e47f5e9293bd034474752e92a520f81c93dda5"}, - {file = "nltk-3.8.1.zip", hash = "sha256:1834da3d0682cba4f2cede2f9aad6b0fafb6461ba451db0efb6f9c39798d64d3"}, -] - -[package.dependencies] -click = "*" -joblib = "*" -regex = ">=2021.8.3" -tqdm = "*" - -[package.extras] -all = ["matplotlib", "numpy", "pyparsing", "python-crfsuite", "requests", "scikit-learn", "scipy", "twython"] -corenlp = ["requests"] -machine-learning = ["numpy", "python-crfsuite", "scikit-learn", "scipy"] -plot = ["matplotlib"] -tgrep = ["pyparsing"] -twitter = ["twython"] - -[[package]] -name = "numpy" -version = "1.24.3" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "numpy-1.24.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570"}, - {file = "numpy-1.24.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7"}, - {file = "numpy-1.24.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463"}, - {file = "numpy-1.24.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6"}, - {file = "numpy-1.24.3-cp310-cp310-win32.whl", hash = "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b"}, - {file = "numpy-1.24.3-cp310-cp310-win_amd64.whl", hash = "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7"}, - {file = "numpy-1.24.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3"}, - {file = "numpy-1.24.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf"}, - {file = "numpy-1.24.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385"}, - {file = "numpy-1.24.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950"}, - {file = "numpy-1.24.3-cp311-cp311-win32.whl", hash = "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096"}, - {file = "numpy-1.24.3-cp311-cp311-win_amd64.whl", hash = "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80"}, - {file = "numpy-1.24.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078"}, - {file = "numpy-1.24.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c"}, - {file = "numpy-1.24.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c"}, - {file = "numpy-1.24.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f"}, - {file = "numpy-1.24.3-cp38-cp38-win32.whl", hash = "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4"}, - {file = "numpy-1.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289"}, - {file = "numpy-1.24.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4"}, - {file = "numpy-1.24.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187"}, - {file = "numpy-1.24.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02"}, - {file = "numpy-1.24.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4"}, - {file = "numpy-1.24.3-cp39-cp39-win32.whl", hash = "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c"}, - {file = "numpy-1.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4"}, - {file = "numpy-1.24.3.tar.gz", hash = "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155"}, -] - -[[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "pgvector" -version = "0.1.8" -description = "pgvector support for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pgvector-0.1.8-py2.py3-none-any.whl", hash = "sha256:99dce3a6580ef73863edb9b8441937671f4e1a09383826e6b0838176cd441a96"}, -] - -[package.dependencies] -numpy = "*" - -[[package]] -name = "pillow" -version = "9.5.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, - {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"}, - {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"}, - {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"}, - {file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"}, - {file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"}, - {file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"}, - {file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"}, - {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"}, - {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"}, - {file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"}, - {file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"}, - {file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"}, - {file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"}, - {file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"}, - {file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"}, - {file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"}, - {file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"}, - {file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"}, - {file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"}, - {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"}, - {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"}, - {file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"}, - {file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"}, - {file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"}, - {file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"}, - {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"}, - {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"}, - {file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"}, - {file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, - {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "psycopg2-binary" -version = "2.9.6" -description = "psycopg2 - Python-PostgreSQL Database Adapter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, -] - -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] - -[[package]] -name = "regex" -version = "2023.5.5" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.6" -files = [ - {file = "regex-2023.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:48c9ec56579d4ba1c88f42302194b8ae2350265cb60c64b7b9a88dcb7fbde309"}, - {file = "regex-2023.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f4541550459c08fdd6f97aa4e24c6f1932eec780d58a2faa2068253df7d6ff"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e22e4460f0245b468ee645156a4f84d0fc35a12d9ba79bd7d79bdcd2f9629d"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b870b6f632fc74941cadc2a0f3064ed8409e6f8ee226cdfd2a85ae50473aa94"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:171c52e320fe29260da550d81c6b99f6f8402450dc7777ef5ced2e848f3b6f8f"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad5524c2aedaf9aa14ef1bc9327f8abd915699dea457d339bebbe2f0d218f86"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a0f874ee8c0bc820e649c900243c6d1e6dc435b81da1492046716f14f1a2a96"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e645c757183ee0e13f0bbe56508598e2d9cd42b8abc6c0599d53b0d0b8dd1479"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a4c5da39bca4f7979eefcbb36efea04471cd68db2d38fcbb4ee2c6d440699833"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5e3f4468b8c6fd2fd33c218bbd0a1559e6a6fcf185af8bb0cc43f3b5bfb7d636"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:59e4b729eae1a0919f9e4c0fc635fbcc9db59c74ad98d684f4877be3d2607dd6"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ba73a14e9c8f9ac409863543cde3290dba39098fc261f717dc337ea72d3ebad2"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0bbd5dcb19603ab8d2781fac60114fb89aee8494f4505ae7ad141a3314abb1f9"}, - {file = "regex-2023.5.5-cp310-cp310-win32.whl", hash = "sha256:40005cbd383438aecf715a7b47fe1e3dcbc889a36461ed416bdec07e0ef1db66"}, - {file = "regex-2023.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:59597cd6315d3439ed4b074febe84a439c33928dd34396941b4d377692eca810"}, - {file = "regex-2023.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f08276466fedb9e36e5193a96cb944928301152879ec20c2d723d1031cd4ddd"}, - {file = "regex-2023.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cd46f30e758629c3ee91713529cfbe107ac50d27110fdcc326a42ce2acf4dafc"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2910502f718828cecc8beff004917dcf577fc5f8f5dd40ffb1ea7612124547b"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:445d6f4fc3bd9fc2bf0416164454f90acab8858cd5a041403d7a11e3356980e8"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18196c16a584619c7c1d843497c069955d7629ad4a3fdee240eb347f4a2c9dbe"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d430a23b661629661f1fe8395be2004006bc792bb9fc7c53911d661b69dd7e"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72a28979cc667e5f82ef433db009184e7ac277844eea0f7f4d254b789517941d"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f764e4dfafa288e2eba21231f455d209f4709436baeebb05bdecfb5d8ddc3d35"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23d86ad2121b3c4fc78c58f95e19173790e22ac05996df69b84e12da5816cb17"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:690a17db524ee6ac4a27efc5406530dd90e7a7a69d8360235323d0e5dafb8f5b"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:1ecf3dcff71f0c0fe3e555201cbe749fa66aae8d18f80d2cc4de8e66df37390a"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:811040d7f3dd9c55eb0d8b00b5dcb7fd9ae1761c454f444fd9f37fe5ec57143a"}, - {file = "regex-2023.5.5-cp311-cp311-win32.whl", hash = "sha256:c8c143a65ce3ca42e54d8e6fcaf465b6b672ed1c6c90022794a802fb93105d22"}, - {file = "regex-2023.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:586a011f77f8a2da4b888774174cd266e69e917a67ba072c7fc0e91878178a80"}, - {file = "regex-2023.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b6365703e8cf1644b82104cdd05270d1a9f043119a168d66c55684b1b557d008"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a56c18f21ac98209da9c54ae3ebb3b6f6e772038681d6cb43b8d53da3b09ee81"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8b942d8b3ce765dbc3b1dad0a944712a89b5de290ce8f72681e22b3c55f3cc8"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:844671c9c1150fcdac46d43198364034b961bd520f2c4fdaabfc7c7d7138a2dd"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2ce65bdeaf0a386bb3b533a28de3994e8e13b464ac15e1e67e4603dd88787fa"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fee0016cc35a8a91e8cc9312ab26a6fe638d484131a7afa79e1ce6165328a135"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:18f05d14f14a812fe9723f13afafefe6b74ca042d99f8884e62dbd34dcccf3e2"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:941b3f1b2392f0bcd6abf1bc7a322787d6db4e7457be6d1ffd3a693426a755f2"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:921473a93bcea4d00295799ab929522fc650e85c6b9f27ae1e6bb32a790ea7d3"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:e2205a81f815b5bb17e46e74cc946c575b484e5f0acfcb805fb252d67e22938d"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:385992d5ecf1a93cb85adff2f73e0402dd9ac29b71b7006d342cc920816e6f32"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:890a09cb0a62198bff92eda98b2b507305dd3abf974778bae3287f98b48907d3"}, - {file = "regex-2023.5.5-cp36-cp36m-win32.whl", hash = "sha256:821a88b878b6589c5068f4cc2cfeb2c64e343a196bc9d7ac68ea8c2a776acd46"}, - {file = "regex-2023.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:7918a1b83dd70dc04ab5ed24c78ae833ae8ea228cef84e08597c408286edc926"}, - {file = "regex-2023.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:338994d3d4ca4cf12f09822e025731a5bdd3a37aaa571fa52659e85ca793fb67"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a69cf0c00c4d4a929c6c7717fd918414cab0d6132a49a6d8fc3ded1988ed2ea"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f5e06df94fff8c4c85f98c6487f6636848e1dc85ce17ab7d1931df4a081f657"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8906669b03c63266b6a7693d1f487b02647beb12adea20f8840c1a087e2dfb5"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fda3e50abad8d0f48df621cf75adc73c63f7243cbe0e3b2171392b445401550"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ac2b7d341dc1bd102be849d6dd33b09701223a851105b2754339e390be0627a"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fb2b495dd94b02de8215625948132cc2ea360ae84fe6634cd19b6567709c8ae2"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aa7d032c1d84726aa9edeb6accf079b4caa87151ca9fabacef31fa028186c66d"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d45864693351c15531f7e76f545ec35000d50848daa833cead96edae1665559"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21e90a288e6ba4bf44c25c6a946cb9b0f00b73044d74308b5e0afd190338297c"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:10250a093741ec7bf74bcd2039e697f519b028518f605ff2aa7ac1e9c9f97423"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6b8d0c153f07a953636b9cdb3011b733cadd4178123ef728ccc4d5969e67f3c2"}, - {file = "regex-2023.5.5-cp37-cp37m-win32.whl", hash = "sha256:10374c84ee58c44575b667310d5bbfa89fb2e64e52349720a0182c0017512f6c"}, - {file = "regex-2023.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9b320677521aabf666cdd6e99baee4fb5ac3996349c3b7f8e7c4eee1c00dfe3a"}, - {file = "regex-2023.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:afb1c70ec1e594a547f38ad6bf5e3d60304ce7539e677c1429eebab115bce56e"}, - {file = "regex-2023.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf123225945aa58b3057d0fba67e8061c62d14cc8a4202630f8057df70189051"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99757ad7fe5c8a2bb44829fc57ced11253e10f462233c1255fe03888e06bc19"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a623564d810e7a953ff1357f7799c14bc9beeab699aacc8b7ab7822da1e952b8"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced02e3bd55e16e89c08bbc8128cff0884d96e7f7a5633d3dc366b6d95fcd1d6"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cbe6b5be3b9b698d8cc4ee4dee7e017ad655e83361cd0ea8e653d65e469468"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a6e4b0e0531223f53bad07ddf733af490ba2b8367f62342b92b39b29f72735a"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2e9c4f778514a560a9c9aa8e5538bee759b55f6c1dcd35613ad72523fd9175b8"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:256f7f4c6ba145f62f7a441a003c94b8b1af78cee2cccacfc1e835f93bc09426"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bd7b68fd2e79d59d86dcbc1ccd6e2ca09c505343445daaa4e07f43c8a9cc34da"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4a5059bd585e9e9504ef9c07e4bc15b0a621ba20504388875d66b8b30a5c4d18"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:6893544e06bae009916a5658ce7207e26ed17385149f35a3125f5259951f1bbe"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c64d5abe91a3dfe5ff250c6bb267ef00dbc01501518225b45a5f9def458f31fb"}, - {file = "regex-2023.5.5-cp38-cp38-win32.whl", hash = "sha256:7923470d6056a9590247ff729c05e8e0f06bbd4efa6569c916943cb2d9b68b91"}, - {file = "regex-2023.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:4035d6945cb961c90c3e1c1ca2feb526175bcfed44dfb1cc77db4fdced060d3e"}, - {file = "regex-2023.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50fd2d9b36938d4dcecbd684777dd12a407add4f9f934f235c66372e630772b0"}, - {file = "regex-2023.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d19e57f888b00cd04fc38f5e18d0efbd91ccba2d45039453ab2236e6eec48d4d"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd966475e963122ee0a7118ec9024388c602d12ac72860f6eea119a3928be053"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db09e6c18977a33fea26fe67b7a842f706c67cf8bda1450974d0ae0dd63570df"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6164d4e2a82f9ebd7752a06bd6c504791bedc6418c0196cd0a23afb7f3e12b2d"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84397d3f750d153ebd7f958efaa92b45fea170200e2df5e0e1fd4d85b7e3f58a"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c3efee9bb53cbe7b285760c81f28ac80dc15fa48b5fe7e58b52752e642553f1"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:144b5b017646b5a9392a5554a1e5db0000ae637be4971c9747566775fc96e1b2"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1189fbbb21e2c117fda5303653b61905aeeeea23de4a94d400b0487eb16d2d60"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f83fe9e10f9d0b6cf580564d4d23845b9d692e4c91bd8be57733958e4c602956"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:72aa4746993a28c841e05889f3f1b1e5d14df8d3daa157d6001a34c98102b393"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:de2f780c3242ea114dd01f84848655356af4dd561501896c751d7b885ea6d3a1"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:290fd35219486dfbc00b0de72f455ecdd63e59b528991a6aec9fdfc0ce85672e"}, - {file = "regex-2023.5.5-cp39-cp39-win32.whl", hash = "sha256:732176f5427e72fa2325b05c58ad0b45af341c459910d766f814b0584ac1f9ac"}, - {file = "regex-2023.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:1307aa4daa1cbb23823d8238e1f61292fd07e4e5d8d38a6efff00b67a7cdb764"}, - {file = "regex-2023.5.5.tar.gz", hash = "sha256:7d76a8a1fc9da08296462a18f16620ba73bcbf5909e42383b253ef34d9d5141e"}, -] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "safetensors" -version = "0.3.1" -description = "Fast and Safe Tensor serialization" -optional = false -python-versions = "*" -files = [ - {file = "safetensors-0.3.1-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:2ae9b7dd268b4bae6624729dac86deb82104820e9786429b0583e5168db2f770"}, - {file = "safetensors-0.3.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:08c85c1934682f1e2cd904d38433b53cd2a98245a7cc31f5689f9322a2320bbf"}, - {file = "safetensors-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba625c7af9e1c5d0d91cb83d2fba97d29ea69d4db2015d9714d24c7f6d488e15"}, - {file = "safetensors-0.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b57d5890c619ec10d9f1b6426b8690d0c9c2868a90dc52f13fae6f6407ac141f"}, - {file = "safetensors-0.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c9f562ea696d50b95cadbeb1716dc476714a87792ffe374280c0835312cbfe2"}, - {file = "safetensors-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c115951b3a865ece8d98ee43882f2fd0a999c0200d6e6fec24134715ebe3b57"}, - {file = "safetensors-0.3.1-cp310-cp310-win32.whl", hash = "sha256:118f8f7503ea312fc7af27e934088a1b589fb1eff5a7dea2cd1de6c71ee33391"}, - {file = "safetensors-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:54846eaae25fded28a7bebbb66be563cad221b4c80daee39e2f55df5e5e0266f"}, - {file = "safetensors-0.3.1-cp311-cp311-macosx_10_11_universal2.whl", hash = "sha256:5af82e10946c4822506db0f29269f43147e889054704dde994d4e22f0c37377b"}, - {file = "safetensors-0.3.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:626c86dd1d930963c8ea7f953a3787ae85322551e3a5203ac731d6e6f3e18f44"}, - {file = "safetensors-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12e30677e6af1f4cc4f2832546e91dbb3b0aa7d575bfa473d2899d524e1ace08"}, - {file = "safetensors-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d534b80bc8d39945bb902f34b0454773971fe9e5e1f2142af451759d7e52b356"}, - {file = "safetensors-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ddd0ddd502cf219666e7d30f23f196cb87e829439b52b39f3e7da7918c3416df"}, - {file = "safetensors-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997a2cc14023713f423e6d16536d55cb16a3d72850f142e05f82f0d4c76d383b"}, - {file = "safetensors-0.3.1-cp311-cp311-win32.whl", hash = "sha256:6ae9ca63d9e22f71ec40550207bd284a60a6b4916ae6ca12c85a8d86bf49e0c3"}, - {file = "safetensors-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:62aa7421ca455418423e35029524489480adda53e3f702453580180ecfebe476"}, - {file = "safetensors-0.3.1-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:6d54b3ed367b6898baab75dfd057c24f36ec64d3938ffff2af981d56bfba2f42"}, - {file = "safetensors-0.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:262423aeda91117010f8c607889066028f680fbb667f50cfe6eae96f22f9d150"}, - {file = "safetensors-0.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10efe2513a8327fd628cea13167089588acc23093ba132aecfc536eb9a4560fe"}, - {file = "safetensors-0.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:689b3d6a7ebce70ee9438267ee55ea89b575c19923876645e927d08757b552fe"}, - {file = "safetensors-0.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14cd9a87bc73ce06903e9f8ee8b05b056af6f3c9f37a6bd74997a16ed36ff5f4"}, - {file = "safetensors-0.3.1-cp37-cp37m-win32.whl", hash = "sha256:a77cb39624480d5f143c1cc272184f65a296f573d61629eff5d495d2e0541d3e"}, - {file = "safetensors-0.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9eff3190bfbbb52eef729911345c643f875ca4dbb374aa6c559675cfd0ab73db"}, - {file = "safetensors-0.3.1-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:05cbfef76e4daa14796db1bbb52072d4b72a44050c368b2b1f6fd3e610669a89"}, - {file = "safetensors-0.3.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:c49061461f4a81e5ec3415070a3f135530834c89cbd6a7db7cd49e3cb9d9864b"}, - {file = "safetensors-0.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22cf7e73ca42974f098ce0cf4dd8918983700b6b07a4c6827d50c8daefca776e"}, - {file = "safetensors-0.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04f909442d6223ff0016cd2e1b2a95ef8039b92a558014627363a2e267213f62"}, - {file = "safetensors-0.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c573c5a0d5d45791ae8c179e26d74aff86e719056591aa7edb3ca7be55bc961"}, - {file = "safetensors-0.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6994043b12e717cf2a6ba69077ac41f0d3675b2819734f07f61819e854c622c7"}, - {file = "safetensors-0.3.1-cp38-cp38-win32.whl", hash = "sha256:158ede81694180a0dbba59422bc304a78c054b305df993c0c6e39c6330fa9348"}, - {file = "safetensors-0.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:afdc725beff7121ea8d39a7339f5a6abcb01daa189ea56290b67fe262d56e20f"}, - {file = "safetensors-0.3.1-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:cba910fcc9e5e64d32d62b837388721165e9c7e45d23bc3a38ad57694b77f40d"}, - {file = "safetensors-0.3.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:a4f7dbfe7285573cdaddd85ef6fa84ebbed995d3703ab72d71257944e384612f"}, - {file = "safetensors-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54aed0802f9eaa83ca7b1cbb986bfb90b8e2c67b6a4bcfe245627e17dad565d4"}, - {file = "safetensors-0.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34b75a766f3cfc99fd4c33e329b76deae63f5f388e455d863a5d6e99472fca8e"}, - {file = "safetensors-0.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a0f31904f35dc14919a145b2d7a2d8842a43a18a629affe678233c4ea90b4af"}, - {file = "safetensors-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcf527ecc5f58907fd9031510378105487f318cc91ecdc5aee3c7cc8f46030a8"}, - {file = "safetensors-0.3.1-cp39-cp39-win32.whl", hash = "sha256:e2f083112cf97aa9611e2a05cc170a2795eccec5f6ff837f4565f950670a9d83"}, - {file = "safetensors-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:5f4f614b8e8161cd8a9ca19c765d176a82b122fa3d3387b77862145bfe9b4e93"}, - {file = "safetensors-0.3.1.tar.gz", hash = "sha256:571da56ff8d0bec8ae54923b621cda98d36dcef10feb36fd492c4d0c2cd0e869"}, -] - -[package.extras] -all = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "flax (>=0.6.3)", "h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "isort (>=5.5.4)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "numpy (>=1.21.6)", "paddlepaddle (>=2.4.1)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "setuptools-rust (>=1.5.2)", "tensorflow (>=2.11.0)", "torch (>=1.10)"] -dev = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "flax (>=0.6.3)", "h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "isort (>=5.5.4)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "numpy (>=1.21.6)", "paddlepaddle (>=2.4.1)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "setuptools-rust (>=1.5.2)", "tensorflow (>=2.11.0)", "torch (>=1.10)"] -jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)"] -numpy = ["numpy (>=1.21.6)"] -paddlepaddle = ["paddlepaddle (>=2.4.1)"] -quality = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"] -tensorflow = ["tensorflow (>=2.11.0)"] -testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "numpy (>=1.21.6)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "setuptools-rust (>=1.5.2)"] -torch = ["torch (>=1.10)"] - -[[package]] -name = "scikit-learn" -version = "1.2.2" -description = "A set of python modules for machine learning and data mining" -optional = false -python-versions = ">=3.8" -files = [ - {file = "scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7"}, - {file = "scikit_learn-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99cc01184e347de485bf253d19fcb3b1a3fb0ee4cea5ee3c43ec0cc429b6d29f"}, - {file = "scikit_learn-1.2.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e6e574db9914afcb4e11ade84fab084536a895ca60aadea3041e85b8ac963edb"}, - {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fe83b676f407f00afa388dd1fdd49e5c6612e551ed84f3b1b182858f09e987d"}, - {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2642baa0ad1e8f8188917423dd73994bf25429f8893ddbe115be3ca3183584"}, - {file = "scikit_learn-1.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ad66c3848c0a1ec13464b2a95d0a484fd5b02ce74268eaa7e0c697b904f31d6c"}, - {file = "scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f"}, - {file = "scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590"}, - {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233"}, - {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c"}, - {file = "scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c"}, - {file = "scikit_learn-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c710ff9f9936ba8a3b74a455ccf0dcf59b230caa1e9ba0223773c490cab1e51"}, - {file = "scikit_learn-1.2.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:2dd3ffd3950e3d6c0c0ef9033a9b9b32d910c61bd06cb8206303fb4514b88a49"}, - {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b47a305190c28dd8dd73fc9445f802b6ea716669cfc22ab1eb97b335d238b1"}, - {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:953236889928d104c2ef14027539f5f2609a47ebf716b8cbe4437e85dce42744"}, - {file = "scikit_learn-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:7f69313884e8eb311460cc2f28676d5e400bd929841a2c8eb8742ae78ebf7c20"}, - {file = "scikit_learn-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8156db41e1c39c69aa2d8599ab7577af53e9e5e7a57b0504e116cc73c39138dd"}, - {file = "scikit_learn-1.2.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fe175ee1dab589d2e1033657c5b6bec92a8a3b69103e3dd361b58014729975c3"}, - {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d5312d9674bed14f73773d2acf15a3272639b981e60b72c9b190a0cffed5bad"}, - {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea061bf0283bf9a9f36ea3c5d3231ba2176221bbd430abd2603b1c3b2ed85c89"}, - {file = "scikit_learn-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6477eed40dbce190f9f9e9d0d37e020815825b300121307942ec2110302b66a3"}, -] - -[package.dependencies] -joblib = ">=1.1.1" -numpy = ">=1.17.3" -scipy = ">=1.3.2" -threadpoolctl = ">=2.0.0" - -[package.extras] -benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] -examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] -tests = ["black (>=22.3.0)", "flake8 (>=3.8.2)", "matplotlib (>=3.1.3)", "mypy (>=0.961)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=5.3.1)", "pytest-cov (>=2.9.0)", "scikit-image (>=0.16.2)"] - -[[package]] -name = "scipy" -version = "1.9.3" -description = "Fundamental algorithms for scientific computing in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"}, - {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"}, - {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"}, - {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"}, - {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"}, - {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"}, - {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"}, -] - -[package.dependencies] -numpy = ">=1.18.5,<1.26.0" - -[package.extras] -dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"] -doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"] -test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] - -[[package]] -name = "sentence-transformers" -version = "2.2.2" -description = "Multilingual text embeddings" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "sentence-transformers-2.2.2.tar.gz", hash = "sha256:dbc60163b27de21076c9a30d24b5b7b6fa05141d68cf2553fa9a77bf79a29136"}, -] - -[package.dependencies] -huggingface-hub = ">=0.4.0" -nltk = "*" -numpy = "*" -scikit-learn = "*" -scipy = "*" -sentencepiece = "*" -torch = ">=1.6.0" -torchvision = "*" -tqdm = "*" -transformers = ">=4.6.0,<5.0.0" - -[[package]] -name = "sentencepiece" -version = "0.1.99" -description = "SentencePiece python wrapper" -optional = false -python-versions = "*" -files = [ - {file = "sentencepiece-0.1.99-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0eb528e70571b7c02723e5804322469b82fe7ea418c96051d0286c0fa028db73"}, - {file = "sentencepiece-0.1.99-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77d7fafb2c4e4659cbdf303929503f37a26eabc4ff31d3a79bf1c5a1b338caa7"}, - {file = "sentencepiece-0.1.99-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be9cf5b9e404c245aeb3d3723c737ba7a8f5d4ba262ef233a431fa6c45f732a0"}, - {file = "sentencepiece-0.1.99-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baed1a26464998f9710d20e52607c29ffd4293e7c71c6a1f83f51ad0911ec12c"}, - {file = "sentencepiece-0.1.99-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9832f08bb372d4c8b567612f8eab9e36e268dff645f1c28f9f8e851be705f6d1"}, - {file = "sentencepiece-0.1.99-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:019e7535108e309dae2b253a75834fc3128240aa87c00eb80732078cdc182588"}, - {file = "sentencepiece-0.1.99-cp310-cp310-win32.whl", hash = "sha256:fa16a830416bb823fa2a52cbdd474d1f7f3bba527fd2304fb4b140dad31bb9bc"}, - {file = "sentencepiece-0.1.99-cp310-cp310-win_amd64.whl", hash = "sha256:14b0eccb7b641d4591c3e12ae44cab537d68352e4d3b6424944f0c447d2348d5"}, - {file = "sentencepiece-0.1.99-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6d3c56f24183a1e8bd61043ff2c58dfecdc68a5dd8955dc13bab83afd5f76b81"}, - {file = "sentencepiece-0.1.99-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed6ea1819fd612c989999e44a51bf556d0ef6abfb553080b9be3d347e18bcfb7"}, - {file = "sentencepiece-0.1.99-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2a0260cd1fb7bd8b4d4f39dc2444a8d5fd4e0a0c4d5c899810ef1abf99b2d45"}, - {file = "sentencepiece-0.1.99-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a1abff4d1ff81c77cac3cc6fefa34fa4b8b371e5ee51cb7e8d1ebc996d05983"}, - {file = "sentencepiece-0.1.99-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:004e6a621d4bc88978eecb6ea7959264239a17b70f2cbc348033d8195c9808ec"}, - {file = "sentencepiece-0.1.99-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db361e03342c41680afae5807590bc88aa0e17cfd1a42696a160e4005fcda03b"}, - {file = "sentencepiece-0.1.99-cp311-cp311-win32.whl", hash = "sha256:2d95e19168875b70df62916eb55428a0cbcb834ac51d5a7e664eda74def9e1e0"}, - {file = "sentencepiece-0.1.99-cp311-cp311-win_amd64.whl", hash = "sha256:f90d73a6f81248a909f55d8e6ef56fec32d559e1e9af045f0b0322637cb8e5c7"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:62e24c81e74bd87a6e0d63c51beb6527e4c0add67e1a17bac18bcd2076afcfeb"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57efcc2d51caff20d9573567d9fd3f854d9efe613ed58a439c78c9f93101384a"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a904c46197993bd1e95b93a6e373dca2f170379d64441041e2e628ad4afb16f"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89adf59854741c0d465f0e1525b388c0d174f611cc04af54153c5c4f36088c4"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-win32.whl", hash = "sha256:47c378146928690d1bc106fdf0da768cebd03b65dd8405aa3dd88f9c81e35dba"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-win_amd64.whl", hash = "sha256:9ba142e7a90dd6d823c44f9870abdad45e6c63958eb60fe44cca6828d3b69da2"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b7b1a9ae4d7c6f1f867e63370cca25cc17b6f4886729595b885ee07a58d3cec3"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0f644c9d4d35c096a538507b2163e6191512460035bf51358794a78515b74f7"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c8843d23a0f686d85e569bd6dcd0dd0e0cbc03731e63497ca6d5bacd18df8b85"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33e6f690a1caebb4867a2e367afa1918ad35be257ecdb3455d2bbd787936f155"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-win32.whl", hash = "sha256:8a321866c2f85da7beac74a824b4ad6ddc2a4c9bccd9382529506d48f744a12c"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-win_amd64.whl", hash = "sha256:c42f753bcfb7661c122a15b20be7f684b61fc8592c89c870adf52382ea72262d"}, - {file = "sentencepiece-0.1.99-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:85b476406da69c70586f0bb682fcca4c9b40e5059814f2db92303ea4585c650c"}, - {file = "sentencepiece-0.1.99-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cfbcfe13c69d3f87b7fcd5da168df7290a6d006329be71f90ba4f56bc77f8561"}, - {file = "sentencepiece-0.1.99-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:445b0ec381af1cd4eef95243e7180c63d9c384443c16c4c47a28196bd1cda937"}, - {file = "sentencepiece-0.1.99-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6890ea0f2b4703f62d0bf27932e35808b1f679bdb05c7eeb3812b935ba02001"}, - {file = "sentencepiece-0.1.99-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb71af492b0eefbf9f2501bec97bcd043b6812ab000d119eaf4bd33f9e283d03"}, - {file = "sentencepiece-0.1.99-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b866b5bd3ddd54166bbcbf5c8d7dd2e0b397fac8537991c7f544220b1f67bc"}, - {file = "sentencepiece-0.1.99-cp38-cp38-win32.whl", hash = "sha256:b133e8a499eac49c581c3c76e9bdd08c338cc1939e441fee6f92c0ccb5f1f8be"}, - {file = "sentencepiece-0.1.99-cp38-cp38-win_amd64.whl", hash = "sha256:0eaf3591dd0690a87f44f4df129cf8d05d8a4029b5b6709b489b8e27f9a9bcff"}, - {file = "sentencepiece-0.1.99-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38efeda9bbfb55052d482a009c6a37e52f42ebffcea9d3a98a61de7aee356a28"}, - {file = "sentencepiece-0.1.99-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c030b081dc1e1bcc9fadc314b19b740715d3d566ad73a482da20d7d46fd444c"}, - {file = "sentencepiece-0.1.99-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:84dbe53e02e4f8a2e45d2ac3e430d5c83182142658e25edd76539b7648928727"}, - {file = "sentencepiece-0.1.99-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b0f55d0a0ee1719b4b04221fe0c9f0c3461dc3dabd77a035fa2f4788eb3ef9a"}, - {file = "sentencepiece-0.1.99-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e800f206cd235dc27dc749299e05853a4e4332e8d3dfd81bf13d0e5b9007d9"}, - {file = "sentencepiece-0.1.99-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae1c40cda8f9d5b0423cfa98542735c0235e7597d79caf318855cdf971b2280"}, - {file = "sentencepiece-0.1.99-cp39-cp39-win32.whl", hash = "sha256:c84ce33af12ca222d14a1cdd37bd76a69401e32bc68fe61c67ef6b59402f4ab8"}, - {file = "sentencepiece-0.1.99-cp39-cp39-win_amd64.whl", hash = "sha256:350e5c74d739973f1c9643edb80f7cc904dc948578bcb1d43c6f2b173e5d18dd"}, - {file = "sentencepiece-0.1.99.tar.gz", hash = "sha256:189c48f5cb2949288f97ccdb97f0473098d9c3dcf5a3d99d4eabe719ec27297f"}, -] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "sqlalchemy" -version = "2.0.15" -description = "Database Abstraction Library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "SQLAlchemy-2.0.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78303719c6f72af97814b0072ad18bee72e70adca8d95cf8fecd59c5e1ddb040"}, - {file = "SQLAlchemy-2.0.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9d810b4aacd5ef4e293aa4ea01f19fca53999e9edcfc4a8ef1146238b30bdc28"}, - {file = "SQLAlchemy-2.0.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fb5d09f1d51480f711b69fe28ad42e4f8b08600a85ab2473baee669e1257800"}, - {file = "SQLAlchemy-2.0.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51b19887c96d405599880da6a7cbdf8545a7e78ec5683e46a43bac8885e32d0f"}, - {file = "SQLAlchemy-2.0.15-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d6b17cb86908e7f88be14007d6afe7d2ab11966e373044137f96a6a4d83eb21c"}, - {file = "SQLAlchemy-2.0.15-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df25052b92bd514357a9b370d74f240db890ea79aaa428fb893520e10ee5bc18"}, - {file = "SQLAlchemy-2.0.15-cp310-cp310-win32.whl", hash = "sha256:55ec62ddc0200b4fee94d11abbec7aa25948d5d21cb8df8807f4bdd3c51ba44b"}, - {file = "SQLAlchemy-2.0.15-cp310-cp310-win_amd64.whl", hash = "sha256:ae1d8deb391ab39cc8f0d5844e588a115ae3717e607d91482023917f920f777f"}, - {file = "SQLAlchemy-2.0.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4670ce853cb25f72115a1bbe366ae13cf3f28fc5c87222df14f8d3d55d51816e"}, - {file = "SQLAlchemy-2.0.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cea7c4a3dfc2ca61f88a2b1ddd6b0bfbd116c9b1a361b3b66fd826034b833142"}, - {file = "SQLAlchemy-2.0.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f5784dfb2d45c19cde03c45c04a54bf47428610106197ed6e6fa79f33bc63d3"}, - {file = "SQLAlchemy-2.0.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b31ebde27575b3b0708673ec14f0c305c4564d995b545148ab7ac0f4d9b847a"}, - {file = "SQLAlchemy-2.0.15-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b42913a0259267e9ee335da0c36498077799e59c5e332d506e72b4f32de781d"}, - {file = "SQLAlchemy-2.0.15-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a3f8020e013e9b3b7941dcf20b0fc8f7429daaf7158760846731cbd8caa5e45"}, - {file = "SQLAlchemy-2.0.15-cp311-cp311-win32.whl", hash = "sha256:88ab245ed2c96265441ed2818977be28c840cfa5204ba167425d6c26eb67b7e7"}, - {file = "SQLAlchemy-2.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:5cc48a7fda2b5c5b8860494d6c575db3a101a68416492105fed6591dc8a2728a"}, - {file = "SQLAlchemy-2.0.15-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f6fd3c88ea4b170d13527e93be1945e69facd917661d3725a63470eb683fbffe"}, - {file = "SQLAlchemy-2.0.15-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e885dacb167077df15af2f9ccdacbd7f5dd0d538a6d74b94074f2cefc7bb589"}, - {file = "SQLAlchemy-2.0.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:201a99f922ac8c780b3929128fbd9df901418877c70e160e19adb05665e51c31"}, - {file = "SQLAlchemy-2.0.15-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e17fdcb8971e77c439113642ca8861f9465e21fc693bd3916654ceef3ac26883"}, - {file = "SQLAlchemy-2.0.15-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db269f67ed17b07e80aaa8fba1f650c0d84aa0bdd9d5352e4ac38d5bf47ac568"}, - {file = "SQLAlchemy-2.0.15-cp37-cp37m-win32.whl", hash = "sha256:994a75b197662e0608b6a76935d7c345f7fd874eac0b7093d561033db61b0e8c"}, - {file = "SQLAlchemy-2.0.15-cp37-cp37m-win_amd64.whl", hash = "sha256:4d61731a35eddb0f667774fe15e5a4831e444d066081d1e809e1b8a0e3f97cae"}, - {file = "SQLAlchemy-2.0.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f7f994a53c0e6b44a2966fd6bfc53e37d34b7dca34e75b6be295de6db598255e"}, - {file = "SQLAlchemy-2.0.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:79bfe728219239bdc493950ea4a4d15b02138ecb304771f9024d0d6f5f4e3706"}, - {file = "SQLAlchemy-2.0.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d6320a1d175447dce63618ec997a53836de48ed3b44bbe952f0b4b399b19941"}, - {file = "SQLAlchemy-2.0.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f80a9c9a9af0e4bd5080cc0955ce70274c28e9b931ad7e0fb07021afcd32af6"}, - {file = "SQLAlchemy-2.0.15-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a75fdb9a84072521bb2ebd31eefe1165d4dccea3039dda701a864f4b5daa17f"}, - {file = "SQLAlchemy-2.0.15-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:21c89044fc48a25c2184eba332edeffbbf9367913bb065cd31538235d828f06f"}, - {file = "SQLAlchemy-2.0.15-cp38-cp38-win32.whl", hash = "sha256:1a0754c2d9f0c7982bec0a31138e495ed1f6b8435d7e677c45be60ec18370acf"}, - {file = "SQLAlchemy-2.0.15-cp38-cp38-win_amd64.whl", hash = "sha256:bc5c2b0da46c26c5f73f700834f871d0723e1e882641932468d56833bab09775"}, - {file = "SQLAlchemy-2.0.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:670ecf74ee2e70b917028a06446ad26ff9b1195e84b09c3139c215123d57dc30"}, - {file = "SQLAlchemy-2.0.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d14282bf5b4de87f922db3c70858953fd081ef4f05dba6cca3dd705daffe1cc9"}, - {file = "SQLAlchemy-2.0.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:256b2b9660e51ad7055a9835b12717416cf7288afcf465107413917b6bb2316f"}, - {file = "SQLAlchemy-2.0.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:810199d1c5b43603a9e815ae9487aef3ab1ade7ed9c0c485e12519358929fbfe"}, - {file = "SQLAlchemy-2.0.15-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:536c86ec81ca89291d533ff41a3a05f9e4e88e01906dcee0751fc7082f3e8d6c"}, - {file = "SQLAlchemy-2.0.15-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:435f6807fa6a0597d84741470f19db204a7d34625ea121abd63e8d95f673f0c4"}, - {file = "SQLAlchemy-2.0.15-cp39-cp39-win32.whl", hash = "sha256:da7381a883aee20b7d2ffda17d909b38134b6a625920e65239a1c681881df800"}, - {file = "SQLAlchemy-2.0.15-cp39-cp39-win_amd64.whl", hash = "sha256:788d1772fb8dcd12091ca82809eef504ce0f2c423e45284bc351b872966ff554"}, - {file = "SQLAlchemy-2.0.15-py3-none-any.whl", hash = "sha256:933d30273861fe61f014ce2a7e3c364915f5efe9ed250ec1066ca6ea5942c0bd"}, - {file = "SQLAlchemy-2.0.15.tar.gz", hash = "sha256:2e940a8659ef870ae10e0d9e2a6d5aaddf0ff6e91f7d0d7732afc9e8c4be9bbc"}, -] - -[package.dependencies] -greenlet = {version = "!=0.4.17", markers = "platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\""} -typing-extensions = ">=4.2.0" - -[package.extras] -aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] -aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] -asyncio = ["greenlet (!=0.4.17)"] -asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] -mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] -mssql = ["pyodbc"] -mssql-pymssql = ["pymssql"] -mssql-pyodbc = ["pyodbc"] -mypy = ["mypy (>=0.910)"] -mysql = ["mysqlclient (>=1.4.0)"] -mysql-connector = ["mysql-connector-python"] -oracle = ["cx-oracle (>=7)"] -oracle-oracledb = ["oracledb (>=1.0.1)"] -postgresql = ["psycopg2 (>=2.7)"] -postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] -postgresql-pg8000 = ["pg8000 (>=1.29.1)"] -postgresql-psycopg = ["psycopg (>=3.0.7)"] -postgresql-psycopg2binary = ["psycopg2-binary"] -postgresql-psycopg2cffi = ["psycopg2cffi"] -pymysql = ["pymysql"] -sqlcipher = ["sqlcipher3-binary"] - -[[package]] -name = "sympy" -version = "1.12" -description = "Computer algebra system (CAS) in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, - {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, -] - -[package.dependencies] -mpmath = ">=0.19" - -[[package]] -name = "threadpoolctl" -version = "3.1.0" -description = "threadpoolctl" -optional = false -python-versions = ">=3.6" -files = [ - {file = "threadpoolctl-3.1.0-py3-none-any.whl", hash = "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b"}, - {file = "threadpoolctl-3.1.0.tar.gz", hash = "sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380"}, -] - -[[package]] -name = "tokenizers" -version = "0.13.3" -description = "Fast and Customizable Tokenizers" -optional = false -python-versions = "*" -files = [ - {file = "tokenizers-0.13.3-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:f3835c5be51de8c0a092058a4d4380cb9244fb34681fd0a295fbf0a52a5fdf33"}, - {file = "tokenizers-0.13.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4ef4c3e821730f2692489e926b184321e887f34fb8a6b80b8096b966ba663d07"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5fd1a6a25353e9aa762e2aae5a1e63883cad9f4e997c447ec39d071020459bc"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee0b1b311d65beab83d7a41c56a1e46ab732a9eed4460648e8eb0bd69fc2d059"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ef4215284df1277dadbcc5e17d4882bda19f770d02348e73523f7e7d8b8d396"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4d53976079cff8a033f778fb9adca2d9d69d009c02fa2d71a878b5f3963ed30"}, - {file = "tokenizers-0.13.3-cp310-cp310-win32.whl", hash = "sha256:1f0e3b4c2ea2cd13238ce43548959c118069db7579e5d40ec270ad77da5833ce"}, - {file = "tokenizers-0.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:89649c00d0d7211e8186f7a75dfa1db6996f65edce4b84821817eadcc2d3c79e"}, - {file = "tokenizers-0.13.3-cp311-cp311-macosx_10_11_universal2.whl", hash = "sha256:56b726e0d2bbc9243872b0144515ba684af5b8d8cd112fb83ee1365e26ec74c8"}, - {file = "tokenizers-0.13.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cc5c022ce692e1f499d745af293ab9ee6f5d92538ed2faf73f9708c89ee59ce6"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55c981ac44ba87c93e847c333e58c12abcbb377a0c2f2ef96e1a266e4184ff2"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f247eae99800ef821a91f47c5280e9e9afaeed9980fc444208d5aa6ba69ff148"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b3e3215d048e94f40f1c95802e45dcc37c5b05eb46280fc2ccc8cd351bff839"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ba2b0bf01777c9b9bc94b53764d6684554ce98551fec496f71bc5be3a03e98b"}, - {file = "tokenizers-0.13.3-cp311-cp311-win32.whl", hash = "sha256:cc78d77f597d1c458bf0ea7c2a64b6aa06941c7a99cb135b5969b0278824d808"}, - {file = "tokenizers-0.13.3-cp311-cp311-win_amd64.whl", hash = "sha256:ecf182bf59bd541a8876deccf0360f5ae60496fd50b58510048020751cf1724c"}, - {file = "tokenizers-0.13.3-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:0527dc5436a1f6bf2c0327da3145687d3bcfbeab91fed8458920093de3901b44"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07cbb2c307627dc99b44b22ef05ff4473aa7c7cc1fec8f0a8b37d8a64b1a16d2"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4560dbdeaae5b7ee0d4e493027e3de6d53c991b5002d7ff95083c99e11dd5ac0"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64064bd0322405c9374305ab9b4c07152a1474370327499911937fd4a76d004b"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8c6e2ab0f2e3d939ca66aa1d596602105fe33b505cd2854a4c1717f704c51de"}, - {file = "tokenizers-0.13.3-cp37-cp37m-win32.whl", hash = "sha256:6cc29d410768f960db8677221e497226e545eaaea01aa3613fa0fdf2cc96cff4"}, - {file = "tokenizers-0.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fc2a7fdf864554a0dacf09d32e17c0caa9afe72baf9dd7ddedc61973bae352d8"}, - {file = "tokenizers-0.13.3-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:8791dedba834c1fc55e5f1521be325ea3dafb381964be20684b92fdac95d79b7"}, - {file = "tokenizers-0.13.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:d607a6a13718aeb20507bdf2b96162ead5145bbbfa26788d6b833f98b31b26e1"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3791338f809cd1bf8e4fee6b540b36822434d0c6c6bc47162448deee3f77d425"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2f35f30e39e6aab8716f07790f646bdc6e4a853816cc49a95ef2a9016bf9ce6"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:310204dfed5aa797128b65d63538a9837cbdd15da2a29a77d67eefa489edda26"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0f9b92ea052305166559f38498b3b0cae159caea712646648aaa272f7160963"}, - {file = "tokenizers-0.13.3-cp38-cp38-win32.whl", hash = "sha256:9a3fa134896c3c1f0da6e762d15141fbff30d094067c8f1157b9fdca593b5806"}, - {file = "tokenizers-0.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:8e7b0cdeace87fa9e760e6a605e0ae8fc14b7d72e9fc19c578116f7287bb873d"}, - {file = "tokenizers-0.13.3-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:00cee1e0859d55507e693a48fa4aef07060c4bb6bd93d80120e18fea9371c66d"}, - {file = "tokenizers-0.13.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:a23ff602d0797cea1d0506ce69b27523b07e70f6dda982ab8cf82402de839088"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ce07445050b537d2696022dafb115307abdffd2a5c106f029490f84501ef97"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:280ffe95f50eaaf655b3a1dc7ff1d9cf4777029dbbc3e63a74e65a056594abc3"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97acfcec592f7e9de8cadcdcda50a7134423ac8455c0166b28c9ff04d227b371"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd7730c98a3010cd4f523465867ff95cd9d6430db46676ce79358f65ae39797b"}, - {file = "tokenizers-0.13.3-cp39-cp39-win32.whl", hash = "sha256:48625a108029cb1ddf42e17a81b5a3230ba6888a70c9dc14e81bc319e812652d"}, - {file = "tokenizers-0.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:bc0a6f1ba036e482db6453571c9e3e60ecd5489980ffd95d11dc9f960483d783"}, - {file = "tokenizers-0.13.3.tar.gz", hash = "sha256:2e546dbb68b623008a5442353137fbb0123d311a6d7ba52f2667c8862a75af2e"}, -] - -[package.extras] -dev = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] -docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"] -testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] - -[[package]] -name = "torch" -version = "2.0.1" -description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "torch-2.0.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:8ced00b3ba471856b993822508f77c98f48a458623596a4c43136158781e306a"}, - {file = "torch-2.0.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:359bfaad94d1cda02ab775dc1cc386d585712329bb47b8741607ef6ef4950747"}, - {file = "torch-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:7c84e44d9002182edd859f3400deaa7410f5ec948a519cc7ef512c2f9b34d2c4"}, - {file = "torch-2.0.1-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:567f84d657edc5582d716900543e6e62353dbe275e61cdc36eda4929e46df9e7"}, - {file = "torch-2.0.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:787b5a78aa7917465e9b96399b883920c88a08f4eb63b5a5d2d1a16e27d2f89b"}, - {file = "torch-2.0.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:e617b1d0abaf6ced02dbb9486803abfef0d581609b09641b34fa315c9c40766d"}, - {file = "torch-2.0.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b6019b1de4978e96daa21d6a3ebb41e88a0b474898fe251fd96189587408873e"}, - {file = "torch-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:dbd68cbd1cd9da32fe5d294dd3411509b3d841baecb780b38b3b7b06c7754434"}, - {file = "torch-2.0.1-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:ef654427d91600129864644e35deea761fb1fe131710180b952a6f2e2207075e"}, - {file = "torch-2.0.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:25aa43ca80dcdf32f13da04c503ec7afdf8e77e3a0183dd85cd3e53b2842e527"}, - {file = "torch-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5ef3ea3d25441d3957348f7e99c7824d33798258a2bf5f0f0277cbcadad2e20d"}, - {file = "torch-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0882243755ff28895e8e6dc6bc26ebcf5aa0911ed81b2a12f241fc4b09075b13"}, - {file = "torch-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:f66aa6b9580a22b04d0af54fcd042f52406a8479e2b6a550e3d9f95963e168c8"}, - {file = "torch-2.0.1-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:1adb60d369f2650cac8e9a95b1d5758e25d526a34808f7448d0bd599e4ae9072"}, - {file = "torch-2.0.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:1bcffc16b89e296826b33b98db5166f990e3b72654a2b90673e817b16c50e32b"}, - {file = "torch-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:e10e1597f2175365285db1b24019eb6f04d53dcd626c735fc502f1e8b6be9875"}, - {file = "torch-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:423e0ae257b756bb45a4b49072046772d1ad0c592265c5080070e0767da4e490"}, - {file = "torch-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:8742bdc62946c93f75ff92da00e3803216c6cce9b132fbca69664ca38cfb3e18"}, - {file = "torch-2.0.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:c62df99352bd6ee5a5a8d1832452110435d178b5164de450831a3a8cc14dc680"}, - {file = "torch-2.0.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:671a2565e3f63b8fe8e42ae3e36ad249fe5e567435ea27b94edaa672a7d0c416"}, -] - -[package.dependencies] -filelock = "*" -jinja2 = "*" -networkx = "*" -sympy = "*" -typing-extensions = "*" - -[package.extras] -opt-einsum = ["opt-einsum (>=3.3)"] - -[[package]] -name = "torchvision" -version = "0.15.2" -description = "image and video datasets and models for torch deep learning" -optional = false -python-versions = ">=3.8" -files = [ - {file = "torchvision-0.15.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7754088774e810c5672b142a45dcf20b1bd986a5a7da90f8660c43dc43fb850c"}, - {file = "torchvision-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37eb138e13f6212537a3009ac218695483a635c404b6cc1d8e0d0d978026a86d"}, - {file = "torchvision-0.15.2-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:54143f7cc0797d199b98a53b7d21c3f97615762d4dd17ad45a41c7e80d880e73"}, - {file = "torchvision-0.15.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:1eefebf5fbd01a95fe8f003d623d941601c94b5cec547b420da89cb369d9cf96"}, - {file = "torchvision-0.15.2-cp310-cp310-win_amd64.whl", hash = "sha256:96fae30c5ca8423f4b9790df0f0d929748e32718d88709b7b567d2f630c042e3"}, - {file = "torchvision-0.15.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5f35f6bd5bcc4568e6522e4137fa60fcc72f4fa3e615321c26cd87e855acd398"}, - {file = "torchvision-0.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:757505a0ab2be7096cb9d2bf4723202c971cceddb72c7952a7e877f773de0f8a"}, - {file = "torchvision-0.15.2-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:012ad25cfd9019ff9b0714a168727e3845029be1af82296ff1e1482931fa4b80"}, - {file = "torchvision-0.15.2-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b02a7ffeaa61448737f39a4210b8ee60234bda0515a0c0d8562f884454105b0f"}, - {file = "torchvision-0.15.2-cp311-cp311-win_amd64.whl", hash = "sha256:10be76ceded48329d0a0355ac33da131ee3993ff6c125e4a02ab34b5baa2472c"}, - {file = "torchvision-0.15.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f12415b686dba884fb086f53ac803f692be5a5cdd8a758f50812b30fffea2e4"}, - {file = "torchvision-0.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:31211c01f8b8ec33b8a638327b5463212e79a03e43c895f88049f97af1bd12fd"}, - {file = "torchvision-0.15.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:c55f9889e436f14b4f84a9c00ebad0d31f5b4626f10cf8018e6c676f92a6d199"}, - {file = "torchvision-0.15.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:9a192f2aa979438f23c20e883980b23d13268ab9f819498774a6d2eb021802c2"}, - {file = "torchvision-0.15.2-cp38-cp38-win_amd64.whl", hash = "sha256:c07071bc8d02aa8fcdfe139ab6a1ef57d3b64c9e30e84d12d45c9f4d89fb6536"}, - {file = "torchvision-0.15.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4790260fcf478a41c7ecc60a6d5200a88159fdd8d756e9f29f0f8c59c4a67a68"}, - {file = "torchvision-0.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:987ab62225b4151a11e53fd06150c5258ced24ac9d7c547e0e4ab6fbca92a5ce"}, - {file = "torchvision-0.15.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:63df26673e66cba3f17e07c327a8cafa3cce98265dbc3da329f1951d45966838"}, - {file = "torchvision-0.15.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b85f98d4cc2f72452f6792ab4463a3541bc5678a8cdd3da0e139ba2fe8b56d42"}, - {file = "torchvision-0.15.2-cp39-cp39-win_amd64.whl", hash = "sha256:07c462524cc1bba5190c16a9d47eac1fca024d60595a310f23c00b4ffff18b30"}, -] - -[package.dependencies] -numpy = "*" -pillow = ">=5.3.0,<8.3.dev0 || >=8.4.dev0" -requests = "*" -torch = "2.0.1" - -[package.extras] -scipy = ["scipy"] - -[[package]] -name = "tqdm" -version = "4.65.0" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, - {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "transformers" -version = "4.30.0" -description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "transformers-4.30.0-py3-none-any.whl", hash = "sha256:e90e9fc05310985f3ede2da278d11c91656b4a354b4935c54604f57409299aae"}, - {file = "transformers-4.30.0.tar.gz", hash = "sha256:478e1709738237aa1b7bae1fd0ba7bd9d44352fe45972df7ed060077257e84f9"}, -] - -[package.dependencies] -filelock = "*" -huggingface-hub = ">=0.14.1,<1.0" -numpy = ">=1.17" -packaging = ">=20.0" -pyyaml = ">=5.1" -regex = "!=2019.12.17" -requests = "*" -safetensors = ">=0.3.1" -tokenizers = ">=0.11.1,<0.11.3 || >0.11.3,<0.14" -tqdm = ">=4.27" - -[package.extras] -accelerate = ["accelerate (>=0.20.2)"] -agents = ["Pillow", "accelerate (>=0.20.2)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.9,!=1.12.0)"] -all = ["Pillow", "accelerate (>=0.20.2)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.6.9)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf (<=3.20.3)", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision"] -audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] -codecarbon = ["codecarbon (==1.2.0)"] -deepspeed = ["accelerate (>=0.20.2)", "deepspeed (>=0.8.3)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.20.2)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.8.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf (<=3.20.3)", "psutil", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow", "accelerate (>=0.20.2)", "av (==9.2.0)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.6.9)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf (<=3.20.3)", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorflow (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf (<=3.20.3)", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorflow (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow", "accelerate (>=0.20.2)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf (<=3.20.3)", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "timeout-decorator", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -docs = ["Pillow", "accelerate (>=0.20.2)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.6.9)", "hf-doc-builder", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf (<=3.20.3)", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision"] -docs-specific = ["hf-doc-builder"] -fairscale = ["fairscale (>0.3)"] -flax = ["flax (>=0.4.1,<=0.6.9)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "optax (>=0.0.8,<=0.1.4)"] -flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] -ftfy = ["ftfy"] -integrations = ["optuna", "ray[tune]", "sigopt"] -ja = ["fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "rhoknp (>=1.1.0,<1.3.1)", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"] -modelcreation = ["cookiecutter (==1.7.3)"] -natten = ["natten (>=0.14.6)"] -onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"] -onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] -optuna = ["optuna"] -quality = ["GitPython (<3.1.19)", "black (>=23.1,<24.0)", "datasets (!=2.5.0)", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "ruff (>=0.0.241,<=0.0.259)", "urllib3 (<2.0.0)"] -ray = ["ray[tune]"] -retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] -sagemaker = ["sagemaker (>=2.31.0)"] -sentencepiece = ["protobuf (<=3.20.3)", "sentencepiece (>=0.1.91,!=0.1.92)"] -serving = ["fastapi", "pydantic", "starlette", "uvicorn"] -sigopt = ["sigopt"] -sklearn = ["scikit-learn"] -speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf (<=3.20.3)", "psutil", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "timeout-decorator"] -tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx"] -tf-cpu = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx"] -tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] -timm = ["timm"] -tokenizers = ["tokenizers (>=0.11.1,!=0.11.3,<0.14)"] -torch = ["accelerate (>=0.20.2)", "torch (>=1.9,!=1.12.0)"] -torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -torch-vision = ["Pillow", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.14.1,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf (<=3.20.3)", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "tqdm (>=4.27)"] -video = ["av (==9.2.0)", "decord (==0.6.0)"] -vision = ["Pillow"] - -[[package]] -name = "typing-extensions" -version = "4.6.1" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.6.1-py3-none-any.whl", hash = "sha256:6bac751f4789b135c43228e72de18637e9a6c29d12777023a703fd1a6858469f"}, - {file = "typing_extensions-4.6.1.tar.gz", hash = "sha256:558bc0c4145f01e6405f4a5fdbd82050bd221b119f4bf72a961a1cfd471349d6"}, -] - -[[package]] -name = "urllib3" -version = "2.0.2" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.7" -files = [ - {file = "urllib3-2.0.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"}, - {file = "urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "vecs" -version = "0.2.4" -description = "pgvector client" -optional = false -python-versions = "*" -files = [ - {file = "vecs-0.2.4.tar.gz", hash = "sha256:bc27959bb35cf31cb29e0286ccae6afa07bc7f306bdf0fb5f302e783f124b3ce"}, -] - -[package.dependencies] -flupy = "==1.*" -pgvector = "==0.1.*" -psycopg2-binary = "==2.9.*" -sqlalchemy = "==2.*" - -[package.extras] -dev = ["numpy", "parse", "pytest", "pytest-cov"] -docs = ["mkdocs", "pygments", "pymarkdown", "pymdown-extensions"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.11" -content-hash = "1cd636f8213f5615ff8932ed8e03b13fc2a5af665c438a89e9544c55a00c7c0b" diff --git a/examples/ai/image_search/pyproject.toml b/examples/ai/image_search/pyproject.toml deleted file mode 100644 index 54c6b18df3caa..0000000000000 --- a/examples/ai/image_search/pyproject.toml +++ /dev/null @@ -1,21 +0,0 @@ -[tool.poetry] -name = "image-search" -version = "0.1.0" -description = "Image Search with Supabase Vector" -authors = ["thorwebdev "] -readme = "README.md" -packages = [{include = "image_search"}] - -[tool.poetry.dependencies] -python = "^3.11" -sentence-transformers = "^2.2.2" -vecs = "^0.2.4" -matplotlib = "^3.7.1" - -[tool.poetry.scripts] -seed = "image_search.main:seed" -search = "image_search.main:search" - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" diff --git a/examples/ai/image_search/supabase/config.toml b/examples/ai/image_search/supabase/config.toml deleted file mode 100644 index a9afc1b415387..0000000000000 --- a/examples/ai/image_search/supabase/config.toml +++ /dev/null @@ -1,82 +0,0 @@ -# A string used to distinguish different Supabase projects on the same host. Defaults to the working -# directory name when running `supabase init`. -project_id = "image_search" - -[api] -# Port to use for the API URL. -port = 54321 -# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API -# endpoints. public and storage are always included. -schemas = ["public", "storage", "graphql_public"] -# Extra schemas to add to the search_path of every request. public is always included. -extra_search_path = ["public", "extensions"] -# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size -# for accidental or malicious requests. -max_rows = 1000 - -[db] -# Port to use for the local database URL. -port = 54322 -# The database major version to use. This has to be the same as your remote database's. Run `SHOW -# server_version;` on the remote database to check. -major_version = 15 - -[studio] -# Port to use for Supabase Studio. -port = 54323 - -# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they -# are monitored, and you can view the emails that would have been sent from the web interface. -[inbucket] -# Port to use for the email testing server web interface. -port = 54324 -smtp_port = 54325 -pop3_port = 54326 - -[storage] -# The maximum file size allowed (e.g. "5MB", "500KB"). -file_size_limit = "50MiB" - -[auth] -# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used -# in emails. -site_url = "http://localhost:3000" -# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. -additional_redirect_urls = ["https://localhost:3000"] -# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one -# week). -jwt_expiry = 3600 -# Allow/disallow new user signups to your project. -enable_signup = true - -[auth.email] -# Allow/disallow new user signups via email to your project. -enable_signup = true -# If enabled, a user will be required to confirm any email change on both the old, and new email -# addresses. If disabled, only the new email is required to confirm. -double_confirm_changes = true -# If enabled, users need to confirm their email address before signing in. -enable_confirmations = false - -# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, -# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, `twitch`, -# `twitter`, `slack`, `spotify`, `workos`, `zoom`. -[auth.external.apple] -enabled = false -client_id = "" -secret = "" -# Overrides the default auth redirectUrl. -redirect_uri = "" -# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, -# or any other third-party OIDC providers. -url = "" - -[analytics] -enabled = false -port = 54327 -vector_port = 54328 -# Setup BigQuery project to enable log viewer on local development stack. -# See: https://logflare.app/guides/bigquery-setup -gcp_project_id = "" -gcp_project_number = "" -gcp_jwt_path = "supabase/gcloud.json" diff --git a/examples/ai/image_search/supabase/seed.sql b/examples/ai/image_search/supabase/seed.sql deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/examples/ai/image_search/tests/__init__.py b/examples/ai/image_search/tests/__init__.py deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/examples/ai/llamaindex/data/paul_graham_essay.txt b/examples/ai/llamaindex/data/paul_graham_essay.txt deleted file mode 100644 index 0a1bb7d3fc7b6..0000000000000 --- a/examples/ai/llamaindex/data/paul_graham_essay.txt +++ /dev/null @@ -1,356 +0,0 @@ - - -What I Worked On - -February 2021 - -Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep. - -The first programs I tried writing were on the IBM 1401 that our school district used for what was then called "data processing." This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights. - -The language we used was an early version of Fortran. You had to type programs on punch cards, then stack them in the card reader and press a button to load the program into memory and run it. The result would ordinarily be to print something on the spectacularly loud printer. - -I was puzzled by the 1401. I couldn't figure out what to do with it. And in retrospect there's not much I could have done with it. The only form of input to programs was data stored on punched cards, and I didn't have any data stored on punched cards. The only other option was to do things that didn't rely on any input, like calculate approximations of pi, but I didn't know enough math to do anything interesting of that type. So I'm not surprised I can't remember any programs I wrote, because they can't have done much. My clearest memory is of the moment I learned it was possible for programs not to terminate, when one of mine didn't. On a machine without time-sharing, this was a social as well as a technical error, as the data center manager's expression made clear. - -With microcomputers, everything changed. Now you could have a computer sitting right in front of you, on a desk, that could respond to your keystrokes as it was running instead of just churning through a stack of punch cards and then stopping. [1] - -The first of my friends to get a microcomputer built it himself. It was sold as a kit by Heathkit. I remember vividly how impressed and envious I felt watching him sitting in front of it, typing programs right into the computer. - -Computers were expensive in those days and it took me years of nagging before I convinced my father to buy one, a TRS-80, in about 1980. The gold standard then was the Apple II, but a TRS-80 was good enough. This was when I really started programming. I wrote simple games, a program to predict how high my model rockets would fly, and a word processor that my father used to write at least one book. There was only room in memory for about 2 pages of text, so he'd write 2 pages at a time and then print them out, but it was a lot better than a typewriter. - -Though I liked programming, I didn't plan to study it in college. In college I was going to study philosophy, which sounded much more powerful. It seemed, to my naive high school self, to be the study of the ultimate truths, compared to which the things studied in other fields would be mere domain knowledge. What I discovered when I got to college was that the other fields took up so much of the space of ideas that there wasn't much left for these supposed ultimate truths. All that seemed left for philosophy were edge cases that people in other fields felt could safely be ignored. - -I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI. - -AI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words. - -There weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of AI. The commonly used programming languages then were pretty primitive, and programmers' ideas correspondingly so. The default language at Cornell was a Pascal-like language called PL/I, and the situation was similar elsewhere. Learning Lisp expanded my concept of a program so fast that it was years before I started to have a sense of where the new limits were. This was more like it; this was what I had expected college to do. It wasn't happening in a class, like it was supposed to, but that was ok. For the next couple years I was on a roll. I knew what I was going to do. - -For my undergraduate thesis, I reverse-engineered SHRDLU. My God did I love working on that program. It was a pleasing bit of code, but what made it even more exciting was my belief — hard to imagine now, but not unique in 1985 — that it was already climbing the lower slopes of intelligence. - -I had gotten into a program at Cornell that didn't make you choose a major. You could take whatever classes you liked, and choose whatever you liked to put on your degree. I of course chose "Artificial Intelligence." When I got the actual physical diploma, I was dismayed to find that the quotes had been included, which made them read as scare-quotes. At the time this bothered me, but now it seems amusingly accurate, for reasons I was about to discover. - -I applied to 3 grad schools: MIT and Yale, which were renowned for AI at the time, and Harvard, which I'd visited because Rich Draves went there, and was also home to Bill Woods, who'd invented the type of parser I used in my SHRDLU clone. Only Harvard accepted me, so that was where I went. - -I don't remember the moment it happened, or if there even was a specific moment, but during the first year of grad school I realized that AI, as practiced at the time, was a hoax. By which I mean the sort of AI in which a program that's told "the dog is sitting on the chair" translates this into some formal representation and adds it to the list of things it knows. - -What these programs really showed was that there's a subset of natural language that's a formal language. But a very proper subset. It was clear that there was an unbridgeable gap between what they could do and actually understanding natural language. It was not, in fact, simply a matter of teaching SHRDLU more words. That whole way of doing AI, with explicit data structures representing concepts, was not going to work. Its brokenness did, as so often happens, generate a lot of opportunities to write papers about various band-aids that could be applied to it, but it was never going to get us Mike. - -So I looked around to see what I could salvage from the wreckage of my plans, and there was Lisp. I knew from experience that Lisp was interesting for its own sake and not just for its association with AI, even though that was the main reason people cared about it at the time. So I decided to focus on Lisp. In fact, I decided to write a book about Lisp hacking. It's scary to think how little I knew about Lisp hacking when I started writing that book. But there's nothing like writing a book about something to help you learn it. The book, On Lisp, wasn't published till 1993, but I wrote much of it in grad school. - -Computer Science is an uneasy alliance between two halves, theory and systems. The theory people prove things, and the systems people build things. I wanted to build things. I had plenty of respect for theory — indeed, a sneaking suspicion that it was the more admirable of the two halves — but building things seemed so much more exciting. - -The problem with systems work, though, was that it didn't last. Any program you wrote today, no matter how good, would be obsolete in a couple decades at best. People might mention your software in footnotes, but no one would actually use it. And indeed, it would seem very feeble work. Only people with a sense of the history of the field would even realize that, in its time, it had been good. - -There were some surplus Xerox Dandelions floating around the computer lab at one point. Anyone who wanted one to play around with could have one. I was briefly tempted, but they were so slow by present standards; what was the point? No one else wanted one either, so off they went. That was what happened to systems work. - -I wanted not just to build things, but to build things that would last. - -In this dissatisfied state I went in 1988 to visit Rich Draves at CMU, where he was in grad school. One day I went to visit the Carnegie Institute, where I'd spent a lot of time as a kid. While looking at a painting there I realized something that might seem obvious, but was a big surprise to me. There, right on the wall, was something you could make that would last. Paintings didn't become obsolete. Some of the best ones were hundreds of years old. - -And moreover this was something you could make a living doing. Not as easily as you could by writing software, of course, but I thought if you were really industrious and lived really cheaply, it had to be possible to make enough to survive. And as an artist you could be truly independent. You wouldn't have a boss, or even need to get research funding. - -I had always liked looking at paintings. Could I make them? I had no idea. I'd never imagined it was even possible. I knew intellectually that people made art — that it didn't just appear spontaneously — but it was as if the people who made it were a different species. They either lived long ago or were mysterious geniuses doing strange things in profiles in Life magazine. The idea of actually being able to make art, to put that verb before that noun, seemed almost miraculous. - -That fall I started taking art classes at Harvard. Grad students could take classes in any department, and my advisor, Tom Cheatham, was very easy going. If he even knew about the strange classes I was taking, he never said anything. - -So now I was in a PhD program in computer science, yet planning to be an artist, yet also genuinely in love with Lisp hacking and working away at On Lisp. In other words, like many a grad student, I was working energetically on multiple projects that were not my thesis. - -I didn't see a way out of this situation. I didn't want to drop out of grad school, but how else was I going to get out? I remember when my friend Robert Morris got kicked out of Cornell for writing the internet worm of 1988, I was envious that he'd found such a spectacular way to get out of grad school. - -Then one day in April 1990 a crack appeared in the wall. I ran into professor Cheatham and he asked if I was far enough along to graduate that June. I didn't have a word of my dissertation written, but in what must have been the quickest bit of thinking in my life, I decided to take a shot at writing one in the 5 weeks or so that remained before the deadline, reusing parts of On Lisp where I could, and I was able to respond, with no perceptible delay "Yes, I think so. I'll give you something to read in a few days." - -I picked applications of continuations as the topic. In retrospect I should have written about macros and embedded languages. There's a whole world there that's barely been explored. But all I wanted was to get out of grad school, and my rapidly written dissertation sufficed, just barely. - -Meanwhile I was applying to art schools. I applied to two: RISD in the US, and the Accademia di Belli Arti in Florence, which, because it was the oldest art school, I imagined would be good. RISD accepted me, and I never heard back from the Accademia, so off to Providence I went. - -I'd applied for the BFA program at RISD, which meant in effect that I had to go to college again. This was not as strange as it sounds, because I was only 25, and art schools are full of people of different ages. RISD counted me as a transfer sophomore and said I had to do the foundation that summer. The foundation means the classes that everyone has to take in fundamental subjects like drawing, color, and design. - -Toward the end of the summer I got a big surprise: a letter from the Accademia, which had been delayed because they'd sent it to Cambridge England instead of Cambridge Massachusetts, inviting me to take the entrance exam in Florence that fall. This was now only weeks away. My nice landlady let me leave my stuff in her attic. I had some money saved from consulting work I'd done in grad school; there was probably enough to last a year if I lived cheaply. Now all I had to do was learn Italian. - -Only stranieri (foreigners) had to take this entrance exam. In retrospect it may well have been a way of excluding them, because there were so many stranieri attracted by the idea of studying art in Florence that the Italian students would otherwise have been outnumbered. I was in decent shape at painting and drawing from the RISD foundation that summer, but I still don't know how I managed to pass the written exam. I remember that I answered the essay question by writing about Cezanne, and that I cranked up the intellectual level as high as I could to make the most of my limited vocabulary. [2] - -I'm only up to age 25 and already there are such conspicuous patterns. Here I was, yet again about to attend some august institution in the hopes of learning about some prestigious subject, and yet again about to be disappointed. The students and faculty in the painting department at the Accademia were the nicest people you could imagine, but they had long since arrived at an arrangement whereby the students wouldn't require the faculty to teach anything, and in return the faculty wouldn't require the students to learn anything. And at the same time all involved would adhere outwardly to the conventions of a 19th century atelier. We actually had one of those little stoves, fed with kindling, that you see in 19th century studio paintings, and a nude model sitting as close to it as possible without getting burned. Except hardly anyone else painted her besides me. The rest of the students spent their time chatting or occasionally trying to imitate things they'd seen in American art magazines. - -Our model turned out to live just down the street from me. She made a living from a combination of modelling and making fakes for a local antique dealer. She'd copy an obscure old painting out of a book, and then he'd take the copy and maltreat it to make it look old. [3] - -While I was a student at the Accademia I started painting still lives in my bedroom at night. These paintings were tiny, because the room was, and because I painted them on leftover scraps of canvas, which was all I could afford at the time. Painting still lives is different from painting people, because the subject, as its name suggests, can't move. People can't sit for more than about 15 minutes at a time, and when they do they don't sit very still. So the traditional m.o. for painting people is to know how to paint a generic person, which you then modify to match the specific person you're painting. Whereas a still life you can, if you want, copy pixel by pixel from what you're seeing. You don't want to stop there, of course, or you get merely photographic accuracy, and what makes a still life interesting is that it's been through a head. You want to emphasize the visual cues that tell you, for example, that the reason the color changes suddenly at a certain point is that it's the edge of an object. By subtly emphasizing such things you can make paintings that are more realistic than photographs not just in some metaphorical sense, but in the strict information-theoretic sense. [4] - -I liked painting still lives because I was curious about what I was seeing. In everyday life, we aren't consciously aware of much we're seeing. Most visual perception is handled by low-level processes that merely tell your brain "that's a water droplet" without telling you details like where the lightest and darkest points are, or "that's a bush" without telling you the shape and position of every leaf. This is a feature of brains, not a bug. In everyday life it would be distracting to notice every leaf on every bush. But when you have to paint something, you have to look more closely, and when you do there's a lot to see. You can still be noticing new things after days of trying to paint something people usually take for granted, just as you can after days of trying to write an essay about something people usually take for granted. - -This is not the only way to paint. I'm not 100% sure it's even a good way to paint. But it seemed a good enough bet to be worth trying. - -Our teacher, professor Ulivi, was a nice guy. He could see I worked hard, and gave me a good grade, which he wrote down in a sort of passport each student had. But the Accademia wasn't teaching me anything except Italian, and my money was running out, so at the end of the first year I went back to the US. - -I wanted to go back to RISD, but I was now broke and RISD was very expensive, so I decided to get a job for a year and then return to RISD the next fall. I got one at a company called Interleaf, which made software for creating documents. You mean like Microsoft Word? Exactly. That was how I learned that low end software tends to eat high end software. But Interleaf still had a few years to live yet. [5] - -Interleaf had done something pretty bold. Inspired by Emacs, they'd added a scripting language, and even made the scripting language a dialect of Lisp. Now they wanted a Lisp hacker to write things in it. This was the closest thing I've had to a normal job, and I hereby apologize to my boss and coworkers, because I was a bad employee. Their Lisp was the thinnest icing on a giant C cake, and since I didn't know C and didn't want to learn it, I never understood most of the software. Plus I was terribly irresponsible. This was back when a programming job meant showing up every day during certain working hours. That seemed unnatural to me, and on this point the rest of the world is coming around to my way of thinking, but at the time it caused a lot of friction. Toward the end of the year I spent much of my time surreptitiously working on On Lisp, which I had by this time gotten a contract to publish. - -The good part was that I got paid huge amounts of money, especially by art student standards. In Florence, after paying my part of the rent, my budget for everything else had been $7 a day. Now I was getting paid more than 4 times that every hour, even when I was just sitting in a meeting. By living cheaply I not only managed to save enough to go back to RISD, but also paid off my college loans. - -I learned some useful things at Interleaf, though they were mostly about what not to do. I learned that it's better for technology companies to be run by product people than sales people (though sales is a real skill and people who are good at it are really good at it), that it leads to bugs when code is edited by too many people, that cheap office space is no bargain if it's depressing, that planned meetings are inferior to corridor conversations, that big, bureaucratic customers are a dangerous source of money, and that there's not much overlap between conventional office hours and the optimal time for hacking, or conventional offices and the optimal place for it. - -But the most important thing I learned, and which I used in both Viaweb and Y Combinator, is that the low end eats the high end: that it's good to be the "entry level" option, even though that will be less prestigious, because if you're not, someone else will be, and will squash you against the ceiling. Which in turn means that prestige is a danger sign. - -When I left to go back to RISD the next fall, I arranged to do freelance work for the group that did projects for customers, and this was how I survived for the next several years. When I came back to visit for a project later on, someone told me about a new thing called HTML, which was, as he described it, a derivative of SGML. Markup language enthusiasts were an occupational hazard at Interleaf and I ignored him, but this HTML thing later became a big part of my life. - -In the fall of 1992 I moved back to Providence to continue at RISD. The foundation had merely been intro stuff, and the Accademia had been a (very civilized) joke. Now I was going to see what real art school was like. But alas it was more like the Accademia than not. Better organized, certainly, and a lot more expensive, but it was now becoming clear that art school did not bear the same relationship to art that medical school bore to medicine. At least not the painting department. The textile department, which my next door neighbor belonged to, seemed to be pretty rigorous. No doubt illustration and architecture were too. But painting was post-rigorous. Painting students were supposed to express themselves, which to the more worldly ones meant to try to cook up some sort of distinctive signature style. - -A signature style is the visual equivalent of what in show business is known as a "schtick": something that immediately identifies the work as yours and no one else's. For example, when you see a painting that looks like a certain kind of cartoon, you know it's by Roy Lichtenstein. So if you see a big painting of this type hanging in the apartment of a hedge fund manager, you know he paid millions of dollars for it. That's not always why artists have a signature style, but it's usually why buyers pay a lot for such work. [6] - -There were plenty of earnest students too: kids who "could draw" in high school, and now had come to what was supposed to be the best art school in the country, to learn to draw even better. They tended to be confused and demoralized by what they found at RISD, but they kept going, because painting was what they did. I was not one of the kids who could draw in high school, but at RISD I was definitely closer to their tribe than the tribe of signature style seekers. - -I learned a lot in the color class I took at RISD, but otherwise I was basically teaching myself to paint, and I could do that for free. So in 1993 I dropped out. I hung around Providence for a bit, and then my college friend Nancy Parmet did me a big favor. A rent-controlled apartment in a building her mother owned in New York was becoming vacant. Did I want it? It wasn't much more than my current place, and New York was supposed to be where the artists were. So yes, I wanted it! [7] - -Asterix comics begin by zooming in on a tiny corner of Roman Gaul that turns out not to be controlled by the Romans. You can do something similar on a map of New York City: if you zoom in on the Upper East Side, there's a tiny corner that's not rich, or at least wasn't in 1993. It's called Yorkville, and that was my new home. Now I was a New York artist — in the strictly technical sense of making paintings and living in New York. - -I was nervous about money, because I could sense that Interleaf was on the way down. Freelance Lisp hacking work was very rare, and I didn't want to have to program in another language, which in those days would have meant C++ if I was lucky. So with my unerring nose for financial opportunity, I decided to write another book on Lisp. This would be a popular book, the sort of book that could be used as a textbook. I imagined myself living frugally off the royalties and spending all my time painting. (The painting on the cover of this book, ANSI Common Lisp, is one that I painted around this time.) - -The best thing about New York for me was the presence of Idelle and Julian Weber. Idelle Weber was a painter, one of the early photorealists, and I'd taken her painting class at Harvard. I've never known a teacher more beloved by her students. Large numbers of former students kept in touch with her, including me. After I moved to New York I became her de facto studio assistant. - -She liked to paint on big, square canvases, 4 to 5 feet on a side. One day in late 1994 as I was stretching one of these monsters there was something on the radio about a famous fund manager. He wasn't that much older than me, and was super rich. The thought suddenly occurred to me: why don't I become rich? Then I'll be able to work on whatever I want. - -Meanwhile I'd been hearing more and more about this new thing called the World Wide Web. Robert Morris showed it to me when I visited him in Cambridge, where he was now in grad school at Harvard. It seemed to me that the web would be a big deal. I'd seen what graphical user interfaces had done for the popularity of microcomputers. It seemed like the web would do the same for the internet. - -If I wanted to get rich, here was the next train leaving the station. I was right about that part. What I got wrong was the idea. I decided we should start a company to put art galleries online. I can't honestly say, after reading so many Y Combinator applications, that this was the worst startup idea ever, but it was up there. Art galleries didn't want to be online, and still don't, not the fancy ones. That's not how they sell. I wrote some software to generate web sites for galleries, and Robert wrote some to resize images and set up an http server to serve the pages. Then we tried to sign up galleries. To call this a difficult sale would be an understatement. It was difficult to give away. A few galleries let us make sites for them for free, but none paid us. - -Then some online stores started to appear, and I realized that except for the order buttons they were identical to the sites we'd been generating for galleries. This impressive-sounding thing called an "internet storefront" was something we already knew how to build. - -So in the summer of 1995, after I submitted the camera-ready copy of ANSI Common Lisp to the publishers, we started trying to write software to build online stores. At first this was going to be normal desktop software, which in those days meant Windows software. That was an alarming prospect, because neither of us knew how to write Windows software or wanted to learn. We lived in the Unix world. But we decided we'd at least try writing a prototype store builder on Unix. Robert wrote a shopping cart, and I wrote a new site generator for stores — in Lisp, of course. - -We were working out of Robert's apartment in Cambridge. His roommate was away for big chunks of time, during which I got to sleep in his room. For some reason there was no bed frame or sheets, just a mattress on the floor. One morning as I was lying on this mattress I had an idea that made me sit up like a capital L. What if we ran the software on the server, and let users control it by clicking on links? Then we'd never have to write anything to run on users' computers. We could generate the sites on the same server we'd serve them from. Users wouldn't need anything more than a browser. - -This kind of software, known as a web app, is common now, but at the time it wasn't clear that it was even possible. To find out, we decided to try making a version of our store builder that you could control through the browser. A couple days later, on August 12, we had one that worked. The UI was horrible, but it proved you could build a whole store through the browser, without any client software or typing anything into the command line on the server. - -Now we felt like we were really onto something. I had visions of a whole new generation of software working this way. You wouldn't need versions, or ports, or any of that crap. At Interleaf there had been a whole group called Release Engineering that seemed to be at least as big as the group that actually wrote the software. Now you could just update the software right on the server. - -We started a new company we called Viaweb, after the fact that our software worked via the web, and we got $10,000 in seed funding from Idelle's husband Julian. In return for that and doing the initial legal work and giving us business advice, we gave him 10% of the company. Ten years later this deal became the model for Y Combinator's. We knew founders needed something like this, because we'd needed it ourselves. - -At this stage I had a negative net worth, because the thousand dollars or so I had in the bank was more than counterbalanced by what I owed the government in taxes. (Had I diligently set aside the proper proportion of the money I'd made consulting for Interleaf? No, I had not.) So although Robert had his graduate student stipend, I needed that seed funding to live on. - -We originally hoped to launch in September, but we got more ambitious about the software as we worked on it. Eventually we managed to build a WYSIWYG site builder, in the sense that as you were creating pages, they looked exactly like the static ones that would be generated later, except that instead of leading to static pages, the links all referred to closures stored in a hash table on the server. - -It helped to have studied art, because the main goal of an online store builder is to make users look legit, and the key to looking legit is high production values. If you get page layouts and fonts and colors right, you can make a guy running a store out of his bedroom look more legit than a big company. - -(If you're curious why my site looks so old-fashioned, it's because it's still made with this software. It may look clunky today, but in 1996 it was the last word in slick.) - -In September, Robert rebelled. "We've been working on this for a month," he said, "and it's still not done." This is funny in retrospect, because he would still be working on it almost 3 years later. But I decided it might be prudent to recruit more programmers, and I asked Robert who else in grad school with him was really good. He recommended Trevor Blackwell, which surprised me at first, because at that point I knew Trevor mainly for his plan to reduce everything in his life to a stack of notecards, which he carried around with him. But Rtm was right, as usual. Trevor turned out to be a frighteningly effective hacker. - -It was a lot of fun working with Robert and Trevor. They're the two most independent-minded people I know, and in completely different ways. If you could see inside Rtm's brain it would look like a colonial New England church, and if you could see inside Trevor's it would look like the worst excesses of Austrian Rococo. - -We opened for business, with 6 stores, in January 1996. It was just as well we waited a few months, because although we worried we were late, we were actually almost fatally early. There was a lot of talk in the press then about ecommerce, but not many people actually wanted online stores. [8] - -There were three main parts to the software: the editor, which people used to build sites and which I wrote, the shopping cart, which Robert wrote, and the manager, which kept track of orders and statistics, and which Trevor wrote. In its time, the editor was one of the best general-purpose site builders. I kept the code tight and didn't have to integrate with any other software except Robert's and Trevor's, so it was quite fun to work on. If all I'd had to do was work on this software, the next 3 years would have been the easiest of my life. Unfortunately I had to do a lot more, all of it stuff I was worse at than programming, and the next 3 years were instead the most stressful. - -There were a lot of startups making ecommerce software in the second half of the 90s. We were determined to be the Microsoft Word, not the Interleaf. Which meant being easy to use and inexpensive. It was lucky for us that we were poor, because that caused us to make Viaweb even more inexpensive than we realized. We charged $100 a month for a small store and $300 a month for a big one. This low price was a big attraction, and a constant thorn in the sides of competitors, but it wasn't because of some clever insight that we set the price low. We had no idea what businesses paid for things. $300 a month seemed like a lot of money to us. - -We did a lot of things right by accident like that. For example, we did what's now called "doing things that don't scale," although at the time we would have described it as "being so lame that we're driven to the most desperate measures to get users." The most common of which was building stores for them. This seemed particularly humiliating, since the whole raison d'etre of our software was that people could use it to make their own stores. But anything to get users. - -We learned a lot more about retail than we wanted to know. For example, that if you could only have a small image of a man's shirt (and all images were small then by present standards), it was better to have a closeup of the collar than a picture of the whole shirt. The reason I remember learning this was that it meant I had to rescan about 30 images of men's shirts. My first set of scans were so beautiful too. - -Though this felt wrong, it was exactly the right thing to be doing. Building stores for users taught us about retail, and about how it felt to use our software. I was initially both mystified and repelled by "business" and thought we needed a "business person" to be in charge of it, but once we started to get users, I was converted, in much the same way I was converted to fatherhood once I had kids. Whatever users wanted, I was all theirs. Maybe one day we'd have so many users that I couldn't scan their images for them, but in the meantime there was nothing more important to do. - -Another thing I didn't get at the time is that growth rate is the ultimate test of a startup. Our growth rate was fine. We had about 70 stores at the end of 1996 and about 500 at the end of 1997. I mistakenly thought the thing that mattered was the absolute number of users. And that is the thing that matters in the sense that that's how much money you're making, and if you're not making enough, you might go out of business. But in the long term the growth rate takes care of the absolute number. If we'd been a startup I was advising at Y Combinator, I would have said: Stop being so stressed out, because you're doing fine. You're growing 7x a year. Just don't hire too many more people and you'll soon be profitable, and then you'll control your own destiny. - -Alas I hired lots more people, partly because our investors wanted me to, and partly because that's what startups did during the Internet Bubble. A company with just a handful of employees would have seemed amateurish. So we didn't reach breakeven until about when Yahoo bought us in the summer of 1998. Which in turn meant we were at the mercy of investors for the entire life of the company. And since both we and our investors were noobs at startups, the result was a mess even by startup standards. - -It was a huge relief when Yahoo bought us. In principle our Viaweb stock was valuable. It was a share in a business that was profitable and growing rapidly. But it didn't feel very valuable to me; I had no idea how to value a business, but I was all too keenly aware of the near-death experiences we seemed to have every few months. Nor had I changed my grad student lifestyle significantly since we started. So when Yahoo bought us it felt like going from rags to riches. Since we were going to California, I bought a car, a yellow 1998 VW GTI. I remember thinking that its leather seats alone were by far the most luxurious thing I owned. - -The next year, from the summer of 1998 to the summer of 1999, must have been the least productive of my life. I didn't realize it at the time, but I was worn out from the effort and stress of running Viaweb. For a while after I got to California I tried to continue my usual m.o. of programming till 3 in the morning, but fatigue combined with Yahoo's prematurely aged culture and grim cube farm in Santa Clara gradually dragged me down. After a few months it felt disconcertingly like working at Interleaf. - -Yahoo had given us a lot of options when they bought us. At the time I thought Yahoo was so overvalued that they'd never be worth anything, but to my astonishment the stock went up 5x in the next year. I hung on till the first chunk of options vested, then in the summer of 1999 I left. It had been so long since I'd painted anything that I'd half forgotten why I was doing this. My brain had been entirely full of software and men's shirts for 4 years. But I had done this to get rich so I could paint, I reminded myself, and now I was rich, so I should go paint. - -When I said I was leaving, my boss at Yahoo had a long conversation with me about my plans. I told him all about the kinds of pictures I wanted to paint. At the time I was touched that he took such an interest in me. Now I realize it was because he thought I was lying. My options at that point were worth about $2 million a month. If I was leaving that kind of money on the table, it could only be to go and start some new startup, and if I did, I might take people with me. This was the height of the Internet Bubble, and Yahoo was ground zero of it. My boss was at that moment a billionaire. Leaving then to start a new startup must have seemed to him an insanely, and yet also plausibly, ambitious plan. - -But I really was quitting to paint, and I started immediately. There was no time to lose. I'd already burned 4 years getting rich. Now when I talk to founders who are leaving after selling their companies, my advice is always the same: take a vacation. That's what I should have done, just gone off somewhere and done nothing for a month or two, but the idea never occurred to me. - -So I tried to paint, but I just didn't seem to have any energy or ambition. Part of the problem was that I didn't know many people in California. I'd compounded this problem by buying a house up in the Santa Cruz Mountains, with a beautiful view but miles from anywhere. I stuck it out for a few more months, then in desperation I went back to New York, where unless you understand about rent control you'll be surprised to hear I still had my apartment, sealed up like a tomb of my old life. Idelle was in New York at least, and there were other people trying to paint there, even though I didn't know any of them. - -When I got back to New York I resumed my old life, except now I was rich. It was as weird as it sounds. I resumed all my old patterns, except now there were doors where there hadn't been. Now when I was tired of walking, all I had to do was raise my hand, and (unless it was raining) a taxi would stop to pick me up. Now when I walked past charming little restaurants I could go in and order lunch. It was exciting for a while. Painting started to go better. I experimented with a new kind of still life where I'd paint one painting in the old way, then photograph it and print it, blown up, on canvas, and then use that as the underpainting for a second still life, painted from the same objects (which hopefully hadn't rotted yet). - -Meanwhile I looked for an apartment to buy. Now I could actually choose what neighborhood to live in. Where, I asked myself and various real estate agents, is the Cambridge of New York? Aided by occasional visits to actual Cambridge, I gradually realized there wasn't one. Huh. - -Around this time, in the spring of 2000, I had an idea. It was clear from our experience with Viaweb that web apps were the future. Why not build a web app for making web apps? Why not let people edit code on our server through the browser, and then host the resulting applications for them? [9] You could run all sorts of services on the servers that these applications could use just by making an API call: making and receiving phone calls, manipulating images, taking credit card payments, etc. - -I got so excited about this idea that I couldn't think about anything else. It seemed obvious that this was the future. I didn't particularly want to start another company, but it was clear that this idea would have to be embodied as one, so I decided to move to Cambridge and start it. I hoped to lure Robert into working on it with me, but there I ran into a hitch. Robert was now a postdoc at MIT, and though he'd made a lot of money the last time I'd lured him into working on one of my schemes, it had also been a huge time sink. So while he agreed that it sounded like a plausible idea, he firmly refused to work on it. - -Hmph. Well, I'd do it myself then. I recruited Dan Giffin, who had worked for Viaweb, and two undergrads who wanted summer jobs, and we got to work trying to build what it's now clear is about twenty companies and several open source projects worth of software. The language for defining applications would of course be a dialect of Lisp. But I wasn't so naive as to assume I could spring an overt Lisp on a general audience; we'd hide the parentheses, like Dylan did. - -By then there was a name for the kind of company Viaweb was, an "application service provider," or ASP. This name didn't last long before it was replaced by "software as a service," but it was current for long enough that I named this new company after it: it was going to be called Aspra. - -I started working on the application builder, Dan worked on network infrastructure, and the two undergrads worked on the first two services (images and phone calls). But about halfway through the summer I realized I really didn't want to run a company — especially not a big one, which it was looking like this would have to be. I'd only started Viaweb because I needed the money. Now that I didn't need money anymore, why was I doing this? If this vision had to be realized as a company, then screw the vision. I'd build a subset that could be done as an open source project. - -Much to my surprise, the time I spent working on this stuff was not wasted after all. After we started Y Combinator, I would often encounter startups working on parts of this new architecture, and it was very useful to have spent so much time thinking about it and even trying to write some of it. - -The subset I would build as an open source project was the new Lisp, whose parentheses I now wouldn't even have to hide. A lot of Lisp hackers dream of building a new Lisp, partly because one of the distinctive features of the language is that it has dialects, and partly, I think, because we have in our minds a Platonic form of Lisp that all existing dialects fall short of. I certainly did. So at the end of the summer Dan and I switched to working on this new dialect of Lisp, which I called Arc, in a house I bought in Cambridge. - -The following spring, lightning struck. I was invited to give a talk at a Lisp conference, so I gave one about how we'd used Lisp at Viaweb. Afterward I put a postscript file of this talk online, on paulgraham.com, which I'd created years before using Viaweb but had never used for anything. In one day it got 30,000 page views. What on earth had happened? The referring urls showed that someone had posted it on Slashdot. [10] - -Wow, I thought, there's an audience. If I write something and put it on the web, anyone can read it. That may seem obvious now, but it was surprising then. In the print era there was a narrow channel to readers, guarded by fierce monsters known as editors. The only way to get an audience for anything you wrote was to get it published as a book, or in a newspaper or magazine. Now anyone could publish anything. - -This had been possible in principle since 1993, but not many people had realized it yet. I had been intimately involved with building the infrastructure of the web for most of that time, and a writer as well, and it had taken me 8 years to realize it. Even then it took me several years to understand the implications. It meant there would be a whole new generation of essays. [11] - -In the print era, the channel for publishing essays had been vanishingly small. Except for a few officially anointed thinkers who went to the right parties in New York, the only people allowed to publish essays were specialists writing about their specialties. There were so many essays that had never been written, because there had been no way to publish them. Now they could be, and I was going to write them. [12] - -I've worked on several different things, but to the extent there was a turning point where I figured out what to work on, it was when I started publishing essays online. From then on I knew that whatever else I did, I'd always write essays too. - -I knew that online essays would be a marginal medium at first. Socially they'd seem more like rants posted by nutjobs on their GeoCities sites than the genteel and beautifully typeset compositions published in The New Yorker. But by this point I knew enough to find that encouraging instead of discouraging. - -One of the most conspicuous patterns I've noticed in my life is how well it has worked, for me at least, to work on things that weren't prestigious. Still life has always been the least prestigious form of painting. Viaweb and Y Combinator both seemed lame when we started them. I still get the glassy eye from strangers when they ask what I'm writing, and I explain that it's an essay I'm going to publish on my web site. Even Lisp, though prestigious intellectually in something like the way Latin is, also seems about as hip. - -It's not that unprestigious types of work are good per se. But when you find yourself drawn to some kind of work despite its current lack of prestige, it's a sign both that there's something real to be discovered there, and that you have the right kind of motives. Impure motives are a big danger for the ambitious. If anything is going to lead you astray, it will be the desire to impress people. So while working on things that aren't prestigious doesn't guarantee you're on the right track, it at least guarantees you're not on the most common type of wrong one. - -Over the next several years I wrote lots of essays about all kinds of different topics. O'Reilly reprinted a collection of them as a book, called Hackers & Painters after one of the essays in it. I also worked on spam filters, and did some more painting. I used to have dinners for a group of friends every thursday night, which taught me how to cook for groups. And I bought another building in Cambridge, a former candy factory (and later, twas said, porn studio), to use as an office. - -One night in October 2003 there was a big party at my house. It was a clever idea of my friend Maria Daniels, who was one of the thursday diners. Three separate hosts would all invite their friends to one party. So for every guest, two thirds of the other guests would be people they didn't know but would probably like. One of the guests was someone I didn't know but would turn out to like a lot: a woman called Jessica Livingston. A couple days later I asked her out. - -Jessica was in charge of marketing at a Boston investment bank. This bank thought it understood startups, but over the next year, as she met friends of mine from the startup world, she was surprised how different reality was. And how colorful their stories were. So she decided to compile a book of interviews with startup founders. - -When the bank had financial problems and she had to fire half her staff, she started looking for a new job. In early 2005 she interviewed for a marketing job at a Boston VC firm. It took them weeks to make up their minds, and during this time I started telling her about all the things that needed to be fixed about venture capital. They should make a larger number of smaller investments instead of a handful of giant ones, they should be funding younger, more technical founders instead of MBAs, they should let the founders remain as CEO, and so on. - -One of my tricks for writing essays had always been to give talks. The prospect of having to stand up in front of a group of people and tell them something that won't waste their time is a great spur to the imagination. When the Harvard Computer Society, the undergrad computer club, asked me to give a talk, I decided I would tell them how to start a startup. Maybe they'd be able to avoid the worst of the mistakes we'd made. - -So I gave this talk, in the course of which I told them that the best sources of seed funding were successful startup founders, because then they'd be sources of advice too. Whereupon it seemed they were all looking expectantly at me. Horrified at the prospect of having my inbox flooded by business plans (if I'd only known), I blurted out "But not me!" and went on with the talk. But afterward it occurred to me that I should really stop procrastinating about angel investing. I'd been meaning to since Yahoo bought us, and now it was 7 years later and I still hadn't done one angel investment. - -Meanwhile I had been scheming with Robert and Trevor about projects we could work on together. I missed working with them, and it seemed like there had to be something we could collaborate on. - -As Jessica and I were walking home from dinner on March 11, at the corner of Garden and Walker streets, these three threads converged. Screw the VCs who were taking so long to make up their minds. We'd start our own investment firm and actually implement the ideas we'd been talking about. I'd fund it, and Jessica could quit her job and work for it, and we'd get Robert and Trevor as partners too. [13] - -Once again, ignorance worked in our favor. We had no idea how to be angel investors, and in Boston in 2005 there were no Ron Conways to learn from. So we just made what seemed like the obvious choices, and some of the things we did turned out to be novel. - -There are multiple components to Y Combinator, and we didn't figure them all out at once. The part we got first was to be an angel firm. In those days, those two words didn't go together. There were VC firms, which were organized companies with people whose job it was to make investments, but they only did big, million dollar investments. And there were angels, who did smaller investments, but these were individuals who were usually focused on other things and made investments on the side. And neither of them helped founders enough in the beginning. We knew how helpless founders were in some respects, because we remembered how helpless we'd been. For example, one thing Julian had done for us that seemed to us like magic was to get us set up as a company. We were fine writing fairly difficult software, but actually getting incorporated, with bylaws and stock and all that stuff, how on earth did you do that? Our plan was not only to make seed investments, but to do for startups everything Julian had done for us. - -YC was not organized as a fund. It was cheap enough to run that we funded it with our own money. That went right by 99% of readers, but professional investors are thinking "Wow, that means they got all the returns." But once again, this was not due to any particular insight on our part. We didn't know how VC firms were organized. It never occurred to us to try to raise a fund, and if it had, we wouldn't have known where to start. [14] - -The most distinctive thing about YC is the batch model: to fund a bunch of startups all at once, twice a year, and then to spend three months focusing intensively on trying to help them. That part we discovered by accident, not merely implicitly but explicitly due to our ignorance about investing. We needed to get experience as investors. What better way, we thought, than to fund a whole bunch of startups at once? We knew undergrads got temporary jobs at tech companies during the summer. Why not organize a summer program where they'd start startups instead? We wouldn't feel guilty for being in a sense fake investors, because they would in a similar sense be fake founders. So while we probably wouldn't make much money out of it, we'd at least get to practice being investors on them, and they for their part would probably have a more interesting summer than they would working at Microsoft. - -We'd use the building I owned in Cambridge as our headquarters. We'd all have dinner there once a week — on tuesdays, since I was already cooking for the thursday diners on thursdays — and after dinner we'd bring in experts on startups to give talks. - -We knew undergrads were deciding then about summer jobs, so in a matter of days we cooked up something we called the Summer Founders Program, and I posted an announcement on my site, inviting undergrads to apply. I had never imagined that writing essays would be a way to get "deal flow," as investors call it, but it turned out to be the perfect source. [15] We got 225 applications for the Summer Founders Program, and we were surprised to find that a lot of them were from people who'd already graduated, or were about to that spring. Already this SFP thing was starting to feel more serious than we'd intended. - -We invited about 20 of the 225 groups to interview in person, and from those we picked 8 to fund. They were an impressive group. That first batch included reddit, Justin Kan and Emmett Shear, who went on to found Twitch, Aaron Swartz, who had already helped write the RSS spec and would a few years later become a martyr for open access, and Sam Altman, who would later become the second president of YC. I don't think it was entirely luck that the first batch was so good. You had to be pretty bold to sign up for a weird thing like the Summer Founders Program instead of a summer job at a legit place like Microsoft or Goldman Sachs. - -The deal for startups was based on a combination of the deal we did with Julian ($10k for 10%) and what Robert said MIT grad students got for the summer ($6k). We invested $6k per founder, which in the typical two-founder case was $12k, in return for 6%. That had to be fair, because it was twice as good as the deal we ourselves had taken. Plus that first summer, which was really hot, Jessica brought the founders free air conditioners. [16] - -Fairly quickly I realized that we had stumbled upon the way to scale startup funding. Funding startups in batches was more convenient for us, because it meant we could do things for a lot of startups at once, but being part of a batch was better for the startups too. It solved one of the biggest problems faced by founders: the isolation. Now you not only had colleagues, but colleagues who understood the problems you were facing and could tell you how they were solving them. - -As YC grew, we started to notice other advantages of scale. The alumni became a tight community, dedicated to helping one another, and especially the current batch, whose shoes they remembered being in. We also noticed that the startups were becoming one another's customers. We used to refer jokingly to the "YC GDP," but as YC grows this becomes less and less of a joke. Now lots of startups get their initial set of customers almost entirely from among their batchmates. - -I had not originally intended YC to be a full-time job. I was going to do three things: hack, write essays, and work on YC. As YC grew, and I grew more excited about it, it started to take up a lot more than a third of my attention. But for the first few years I was still able to work on other things. - -In the summer of 2006, Robert and I started working on a new version of Arc. This one was reasonably fast, because it was compiled into Scheme. To test this new Arc, I wrote Hacker News in it. It was originally meant to be a news aggregator for startup founders and was called Startup News, but after a few months I got tired of reading about nothing but startups. Plus it wasn't startup founders we wanted to reach. It was future startup founders. So I changed the name to Hacker News and the topic to whatever engaged one's intellectual curiosity. - -HN was no doubt good for YC, but it was also by far the biggest source of stress for me. If all I'd had to do was select and help founders, life would have been so easy. And that implies that HN was a mistake. Surely the biggest source of stress in one's work should at least be something close to the core of the work. Whereas I was like someone who was in pain while running a marathon not from the exertion of running, but because I had a blister from an ill-fitting shoe. When I was dealing with some urgent problem during YC, there was about a 60% chance it had to do with HN, and a 40% chance it had do with everything else combined. [17] - -As well as HN, I wrote all of YC's internal software in Arc. But while I continued to work a good deal in Arc, I gradually stopped working on Arc, partly because I didn't have time to, and partly because it was a lot less attractive to mess around with the language now that we had all this infrastructure depending on it. So now my three projects were reduced to two: writing essays and working on YC. - -YC was different from other kinds of work I've done. Instead of deciding for myself what to work on, the problems came to me. Every 6 months there was a new batch of startups, and their problems, whatever they were, became our problems. It was very engaging work, because their problems were quite varied, and the good founders were very effective. If you were trying to learn the most you could about startups in the shortest possible time, you couldn't have picked a better way to do it. - -There were parts of the job I didn't like. Disputes between cofounders, figuring out when people were lying to us, fighting with people who maltreated the startups, and so on. But I worked hard even at the parts I didn't like. I was haunted by something Kevin Hale once said about companies: "No one works harder than the boss." He meant it both descriptively and prescriptively, and it was the second part that scared me. I wanted YC to be good, so if how hard I worked set the upper bound on how hard everyone else worked, I'd better work very hard. - -One day in 2010, when he was visiting California for interviews, Robert Morris did something astonishing: he offered me unsolicited advice. I can only remember him doing that once before. One day at Viaweb, when I was bent over double from a kidney stone, he suggested that it would be a good idea for him to take me to the hospital. That was what it took for Rtm to offer unsolicited advice. So I remember his exact words very clearly. "You know," he said, "you should make sure Y Combinator isn't the last cool thing you do." - -At the time I didn't understand what he meant, but gradually it dawned on me that he was saying I should quit. This seemed strange advice, because YC was doing great. But if there was one thing rarer than Rtm offering advice, it was Rtm being wrong. So this set me thinking. It was true that on my current trajectory, YC would be the last thing I did, because it was only taking up more of my attention. It had already eaten Arc, and was in the process of eating essays too. Either YC was my life's work or I'd have to leave eventually. And it wasn't, so I would. - -In the summer of 2012 my mother had a stroke, and the cause turned out to be a blood clot caused by colon cancer. The stroke destroyed her balance, and she was put in a nursing home, but she really wanted to get out of it and back to her house, and my sister and I were determined to help her do it. I used to fly up to Oregon to visit her regularly, and I had a lot of time to think on those flights. On one of them I realized I was ready to hand YC over to someone else. - -I asked Jessica if she wanted to be president, but she didn't, so we decided we'd try to recruit Sam Altman. We talked to Robert and Trevor and we agreed to make it a complete changing of the guard. Up till that point YC had been controlled by the original LLC we four had started. But we wanted YC to last for a long time, and to do that it couldn't be controlled by the founders. So if Sam said yes, we'd let him reorganize YC. Robert and I would retire, and Jessica and Trevor would become ordinary partners. - -When we asked Sam if he wanted to be president of YC, initially he said no. He wanted to start a startup to make nuclear reactors. But I kept at it, and in October 2013 he finally agreed. We decided he'd take over starting with the winter 2014 batch. For the rest of 2013 I left running YC more and more to Sam, partly so he could learn the job, and partly because I was focused on my mother, whose cancer had returned. - -She died on January 15, 2014. We knew this was coming, but it was still hard when it did. - -I kept working on YC till March, to help get that batch of startups through Demo Day, then I checked out pretty completely. (I still talk to alumni and to new startups working on things I'm interested in, but that only takes a few hours a week.) - -What should I do next? Rtm's advice hadn't included anything about that. I wanted to do something completely different, so I decided I'd paint. I wanted to see how good I could get if I really focused on it. So the day after I stopped working on YC, I started painting. I was rusty and it took a while to get back into shape, but it was at least completely engaging. [18] - -I spent most of the rest of 2014 painting. I'd never been able to work so uninterruptedly before, and I got to be better than I had been. Not good enough, but better. Then in November, right in the middle of a painting, I ran out of steam. Up till that point I'd always been curious to see how the painting I was working on would turn out, but suddenly finishing this one seemed like a chore. So I stopped working on it and cleaned my brushes and haven't painted since. So far anyway. - -I realize that sounds rather wimpy. But attention is a zero sum game. If you can choose what to work on, and you choose a project that's not the best one (or at least a good one) for you, then it's getting in the way of another project that is. And at 50 there was some opportunity cost to screwing around. - -I started writing essays again, and wrote a bunch of new ones over the next few months. I even wrote a couple that weren't about startups. Then in March 2015 I started working on Lisp again. - -The distinctive thing about Lisp is that its core is a language defined by writing an interpreter in itself. It wasn't originally intended as a programming language in the ordinary sense. It was meant to be a formal model of computation, an alternative to the Turing machine. If you want to write an interpreter for a language in itself, what's the minimum set of predefined operators you need? The Lisp that John McCarthy invented, or more accurately discovered, is an answer to that question. [19] - -McCarthy didn't realize this Lisp could even be used to program computers till his grad student Steve Russell suggested it. Russell translated McCarthy's interpreter into IBM 704 machine language, and from that point Lisp started also to be a programming language in the ordinary sense. But its origins as a model of computation gave it a power and elegance that other languages couldn't match. It was this that attracted me in college, though I didn't understand why at the time. - -McCarthy's 1960 Lisp did nothing more than interpret Lisp expressions. It was missing a lot of things you'd want in a programming language. So these had to be added, and when they were, they weren't defined using McCarthy's original axiomatic approach. That wouldn't have been feasible at the time. McCarthy tested his interpreter by hand-simulating the execution of programs. But it was already getting close to the limit of interpreters you could test that way — indeed, there was a bug in it that McCarthy had overlooked. To test a more complicated interpreter, you'd have had to run it, and computers then weren't powerful enough. - -Now they are, though. Now you could continue using McCarthy's axiomatic approach till you'd defined a complete programming language. And as long as every change you made to McCarthy's Lisp was a discoveredness-preserving transformation, you could, in principle, end up with a complete language that had this quality. Harder to do than to talk about, of course, but if it was possible in principle, why not try? So I decided to take a shot at it. It took 4 years, from March 26, 2015 to October 12, 2019. It was fortunate that I had a precisely defined goal, or it would have been hard to keep at it for so long. - -I wrote this new Lisp, called Bel, in itself in Arc. That may sound like a contradiction, but it's an indication of the sort of trickery I had to engage in to make this work. By means of an egregious collection of hacks I managed to make something close enough to an interpreter written in itself that could actually run. Not fast, but fast enough to test. - -I had to ban myself from writing essays during most of this time, or I'd never have finished. In late 2015 I spent 3 months writing essays, and when I went back to working on Bel I could barely understand the code. Not so much because it was badly written as because the problem is so convoluted. When you're working on an interpreter written in itself, it's hard to keep track of what's happening at what level, and errors can be practically encrypted by the time you get them. - -So I said no more essays till Bel was done. But I told few people about Bel while I was working on it. So for years it must have seemed that I was doing nothing, when in fact I was working harder than I'd ever worked on anything. Occasionally after wrestling for hours with some gruesome bug I'd check Twitter or HN and see someone asking "Does Paul Graham still code?" - -Working on Bel was hard but satisfying. I worked on it so intensively that at any given time I had a decent chunk of the code in my head and could write more there. I remember taking the boys to the coast on a sunny day in 2015 and figuring out how to deal with some problem involving continuations while I watched them play in the tide pools. It felt like I was doing life right. I remember that because I was slightly dismayed at how novel it felt. The good news is that I had more moments like this over the next few years. - -In the summer of 2016 we moved to England. We wanted our kids to see what it was like living in another country, and since I was a British citizen by birth, that seemed the obvious choice. We only meant to stay for a year, but we liked it so much that we still live there. So most of Bel was written in England. - -In the fall of 2019, Bel was finally finished. Like McCarthy's original Lisp, it's a spec rather than an implementation, although like McCarthy's Lisp it's a spec expressed as code. - -Now that I could write essays again, I wrote a bunch about topics I'd had stacked up. I kept writing essays through 2020, but I also started to think about other things I could work on. How should I choose what to do? Well, how had I chosen what to work on in the past? I wrote an essay for myself to answer that question, and I was surprised how long and messy the answer turned out to be. If this surprised me, who'd lived it, then I thought perhaps it would be interesting to other people, and encouraging to those with similarly messy lives. So I wrote a more detailed version for others to read, and this is the last sentence of it. - - - - - - - - - -Notes - -[1] My experience skipped a step in the evolution of computers: time-sharing machines with interactive OSes. I went straight from batch processing to microcomputers, which made microcomputers seem all the more exciting. - -[2] Italian words for abstract concepts can nearly always be predicted from their English cognates (except for occasional traps like polluzione). It's the everyday words that differ. So if you string together a lot of abstract concepts with a few simple verbs, you can make a little Italian go a long way. - -[3] I lived at Piazza San Felice 4, so my walk to the Accademia went straight down the spine of old Florence: past the Pitti, across the bridge, past Orsanmichele, between the Duomo and the Baptistery, and then up Via Ricasoli to Piazza San Marco. I saw Florence at street level in every possible condition, from empty dark winter evenings to sweltering summer days when the streets were packed with tourists. - -[4] You can of course paint people like still lives if you want to, and they're willing. That sort of portrait is arguably the apex of still life painting, though the long sitting does tend to produce pained expressions in the sitters. - -[5] Interleaf was one of many companies that had smart people and built impressive technology, and yet got crushed by Moore's Law. In the 1990s the exponential growth in the power of commodity (i.e. Intel) processors rolled up high-end, special-purpose hardware and software companies like a bulldozer. - -[6] The signature style seekers at RISD weren't specifically mercenary. In the art world, money and coolness are tightly coupled. Anything expensive comes to be seen as cool, and anything seen as cool will soon become equally expensive. - -[7] Technically the apartment wasn't rent-controlled but rent-stabilized, but this is a refinement only New Yorkers would know or care about. The point is that it was really cheap, less than half market price. - -[8] Most software you can launch as soon as it's done. But when the software is an online store builder and you're hosting the stores, if you don't have any users yet, that fact will be painfully obvious. So before we could launch publicly we had to launch privately, in the sense of recruiting an initial set of users and making sure they had decent-looking stores. - -[9] We'd had a code editor in Viaweb for users to define their own page styles. They didn't know it, but they were editing Lisp expressions underneath. But this wasn't an app editor, because the code ran when the merchants' sites were generated, not when shoppers visited them. - -[10] This was the first instance of what is now a familiar experience, and so was what happened next, when I read the comments and found they were full of angry people. How could I claim that Lisp was better than other languages? Weren't they all Turing complete? People who see the responses to essays I write sometimes tell me how sorry they feel for me, but I'm not exaggerating when I reply that it has always been like this, since the very beginning. It comes with the territory. An essay must tell readers things they don't already know, and some people dislike being told such things. - -[11] People put plenty of stuff on the internet in the 90s of course, but putting something online is not the same as publishing it online. Publishing online means you treat the online version as the (or at least a) primary version. - -[12] There is a general lesson here that our experience with Y Combinator also teaches: Customs continue to constrain you long after the restrictions that caused them have disappeared. Customary VC practice had once, like the customs about publishing essays, been based on real constraints. Startups had once been much more expensive to start, and proportionally rare. Now they could be cheap and common, but the VCs' customs still reflected the old world, just as customs about writing essays still reflected the constraints of the print era. - -Which in turn implies that people who are independent-minded (i.e. less influenced by custom) will have an advantage in fields affected by rapid change (where customs are more likely to be obsolete). - -Here's an interesting point, though: you can't always predict which fields will be affected by rapid change. Obviously software and venture capital will be, but who would have predicted that essay writing would be? - -[13] Y Combinator was not the original name. At first we were called Cambridge Seed. But we didn't want a regional name, in case someone copied us in Silicon Valley, so we renamed ourselves after one of the coolest tricks in the lambda calculus, the Y combinator. - -I picked orange as our color partly because it's the warmest, and partly because no VC used it. In 2005 all the VCs used staid colors like maroon, navy blue, and forest green, because they were trying to appeal to LPs, not founders. The YC logo itself is an inside joke: the Viaweb logo had been a white V on a red circle, so I made the YC logo a white Y on an orange square. - -[14] YC did become a fund for a couple years starting in 2009, because it was getting so big I could no longer afford to fund it personally. But after Heroku got bought we had enough money to go back to being self-funded. - -[15] I've never liked the term "deal flow," because it implies that the number of new startups at any given time is fixed. This is not only false, but it's the purpose of YC to falsify it, by causing startups to be founded that would not otherwise have existed. - -[16] She reports that they were all different shapes and sizes, because there was a run on air conditioners and she had to get whatever she could, but that they were all heavier than she could carry now. - -[17] Another problem with HN was a bizarre edge case that occurs when you both write essays and run a forum. When you run a forum, you're assumed to see if not every conversation, at least every conversation involving you. And when you write essays, people post highly imaginative misinterpretations of them on forums. Individually these two phenomena are tedious but bearable, but the combination is disastrous. You actually have to respond to the misinterpretations, because the assumption that you're present in the conversation means that not responding to any sufficiently upvoted misinterpretation reads as a tacit admission that it's correct. But that in turn encourages more; anyone who wants to pick a fight with you senses that now is their chance. - -[18] The worst thing about leaving YC was not working with Jessica anymore. We'd been working on YC almost the whole time we'd known each other, and we'd neither tried nor wanted to separate it from our personal lives, so leaving was like pulling up a deeply rooted tree. - -[19] One way to get more precise about the concept of invented vs discovered is to talk about space aliens. Any sufficiently advanced alien civilization would certainly know about the Pythagorean theorem, for example. I believe, though with less certainty, that they would also know about the Lisp in McCarthy's 1960 paper. - -But if so there's no reason to suppose that this is the limit of the language that might be known to them. Presumably aliens need numbers and errors and I/O too. So it seems likely there exists at least one path out of McCarthy's Lisp along which discoveredness is preserved. - - - -Thanks to Trevor Blackwell, John Collison, Patrick Collison, Daniel Gackle, Ralph Hazell, Jessica Livingston, Robert Morris, and Harj Taggar for reading drafts of this. - - - diff --git a/examples/ai/llamaindex/llamaindex.ipynb b/examples/ai/llamaindex/llamaindex.ipynb deleted file mode 100644 index 28d80026a4f31..0000000000000 --- a/examples/ai/llamaindex/llamaindex.ipynb +++ /dev/null @@ -1,189 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "4f3b89c3", - "metadata": {}, - "source": [ - "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/supabase/supabase/blob/master/examples/ai/llamaindex/llamaindex.ipynb)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "2a1f181d-feeb-4b29-aabc-67a75234b92c", - "metadata": {}, - "source": [ - "# Supabase + LlamaIndex\n", - "\n", - "In this example we'll use PostgreSQL + pgvectors with [LlamaIndex's Supabase Vector Store](https://gpt-index.readthedocs.io/en/latest/examples/vector_stores/SupabaseVectorIndexDemo.html#setup-openai).\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "3cab93f5-10d0-47c5-9f4e-64921461e7e2", - "metadata": {}, - "source": [ - "## Install Dependencies" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "a41bc3e4-ea52-43aa-9239-a431b49f029e", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install -qU vecs datasets llama_index html2text" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0026437c", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import sys\n", - "\n", - "# Uncomment to see debug logs\n", - "# logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)\n", - "# logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))\n", - "\n", - "from llama_index import SimpleWebPageReader, StorageContext\n", - "from llama_index.indices.vector_store import VectorStoreIndex\n", - "from llama_index.vector_stores import SupabaseVectorStore\n", - "import textwrap\n", - "import html2text" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "7a95a440", - "metadata": {}, - "source": [ - "# Set up OpenAI\n", - "\n", - "LlamaIndex uses OpenAI GPT-3 `text-davinci-003` model. Let's store that in an environment variable:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ca2437d3", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "os.environ['OPENAI_API_KEY'] = \"[your_openai_api_key]\"" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "4dbd176f-3b4e-4d41-a72d-1e1affe6ecae", - "metadata": {}, - "source": [ - "## Load the Dataset\n", - "\n", - "Let's load a small data set of Paul Graham's essays:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dc6b0bc2-b95f-4190-bf77-fa2dc57fc247", - "metadata": {}, - "outputs": [], - "source": [ - "essays = [\n", - " 'paul_graham_essay.txt'\n", - "]\n", - "documents = SimpleWebPageReader().load_data([f'https://raw.githubusercontent.com/supabase/supabase/master/examples/ai/llamaindex/data/{essay}' for essay in essays])\n", - "print('Document ID:', documents[0].doc_id, 'Document Hash:', documents[0].doc_hash)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "955b2700-8242-40eb-ac3f-d479a0312693", - "metadata": {}, - "source": [ - "## Create an index in Supabase\n", - "\n", - "Let's store Paul Graham's essays in Supabase. You can find the Postgres connection string in the [Database Settings](https://supabase.com/dashboard/_/settings/database) of your Supabase project. This will work with all Postgres providers that support pgvector." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "ce9bc85b-e844-407c-a0ad-ccf6af3c8866", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# Substitute your connection string here\n", - "DB_CONNECTION = \"postgresql://postgres:password@localhost:5431/db\"\n", - "\n", - "vector_store = SupabaseVectorStore(\n", - " postgres_connection_string=DB_CONNECTION, \n", - " collection_name='base_demo'\n", - ")\n", - "storage_context = StorageContext.from_defaults(vector_store=vector_store)\n", - "index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "9e82862d-440a-4f66-9ed7-0eaa6a0f4062", - "metadata": {}, - "source": [ - "## Query the index\n", - "\n", - "We can now ask questions using our index." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "d2771545-d209-4ceb-a222-ed139a4620f2", - "metadata": {}, - "outputs": [], - "source": [ - "query_engine = index.as_query_engine()\n", - "\n", - "# Ask a question\n", - "response = query_engine.query(\"What did the author do growing up?\")\n", - "\n", - "# Print the response\n", - "print(response)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/ai/semantic_text_deduplication.ipynb b/examples/ai/semantic_text_deduplication.ipynb deleted file mode 100644 index 7f080846362f4..0000000000000 --- a/examples/ai/semantic_text_deduplication.ipynb +++ /dev/null @@ -1,493 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "id": "4f3b89c3", - "metadata": {}, - "source": [ - "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/supabase/supabase/blob/master/examples/ai/semantic_text_deduplication.ipynb)" - ] - }, - { - "cell_type": "markdown", - "id": "2a1f181d-feeb-4b29-aabc-67a75234b92c", - "metadata": {}, - "source": [ - "# Semantic Text Deduplication\n", - "\n", - "In this example we'll use PostgreSQL + pgvectors similarity search using the `vecs` library to identify near duplicate snippets of text.\n", - "\n", - "Our task is to improve IMDB movie reviews by making sure each review on the site is substantive and original.\n", - "To achieve that, we'll identify and remove any reviews that are near duplicates of others." - ] - }, - { - "cell_type": "markdown", - "id": "3cab93f5-10d0-47c5-9f4e-64921461e7e2", - "metadata": {}, - "source": [ - "## Install Dependencies" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "a41bc3e4-ea52-43aa-9239-a431b49f029e", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install -qU vecs datasets sentence_transformers flupy tqdm" - ] - }, - { - "cell_type": "markdown", - "id": "4dbd176f-3b4e-4d41-a72d-1e1affe6ecae", - "metadata": {}, - "source": [ - "## Load the Dataset\n", - "\n", - "First we load the IMBD dataset using the datasets library.\n", - "It contains the text of 25000 movie reviews." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "dc6b0bc2-b95f-4190-bf77-fa2dc57fc247", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Found cached dataset imdb (/Users/oliverrice/.cache/huggingface/datasets/imdb/plain_text/1.0.0/d613c88cf8fa3bab83b4ded3713f1f74830d1100e171db75bbddb80b3345c9c0)\n" - ] - }, - { - "data": { - "text/plain": [ - "Dataset({\n", - " features: ['text', 'label'],\n", - " num_rows: 25000\n", - "})" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from datasets import load_dataset\n", - "\n", - "data = load_dataset(\"imdb\", split=\"train\")\n", - "data" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "da15eff4-932c-4e0c-b938-ba188af62b63", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\"I would put this at the top of my list of films in the category of unwatchable trash! There are films that are bad, but the worst kind are the ones that are unwatchable but you are suppose to like them because they are supposed to be good for you! The sex sequences, so shocking in its day, couldn't even arouse a rabbit. The so called controversial politics is strictly high school sophomore amateur night Marxism. The film is self-consciously arty in the worst sense of the term. The photography is in a harsh grainy black and white. Some scenes are out of focus or taken from the wrong angle. Even the sound is bad! And some people call this art?

    \"" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Look at an example review\n", - "data[\"text\"][5]" - ] - }, - { - "cell_type": "markdown", - "id": "955b2700-8242-40eb-ac3f-d479a0312693", - "metadata": {}, - "source": [ - "## Embedding Model\n", - "\n", - "Next, we can use the `sentence-transformers/all-MiniLM-L6-v2` model to create a 384 dimensional text embedding that represents the\n", - "semantic meaning of each review. These embeddings are what we'll use for near-duplicate detection." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "ce9bc85b-e844-407c-a0ad-ccf6af3c8866", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "\n", - "model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')" - ] - }, - { - "cell_type": "markdown", - "id": "9e82862d-440a-4f66-9ed7-0eaa6a0f4062", - "metadata": {}, - "source": [ - "## Initialize the Vecs Collection\n", - "\n", - "The [`vecs`](https://supabase.github.io/vecs/api/) library wraps a pythonic interface around PostgreSQL and pgvector.\n", - "A collection in `vecs` maps 1:1 with a PostgreSQL table." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "d2771545-d209-4ceb-a222-ed139a4620f2", - "metadata": {}, - "outputs": [], - "source": [ - "import vecs\n", - "\n", - "# Substitute your connection string here\n", - "DB_CONNECTION = \"postgresql://postgres:password@localhost:5431/db\"\n", - "\n", - "# create vector store client\n", - "vx = vecs.create_client(DB_CONNECTION)\n", - "\n", - "# create a PostgreSQL/pgvector table named \"reviews\" to contain the review embeddings\n", - "reviews = vx.create_collection(name=\"reviews\", dimension=384)" - ] - }, - { - "cell_type": "markdown", - "id": "9ae030b4-cfd2-43bc-802f-e7ac4007d2ad", - "metadata": {}, - "source": [ - "## Create Embeddings for Each Review\n", - "\n", - "Now we can iterate over the dataset, producing embeddings for the reviews" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "bd134310-9da1-4448-8358-9fc491c98e1e", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "500it [07:06, 1.17it/s]\n" - ] - } - ], - "source": [ - "from typing import List, Dict, Tuple\n", - "from flupy import flu\n", - "import numpy as np\n", - "from tqdm import tqdm\n", - "\n", - "\n", - "batch_size = 50\n", - "\n", - "records: List[Tuple[str, np.ndarray, Dict]] = []\n", - "\n", - "# Iterate over the dataset in chunks\n", - "for chunk_ix, chunk in tqdm(flu(data['text']).chunk(batch_size).enumerate()):\n", - "\n", - " # Create embeddings for current chunk\n", - " embedding_chunk = model.encode(chunk)\n", - "\n", - " # Enumerate the embeddings and create a record to insert into the database\n", - " for row_ix, (text, embedding) in enumerate(zip(chunk, embedding_chunk)):\n", - " record_id = chunk_ix * batch_size + row_ix\n", - " records.append((f\"{record_id}\", embedding, {\"text\": text}))" - ] - }, - { - "cell_type": "markdown", - "id": "6ef285d7-dc7b-4576-ab2b-bf0a4ba06de4", - "metadata": {}, - "source": [ - "## Insert the Embeddings into Postgres" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "6156e7f9-b78a-4ab9-8002-b09ec8716be2", - "metadata": {}, - "outputs": [], - "source": [ - "reviews.upsert(records)" - ] - }, - { - "cell_type": "markdown", - "id": "aa095a53-dd9c-4a3c-93bf-c54708c67765", - "metadata": {}, - "source": [ - "## Index the Collection\n", - "\n", - "Indexing the collection creates an index on the vector column in Postgres that significantly improves performance\n", - "of similarity queries." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "6b96d3af-5592-4fbc-81ab-f77b4228ccaa", - "metadata": {}, - "outputs": [], - "source": [ - "reviews.create_index()" - ] - }, - { - "cell_type": "markdown", - "id": "371631e6-4995-484f-9d76-40ab5e7b2e16", - "metadata": {}, - "source": [ - "## Search for Near Duplicates\n", - "\n", - "Finally we can enumerate each review, searching for the most similar\n", - "reviews and displaying them if the results are near duplicates. We could then prune out the near-duplicate reviews\n", - "to make sure our viewers see a new and interesting opinion with each review they choose to read." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "d2a5c699-7c04-48ad-9033-a310bbb0dffc", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "824it [00:05, 187.11it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "query_id: 817 \t result_id: 823 \t distance 0.1672 \n", - "\n", - " Query Text \n", - "\n", - " This has to be, by far, the absolute worst movie I have seen in the last 20 years. When I saw that Michael Madsen was in it I figured it couldn't be too bad a movie since he has been in some pretty decent films, and he was a pretty fair actor. WRONG! No one should waste their time on this film. I fast forwarded through 80 percent of it and I don't feel that I missed a thing. \n", - "\n", - " Result Text \n", - "\n", - " I agree totally with the last commenter this could be the worst movie ever made .I too had to fast forward through most of this movie. Michael Madsen must have done this movie as a favor to someone.The picture quality is grainy all the way through .And what little plot there is,is just plain stupid .I give this movie a 1 out of 10 if I could give it a lower score I would .Don't waste your time on this movie or you'll regret it. \n", - " --------------------------------------------------------------------------------\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "8675it [00:47, 166.43it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "query_id: 8663 \t result_id: 8669 \t distance 0.1532 \n", - "\n", - " Query Text \n", - "\n", - " Rodney Dangerfield is a great. He has done a lot of great works. But this one....is awful. The whole plot is whack. It could have been much better. The jokes in the movie aren't funny....their stupid. This was very not so hilarious. He can do much better than this. \n", - "\n", - " Result Text \n", - "\n", - " As much as I love Rodney Dangerfield, this was a terrible movie. The plot was kind of a holistic rip off of various movies, but unfortunately they forgot to rip off any good jokes. In addition it was annoying and boring and that's being kind. If you're looking for a good laugh, rent a copy of Private Parts. \n", - " --------------------------------------------------------------------------------\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "10522it [00:58, 164.98it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "query_id: 10486 \t result_id: 5437 \t distance 0.1634 \n", - "\n", - " Query Text \n", - "\n", - " Aside for being classic in the aspect of its cheesy lines and terrible acting, this film should never be watched unless you are looking for a good cure for your insomnia. I can't imagine anyone actually thinking this was a \"good movie.\" \n", - "\n", - " Result Text \n", - "\n", - " Aside from the horrendous acting and the ridiculous and ludicrous plot, this movie wasn't too bad. Unfortunately, that doesn't leave much movie not to suck. Do not waste your time on this film, even if you find yourself suffering from insomnia, as I did. Watch an infomercial instead. \n", - " --------------------------------------------------------------------------------\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "16405it [01:36, 97.07it/s] " - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "query_id: 16401 \t result_id: 16424 \t distance 0.1583 \n", - "\n", - " Query Text \n", - "\n", - " This has to be the funniest stand up comedy I have ever seen. Eddie Izzard is a genius, he picks in Brits, Americans and everyone in between. His style is completely natural and completely hilarious. I doubt that anyone could sit through this and not laugh their a** off. Watch, enjoy, it's funny. \n", - "\n", - " Result Text \n", - "\n", - " Until I saw this special on HBO, I had never heard of Eddie Izzard. I sure am glad that I have now! He is one of the funniest comedians I have ever seen! Rarely has a comedian immersed himself so completely in his craft then Eddie. I could not stop laughing for the entire show. If you like to laugh you HAVE to see this special! \n", - " --------------------------------------------------------------------------------\n", - "query_id: 16401 \t result_id: 16408 \t distance 0.1663 \n", - "\n", - " Query Text \n", - "\n", - " This has to be the funniest stand up comedy I have ever seen. Eddie Izzard is a genius, he picks in Brits, Americans and everyone in between. His style is completely natural and completely hilarious. I doubt that anyone could sit through this and not laugh their a** off. Watch, enjoy, it's funny. \n", - "\n", - " Result Text \n", - "\n", - " This is another gem of a stand up show from Eddie Izzard . You cannot fail to laugh at the wide range of topics he talks about. He even takes the piss out of his American audiance at times and most of them didnt even realise it! A must see for anybody who likes comedians. 9 out of 10. \n", - " --------------------------------------------------------------------------------\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "18953it [01:54, 101.67it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "query_id: 18936 \t result_id: 18942 \t distance 0.1325 \n", - "\n", - " Query Text \n", - "\n", - " World At War is perhaps the greatest documentary series of all time. The historical research is virtually flawless. Even after a quarter century, it is the most accurate and definitive documentary about WW2. An invaluable historical work that includes interviews with some of the most important and fascinating figures from the war. I highly recommend it as a learning experience. \n", - "\n", - " Result Text \n", - "\n", - " The world at war is one of the best documentaries about world war 2.

    The 24 episodes cover the war and what it was like in the countries involved in it. The first episode tells us how the Hitler came to power, and how he was able to build up one of the strongest armies in the world. They also fucus on the military actions taken during the war, and the holocaust. One of the strongest and best documentaries ever made. All of you must watch this. Perfection! 10/10

    \n", - " --------------------------------------------------------------------------------\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "21236it [02:09, 144.35it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "query_id: 21202 \t result_id: 2618 \t distance 0.1586 \n", - "\n", - " Query Text \n", - "\n", - " I think Hollow Point is a funny film with some good moments I have never seen before in action movies. Well,both Tia Carrere and Thomas Ian Griffith aren't so good in acting, but Tia Carrere is nice and good looking girl, isn't it? But Donald Sutherland is superb in his role so-so mad gangster. \n", - "\n", - " Result Text \n", - "\n", - " Hollow point is an alright movie worth a half price rental or if nothing else is on a good time waster with no thought required. There are the requisite explosions and hammy acting and pretty ladies. A pretty good cast with Donald Sutherland, John Lithgow, and the lovely Tia Carrere. This cast plus a light hearted touch make for a not a great movie but a fun one..on a scale of one to ten ..a 4 \n", - " --------------------------------------------------------------------------------\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "25000it [02:38, 157.92it/s]\n" - ] - } - ], - "source": [ - "for ix, text in tqdm(enumerate(data['text'])):\n", - "\n", - " # Load the next row from the dataset\n", - " query_results = reviews.fetch(ids=[f'{ix}'])\n", - " \n", - " (query_id, query_embedding, query_meta) = query_results[0]\n", - "\n", - " # Retrieve the original text from the row's metadata\n", - " query_text = query_meta[\"text\"]\n", - "\n", - " # To keep the output easy to read quickly, we'll restrict reviews to < 500 characters\n", - " # In the real-world you would not include this restriction\n", - " if len(query_text) < 500:\n", - "\n", - " # Query the review embeddings for the most similar 5 reviews\n", - " top_5 = reviews.query(\n", - " query_vector=query_embedding,\n", - " limit = 5,\n", - " include_metadata= True,\n", - " include_value=True\n", - " )\n", - "\n", - " # For each result\n", - " for result_id, result_distance, result_meta in top_5[1:]:\n", - " \n", - " result_text = result_meta[\"text\"]\n", - "\n", - " if (\n", - " # Since our query embedding is in the collection, the nearest result\n", - " # is always itself with a distance of 0. We exclude that record and \n", - " # review any others with a distance < 0.17\n", - " 0.01 < abs(result_distance) < 0.17\n", - " and len(result_text) < 500\n", - " and query_id < result_id\n", - " ):\n", - " print(\n", - " \"query_id:\", query_id,\n", - " \"\\t\", \"result_id:\", result_id,\n", - " \"\\t\", \"distance\", round(result_distance, 4),\n", - " \"\\n\\n\", \"Query Text\",\n", - " \"\\n\\n\", query_meta[\"text\"],\n", - " \"\\n\\n\", \"Result Text\",\n", - " \"\\n\\n\", result_meta[\"text\"],\n", - " \"\\n\", \"-\" * 80\n", - " )" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/ai/vector_hello_world.ipynb b/examples/ai/vector_hello_world.ipynb deleted file mode 100644 index 7749e2a755a1c..0000000000000 --- a/examples/ai/vector_hello_world.ipynb +++ /dev/null @@ -1,362 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/supabase/supabase/blob/master/examples/ai/vector_hello_world.ipynb)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "oQeCPgFKf3MQ" - }, - "source": [ - "#Vector \"Hello, World\" Quickstart\n", - "\n", - "`vecs` is a python client for managing and querying vector stores in PostgreSQL with the [pgvector extension](https://github.com/pgvector/pgvector). This guide will help you get started with using vecs.\n", - "\n", - "If you don't have a Postgres database with the pgvector extension installed, see [hosting](https://supabase.github.io/vecs/hosting/) for easy options.\n", - "\n", - "\n", - "##Installation\n", - "\n", - "Requires:\n", - "\n", - "- Python 3.7+\n", - "\n", - "You can install vecs using pip:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "q46dFslpgVDC", - "outputId": "33902f71-09f5-40d9-cfb6-436e440882d7" - }, - "outputs": [], - "source": [ - "pip install vecs" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "AeGQKpZegfCv" - }, - "source": [ - "##Usage\n", - "###Connecting\n", - "\n", - "Before you can interact with vecs, create the client to communicate with Postgres.\n", - "\n", - "Note: In Supabase go to [Database Settings](https://supabase.com/dashboard/project/_/settings/database) to get your Postgres connection string." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "id": "2snoGFPRgkoG" - }, - "outputs": [], - "source": [ - "import vecs\n", - "\n", - "DB_CONNECTION = \"postgresql://:@:/\"\n", - "\n", - "# create vector store client\n", - "vx = vecs.create_client(DB_CONNECTION)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zbwuFOgQgog6" - }, - "source": [ - "###Create collection\n", - "\n", - "You can create a collection to store vectors specifying the collections name and the number of dimensions in the vectors you intend to store." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "id": "V36NI1ZZgrJ9" - }, - "outputs": [], - "source": [ - "docs = vx.create_collection(name=\"docs\", dimension=3)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "djKCRhbbhAQ8" - }, - "source": [ - "###Get an existing collection\n", - "\n", - "To access a previously created collection, use `get_collection` to retrieve it by name" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "id": "71IyRUbDhEGz" - }, - "outputs": [], - "source": [ - "docs = vx.get_collection(name=\"docs\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "a0_KSZRNhHPk" - }, - "source": [ - "###Upserting vectors\n", - "\n", - "`vecs` combines the concepts of \"insert\" and \"update\" into \"upsert\". Upserting records adds them to the collection if the `id` is not present, or updates the existing record if the `id` does exist." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "id": "VikCHcKShOEJ" - }, - "outputs": [], - "source": [ - "# add records to the collection\n", - "docs.upsert(\n", - " vectors=[\n", - " (\n", - " \"vec0\", # the vector's identifier\n", - " [0.1, 0.2, 0.3], # the vector. list or np.array\n", - " {\"year\": 1973} # associated metadata\n", - " ),\n", - " (\n", - " \"vec1\",\n", - " [0.7, 0.8, 0.9],\n", - " {\"year\": 2012}\n", - " )\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "t1t9pcK4hQoK" - }, - "source": [ - "###Create an index\n", - "\n", - "Collections can be queried immediately after being created. However, for good performance, the collection should be indexed after records have been upserted.\n", - "\n", - "Indexes should be created **after** the collection has been populated with records. Building an index on an empty collection will result in significantly reduced recall. Once the index has been created you can still upsert new documents into the collection but you should rebuild the index if the size of the collection more than doubles.\n", - "\n", - "Only one index may exist per-collection. By default, creating an index will replace any existing index.\n", - "\n", - "To create an index:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "id": "kOzVOcFAhUxx" - }, - "outputs": [], - "source": [ - "##\n", - "# INSERT RECORDS HERE\n", - "##\n", - "\n", - "# index the collection to be queried by cosine distance\n", - "docs.create_index(measure=vecs.IndexMeasure.cosine_distance)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "jh7E_-9thW6L" - }, - "source": [ - "Available options for query `measure` are:\n", - "\n", - "- `vecs.IndexMeasure.cosine_distance`\n", - "- `vecs.IndexMeasure.l2_distance`\n", - "- `vecs.IndexMeasure.max_inner_product`\n", - "\n", - "which correspond to different methods for comparing query vectors to the vectors in the database.\n", - "\n", - "If you aren't sure which to use, stick with the default (cosine_distance) by omitting the parameter i.e." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "id": "WMMEs0IMheSU" - }, - "outputs": [], - "source": [ - "docs.create_index()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "vvNwjXgYhhHE" - }, - "source": [ - "Note: The time required to create an index grows with the number of records and size of vectors. For a few thousand records expect sub-minute a response in under a minute. It may take a few minutes for larger collections." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "OdJvFYdAhl11" - }, - "source": [ - "###Query\n", - "\n", - "Given a collection `docs` with several records:\n", - "\n", - "####Basic\n", - "\n", - "The simplest form of search is to provide a query vector.\n", - "\n", - "Note: Indexes are essential for good performance. See [creating an index](https://supabase.github.io/vecs/api/#create-an-index) for more info.\n", - "\n", - "If you do not create an index, every query will return a warning\n", - "\n", - "`query does not have a covering index for cosine_similarity. See Collection.create_index`\n", - "\n", - "that incldues the `IndexMeasure` you should index." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "lOCAT1Eqh2kH", - "outputId": "1f9e7053-0136-4d06-aea4-dad18695e6fe" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['vec1', 'vec0']" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "docs.query(\n", - " query_vector=[0.4,0.5,0.6], # required\n", - " limit=5, # number of records to return\n", - " filters={}, # metadata filters\n", - " measure=\"cosine_distance\", # distance measure to use\n", - " include_value=False, # should distance measure values be returned?\n", - " include_metadata=False, # should record metadata be returned?\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "4aCYtmrbh4Qa" - }, - "source": [ - "Which returns a list of vector record `ids`." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "t6-r7gMth7Kn" - }, - "source": [ - "### Metadata Filtering\n", - "\n", - "The metadata that is associated with each record can also be filtered during a query.\n", - "\n", - "As an example, `{\"year\": {\"$eq\": 2005}}` filters a year metadata key to be equal to 2005\n", - "\n", - "In context:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "ypj8DnOaiABC", - "outputId": "0cd878c5-a1a6-4c53-d8cb-21356e599d77" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['vec1']" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "docs.query(\n", - " query_vector=[0.4,0.5,0.6],\n", - " filters={\"year\": {\"$eq\": 2012}}, # metadata filters\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "eZ85uF35iCp8" - }, - "source": [ - "For a complete reference, see the [metadata guide](https://supabase.github.io/vecs/concepts_metadata/)." - ] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - }, - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/archive/README.md b/examples/archive/README.md deleted file mode 100644 index 6d24ae0399b8e..0000000000000 --- a/examples/archive/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Supabase Examples Archive - -## supabase-js v1 - -You can find the supabase-js v1 examples at [github.com/supabase/examples-archive](https://github.com/supabase/examples-archive). diff --git a/examples/auth/flutter-mfa/.gitignore b/examples/auth/flutter-mfa/.gitignore deleted file mode 100644 index c39a7b5a271f7..0000000000000 --- a/examples/auth/flutter-mfa/.gitignore +++ /dev/null @@ -1,46 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -/build/ - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release - -pubspec.lock diff --git a/examples/auth/flutter-mfa/README.md b/examples/auth/flutter-mfa/README.md deleted file mode 100644 index 3c99a0e84213f..0000000000000 --- a/examples/auth/flutter-mfa/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# Flutter Supabase MFA Example - -![Flutter MFA with Supabase](https://raw.githubusercontent.com/supabase/supabase/master/examples/auth/flutter-mfa/images/mfa.png) - -A Flutter app demonstrating how to implement Multi-Factor Authentication (MFA) with Supabase and Flutter. A user can sign up, add MFA via an authenticator app, and only after they have signed in using MFA they can view the content from the database. - -- Full tutorial article [here](https://supabase.com/blog/flutter-multi-factor-authentication) - -## Getting Started - -- Create a new Supabase project [here](https://database.new) -- Add your Supabase credentials to `lib/main.dart` -- Run the following SQL from the SQL editor of your Supabase dashboard to create a table and dummy data - -```sql --- Dummy table that contains "secure" information -create table if not exists public.private_posts ( - id int generated by default as identity primary key, - content text not null -); - --- Dmmy "secure" data -insert into public.private_posts - (content) -values - ('Flutter is awesome!'), - ('Supabase is awesome!'), - ('Postgres is awesome!'); - --- Enable RLS for private_posts table -alter table public.private_posts enable row level security; - --- Create a policy that only allows read if they user has signed in via MFA -create policy "Users can view private_posts if they have signed in via MFA" - on public.private_posts - for select - to authenticated - using (auth.jwt()->>'aal' = 'aal2'); -``` - -- Run the app and test the login flow 🚀 - -## Resources - -- [Flutter Tutorial: building a Flutter chat app article](https://supabase.com/blog/flutter-tutorial-building-a-chat-app) -- [Flutter Authorization with RLS article](https://supabase.com/blog/flutter-authorization-with-rls) -- [Supabase docs for Flutter](https://supabase.com/docs/reference/dart/introduction) -- [Supabase Flutter YouTube playlist](https://www.youtube.com/watch?v=F2j6Q-4nLEE&list=PL5S4mPUpp4OtkMf5LNDLXdTcAp1niHjoL) diff --git a/examples/auth/flutter-mfa/analysis_options.yaml b/examples/auth/flutter-mfa/analysis_options.yaml deleted file mode 100644 index 61b6c4de17c96..0000000000000 --- a/examples/auth/flutter-mfa/analysis_options.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# This file configures the analyzer, which statically analyzes Dart code to -# check for errors, warnings, and lints. -# -# The issues identified by the analyzer are surfaced in the UI of Dart-enabled -# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be -# invoked from the command line by running `flutter analyze`. - -# The following line activates a set of recommended lints for Flutter apps, -# packages, and plugins designed to encourage good coding practices. -include: package:flutter_lints/flutter.yaml - -linter: - # The lint rules applied to this project can be customized in the - # section below to disable rules from the `package:flutter_lints/flutter.yaml` - # included above or to enable additional rules. A list of all available lints - # and their documentation is published at - # https://dart-lang.github.io/linter/lints/index.html. - # - # Instead of disabling a lint rule for the entire project in the - # section below, it can also be suppressed for a single line of code - # or a specific dart file by using the `// ignore: name_of_lint` and - # `// ignore_for_file: name_of_lint` syntax on the line or in the file - # producing the lint. - rules: - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/examples/auth/flutter-mfa/android/.gitignore b/examples/auth/flutter-mfa/android/.gitignore deleted file mode 100644 index 6f568019d3c69..0000000000000 --- a/examples/auth/flutter-mfa/android/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java - -# Remember to never publicly share your keystore. -# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app -key.properties -**/*.keystore -**/*.jks diff --git a/examples/auth/flutter-mfa/android/app/build.gradle b/examples/auth/flutter-mfa/android/app/build.gradle deleted file mode 100644 index abc6fa8f0d41c..0000000000000 --- a/examples/auth/flutter-mfa/android/app/build.gradle +++ /dev/null @@ -1,71 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion flutter.compileSdkVersion - ndkVersion flutter.ndkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.mfa_app" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdkVersion flutter.minSdkVersion - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/examples/auth/flutter-mfa/android/app/src/debug/AndroidManifest.xml b/examples/auth/flutter-mfa/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index b491a43c0326d..0000000000000 --- a/examples/auth/flutter-mfa/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/examples/auth/flutter-mfa/android/app/src/main/AndroidManifest.xml b/examples/auth/flutter-mfa/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 3535423451b45..0000000000000 --- a/examples/auth/flutter-mfa/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/auth/flutter-mfa/android/app/src/main/kotlin/com/example/mfa_app/MainActivity.kt b/examples/auth/flutter-mfa/android/app/src/main/kotlin/com/example/mfa_app/MainActivity.kt deleted file mode 100644 index 1db839638787e..0000000000000 --- a/examples/auth/flutter-mfa/android/app/src/main/kotlin/com/example/mfa_app/MainActivity.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.mfa_app - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity: FlutterActivity() { -} diff --git a/examples/auth/flutter-mfa/android/app/src/main/res/drawable-v21/launch_background.xml b/examples/auth/flutter-mfa/android/app/src/main/res/drawable-v21/launch_background.xml deleted file mode 100644 index f74085f3f6a2b..0000000000000 --- a/examples/auth/flutter-mfa/android/app/src/main/res/drawable-v21/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/examples/auth/flutter-mfa/android/app/src/main/res/drawable/launch_background.xml b/examples/auth/flutter-mfa/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f884201..0000000000000 --- a/examples/auth/flutter-mfa/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db77bb4b7b090..0000000000000 Binary files a/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b79bb8a3..0000000000000 Binary files a/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 09d4391482be6..0000000000000 Binary files a/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5f1c8d34e7a8..0000000000000 Binary files a/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d6372eebdb28..0000000000000 Binary files a/examples/auth/flutter-mfa/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/android/app/src/main/res/values-night/styles.xml b/examples/auth/flutter-mfa/android/app/src/main/res/values-night/styles.xml deleted file mode 100644 index 06952be745f9f..0000000000000 --- a/examples/auth/flutter-mfa/android/app/src/main/res/values-night/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/examples/auth/flutter-mfa/android/app/src/main/res/values/styles.xml b/examples/auth/flutter-mfa/android/app/src/main/res/values/styles.xml deleted file mode 100644 index cb1ef88056edd..0000000000000 --- a/examples/auth/flutter-mfa/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/examples/auth/flutter-mfa/android/app/src/profile/AndroidManifest.xml b/examples/auth/flutter-mfa/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index b491a43c0326d..0000000000000 --- a/examples/auth/flutter-mfa/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/examples/auth/flutter-mfa/android/build.gradle b/examples/auth/flutter-mfa/android/build.gradle deleted file mode 100644 index 58a8c74b14743..0000000000000 --- a/examples/auth/flutter-mfa/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.7.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.2.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/examples/auth/flutter-mfa/android/gradle.properties b/examples/auth/flutter-mfa/android/gradle.properties deleted file mode 100644 index 94adc3a3f97aa..0000000000000 --- a/examples/auth/flutter-mfa/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true diff --git a/examples/auth/flutter-mfa/android/gradle/wrapper/gradle-wrapper.properties b/examples/auth/flutter-mfa/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 3c472b99c6f35..0000000000000 --- a/examples/auth/flutter-mfa/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/examples/auth/flutter-mfa/android/settings.gradle b/examples/auth/flutter-mfa/android/settings.gradle deleted file mode 100644 index 44e62bcf06ae6..0000000000000 --- a/examples/auth/flutter-mfa/android/settings.gradle +++ /dev/null @@ -1,11 +0,0 @@ -include ':app' - -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() - -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } - -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/auth/flutter-mfa/images/mfa.png b/examples/auth/flutter-mfa/images/mfa.png deleted file mode 100644 index 0d13668601a18..0000000000000 Binary files a/examples/auth/flutter-mfa/images/mfa.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/.gitignore b/examples/auth/flutter-mfa/ios/.gitignore deleted file mode 100644 index 7a7f9873ad7dc..0000000000000 --- a/examples/auth/flutter-mfa/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/examples/auth/flutter-mfa/ios/Flutter/AppFrameworkInfo.plist b/examples/auth/flutter-mfa/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 9625e105df39e..0000000000000 --- a/examples/auth/flutter-mfa/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 11.0 - - diff --git a/examples/auth/flutter-mfa/ios/Flutter/Debug.xcconfig b/examples/auth/flutter-mfa/ios/Flutter/Debug.xcconfig deleted file mode 100644 index ec97fc6f30212..0000000000000 --- a/examples/auth/flutter-mfa/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/examples/auth/flutter-mfa/ios/Flutter/Release.xcconfig b/examples/auth/flutter-mfa/ios/Flutter/Release.xcconfig deleted file mode 100644 index c4855bfe2000b..0000000000000 --- a/examples/auth/flutter-mfa/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/examples/auth/flutter-mfa/ios/Podfile b/examples/auth/flutter-mfa/ios/Podfile deleted file mode 100644 index 88359b225fa12..0000000000000 --- a/examples/auth/flutter-mfa/ios/Podfile +++ /dev/null @@ -1,41 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '11.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/examples/auth/flutter-mfa/ios/Podfile.lock b/examples/auth/flutter-mfa/ios/Podfile.lock deleted file mode 100644 index 6d81251b8162e..0000000000000 --- a/examples/auth/flutter-mfa/ios/Podfile.lock +++ /dev/null @@ -1,47 +0,0 @@ -PODS: - - app_links (0.0.1): - - Flutter - - Flutter (1.0.0) - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - sign_in_with_apple (0.0.1): - - Flutter - - url_launcher_ios (0.0.1): - - Flutter - - webview_flutter_wkwebview (0.0.1): - - Flutter - -DEPENDENCIES: - - app_links (from `.symlinks/plugins/app_links/ios`) - - Flutter (from `Flutter`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`) - - sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) - -EXTERNAL SOURCES: - app_links: - :path: ".symlinks/plugins/app_links/ios" - Flutter: - :path: Flutter - path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/ios" - sign_in_with_apple: - :path: ".symlinks/plugins/sign_in_with_apple/ios" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - webview_flutter_wkwebview: - :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" - -SPEC CHECKSUMS: - app_links: ab4ba54d10a13d45825336bc9707b5eadee81191 - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - path_provider_foundation: c68054786f1b4f3343858c1e1d0caaded73f0be9 - sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440 - url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4 - webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a - -PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 - -COCOAPODS: 1.11.3 diff --git a/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.pbxproj b/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 4dc3538b30091..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,554 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C58F27931800A710F1ED55BD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E65A323812417A942D5923D /* Pods_Runner.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1E6FF45445258DA130A6AB56 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6369AE2ED102565F36ABECC7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E65A323812417A942D5923D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A42A5566B4F3D0FC293BE708 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C58F27931800A710F1ED55BD /* Pods_Runner.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4B1D317BFE26C01D92529645 /* Pods */ = { - isa = PBXGroup; - children = ( - 6369AE2ED102565F36ABECC7 /* Pods-Runner.debug.xcconfig */, - A42A5566B4F3D0FC293BE708 /* Pods-Runner.release.xcconfig */, - 1E6FF45445258DA130A6AB56 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 6669F57AE1C3DED7B0B707BB /* Frameworks */ = { - isa = PBXGroup; - children = ( - 9E65A323812417A942D5923D /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - 4B1D317BFE26C01D92529645 /* Pods */, - 6669F57AE1C3DED7B0B707BB /* Frameworks */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9B9305F77316C8A7DFFFD6FB /* [CP] Check Pods Manifest.lock */, - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 0C31EF6C0E65A31D086988A3 /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1300; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 0C31EF6C0E65A31D086988A3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - 9B9305F77316C8A7DFFFD6FB /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = Z6UYZY8QU4; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mfaApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = Z6UYZY8QU4; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mfaApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = Z6UYZY8QU4; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mfaApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6254f0..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d68d..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea15f..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/examples/auth/flutter-mfa/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/auth/flutter-mfa/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index c87d15a335208..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/auth/flutter-mfa/ios/Runner.xcworkspace/contents.xcworkspacedata b/examples/auth/flutter-mfa/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 21a3cc14c74e9..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/examples/auth/flutter-mfa/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/auth/flutter-mfa/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d68d..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/auth/flutter-mfa/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/auth/flutter-mfa/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea15f..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/examples/auth/flutter-mfa/ios/Runner/AppDelegate.swift b/examples/auth/flutter-mfa/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a8c128..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fab2d9de..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725e9b..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 7353c41ecf9ca..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 797d452e45897..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 6ed2d933e1120..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cd7b0099ca80..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index fe730945a01f6..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index 321773cd857a8..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 797d452e45897..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 502f463a9bc88..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index 0ec303439225b..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 0ec303439225b..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index e9f5fea27c705..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 84ac32ae7d989..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 8953cba090649..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 0467bf12aa4d2..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2fd4678..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad3b0..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b0..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b0..0000000000000 Binary files a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b70f18..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/examples/auth/flutter-mfa/ios/Runner/Base.lproj/LaunchScreen.storyboard b/examples/auth/flutter-mfa/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7c9390..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/auth/flutter-mfa/ios/Runner/Base.lproj/Main.storyboard b/examples/auth/flutter-mfa/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516fb38e..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/auth/flutter-mfa/ios/Runner/Info.plist b/examples/auth/flutter-mfa/ios/Runner/Info.plist deleted file mode 100644 index 203cfd56dde79..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner/Info.plist +++ /dev/null @@ -1,67 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Mfa App - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - mfa_app - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - - FlutterDeepLinkingEnabled - - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLSchemes - - mfa-app - - - - - - - diff --git a/examples/auth/flutter-mfa/ios/Runner/Runner-Bridging-Header.h b/examples/auth/flutter-mfa/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a560b42f..0000000000000 --- a/examples/auth/flutter-mfa/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/examples/auth/flutter-mfa/lib/main.dart b/examples/auth/flutter-mfa/lib/main.dart deleted file mode 100644 index 1387b15d0934d..0000000000000 --- a/examples/auth/flutter-mfa/lib/main.dart +++ /dev/null @@ -1,102 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; -import 'package:mfa_app/pages/auth/login_page.dart'; -import 'package:mfa_app/pages/auth/register_page.dart'; -import 'package:mfa_app/pages/home_page.dart'; -import 'package:mfa_app/pages/list_mfa_page.dart'; -import 'package:mfa_app/pages/mfa/verify_page.dart'; -import 'package:supabase_flutter/supabase_flutter.dart'; -import 'package:mfa_app/pages/mfa/enroll_page.dart'; - -void main() async { - await Supabase.initialize( - url: 'YOUR_SUPABASE_URL', - anonKey: 'YOUR_ANON_KEY', - ); - runApp(const MyApp()); -} - -/// Extract SupabaseClient instance in a handy variable -final supabase = Supabase.instance.client; - -final _router = GoRouter( - routes: [ - GoRoute( - path: HomePage.route, - builder: (context, state) => const HomePage(), - ), - GoRoute( - path: ListMFAPage.route, - builder: (context, state) => ListMFAPage(), - ), - GoRoute( - path: LoginPage.route, - builder: (context, state) => const LoginPage(), - ), - GoRoute( - path: RegisterPage.route, - builder: (context, state) => const RegisterPage(), - ), - GoRoute( - path: MFAEnrollPage.route, - builder: (context, state) => const MFAEnrollPage(), - ), - GoRoute( - path: MFAVerifyPage.route, - builder: (context, state) => const MFAVerifyPage(), - ), - ], - redirect: (context, state) async { - // Any users can visit the /auth route - if (state.location.contains('/auth') == true) { - return null; - } - - final session = supabase.auth.currentSession; - // A user without a session should be redirected to the register page - if (session == null) { - return RegisterPage.route; - } - - final assuranceLevelData = - supabase.auth.mfa.getAuthenticatorAssuranceLevel(); - - // The user has not setup MFA yet, so send them to enroll MFA page. - if (assuranceLevelData.currentLevel == AuthenticatorAssuranceLevels.aal1) { - await supabase.auth.refreshSession(); - final nextLevel = - supabase.auth.mfa.getAuthenticatorAssuranceLevel().nextLevel; - if (nextLevel == AuthenticatorAssuranceLevels.aal2) { - // The user has already setup MFA, but haven't login via MFA - // Redirect them to the verify page - return MFAVerifyPage.route; - } else { - // The user has not yet setup MFA - // Redirect them to the enrollment page - return MFAEnrollPage.route; - } - } - - // The user has signed invia MFA, and is allowed to view any page. - return null; - }, -); - -class MyApp extends StatelessWidget { - const MyApp({super.key}); - - // This widget is the root of your application. - @override - Widget build(BuildContext context) { - return MaterialApp.router( - title: 'MFA App', - debugShowCheckedModeBanner: false, - theme: ThemeData.light().copyWith( - inputDecorationTheme: const InputDecorationTheme( - border: OutlineInputBorder(), - ), - ), - routerConfig: _router, - ); - } -} diff --git a/examples/auth/flutter-mfa/lib/pages/auth/login_page.dart b/examples/auth/flutter-mfa/lib/pages/auth/login_page.dart deleted file mode 100644 index 19fecb7eab8ff..0000000000000 --- a/examples/auth/flutter-mfa/lib/pages/auth/login_page.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; -import 'package:mfa_app/main.dart'; -import 'package:mfa_app/pages/mfa/verify_page.dart'; -import 'package:supabase_flutter/supabase_flutter.dart'; - -class LoginPage extends StatefulWidget { - static const route = '/auth/login'; - - const LoginPage({super.key}); - - @override - State createState() => _LoginPageState(); -} - -class _LoginPageState extends State { - final _emailController = TextEditingController(); - final _passwordController = TextEditingController(); - - @override - void dispose() { - _emailController.dispose(); - _passwordController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: const Text('Login')), - body: ListView( - padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 24), - children: [ - TextFormField( - controller: _emailController, - decoration: const InputDecoration( - label: Text('Email'), - ), - ), - const SizedBox(height: 16), - TextFormField( - controller: _passwordController, - decoration: const InputDecoration( - label: Text('Password'), - ), - obscureText: true, - ), - const SizedBox(height: 16), - ElevatedButton( - onPressed: () async { - try { - final email = _emailController.text.trim(); - final password = _passwordController.text.trim(); - await supabase.auth.signInWithPassword( - email: email, - password: password, - ); - if (mounted) { - context.go(MFAVerifyPage.route); - } - } on AuthException catch (error) { - ScaffoldMessenger.of(context) - .showSnackBar(SnackBar(content: Text(error.message))); - } catch (error) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Unexpected error occurred'))); - } - }, - child: const Text('Login'), - ), - ], - ), - ); - } -} diff --git a/examples/auth/flutter-mfa/lib/pages/auth/register_page.dart b/examples/auth/flutter-mfa/lib/pages/auth/register_page.dart deleted file mode 100644 index 09d05dee70d35..0000000000000 --- a/examples/auth/flutter-mfa/lib/pages/auth/register_page.dart +++ /dev/null @@ -1,101 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; -import 'package:mfa_app/main.dart'; -import 'package:mfa_app/pages/auth/login_page.dart'; -import 'package:mfa_app/pages/mfa/enroll_page.dart'; -import 'package:supabase_flutter/supabase_flutter.dart'; - -class RegisterPage extends StatefulWidget { - static const route = '/auth/register'; - - const RegisterPage({super.key}); - - @override - State createState() => _RegisterPageState(); -} - -class _RegisterPageState extends State { - final _emailController = TextEditingController(); - final _passwordController = TextEditingController(); - - bool _isLoading = false; - - @override - void dispose() { - _emailController.dispose(); - _passwordController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: const Text('Register')), - body: ListView( - padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 24), - children: [ - TextFormField( - controller: _emailController, - decoration: const InputDecoration( - label: Text('Email'), - ), - ), - const SizedBox(height: 16), - TextFormField( - controller: _passwordController, - decoration: const InputDecoration( - label: Text('Password'), - ), - obscureText: true, - ), - const SizedBox(height: 16), - ElevatedButton( - onPressed: () async { - try { - setState(() { - _isLoading = true; - }); - final email = _emailController.text.trim(); - final password = _passwordController.text.trim(); - await supabase.auth.signUp( - email: email, - password: password, - emailRedirectTo: - 'mfa-app://callback${MFAEnrollPage.route}', // redirect the user to setup MFA page after email confirmation - ); - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Check your inbox.'))); - } - } on AuthException catch (error) { - ScaffoldMessenger.of(context) - .showSnackBar(SnackBar(content: Text(error.message))); - } catch (error) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Unexpected error occurred'))); - } - if (mounted) { - setState(() { - _isLoading = false; - }); - } - }, - child: _isLoading - ? const SizedBox( - height: 24, - width: 24, - child: Center( - child: CircularProgressIndicator(color: Colors.white)), - ) - : const Text('Register'), - ), - const SizedBox(height: 16), - TextButton( - onPressed: () => context.push(LoginPage.route), - child: const Text('I already have an account'), - ) - ], - ), - ); - } -} diff --git a/examples/auth/flutter-mfa/lib/pages/home_page.dart b/examples/auth/flutter-mfa/lib/pages/home_page.dart deleted file mode 100644 index f540edcee92cd..0000000000000 --- a/examples/auth/flutter-mfa/lib/pages/home_page.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; -import 'package:mfa_app/main.dart'; -import 'package:mfa_app/pages/auth/register_page.dart'; -import 'package:mfa_app/pages/list_mfa_page.dart'; - -class HomePage extends StatelessWidget { - static const route = '/'; - - const HomePage({super.key}); - - @override - Widget build(BuildContext context) { - final privatePostsFuture = - supabase.from('private_posts').select>>(); - - return Scaffold( - appBar: AppBar( - title: const Text('Home'), - actions: [ - PopupMenuButton( - itemBuilder: (context) { - return [ - PopupMenuItem( - child: const Text('Unenroll MFA'), - onTap: () { - context.push(ListMFAPage.route); - }, - ), - PopupMenuItem( - child: const Text('Logout'), - onTap: () { - supabase.auth.signOut(); - context.go(RegisterPage.route); - }, - ), - ]; - }, - ) - ], - ), - body: FutureBuilder>>( - future: privatePostsFuture, - builder: (context, snapshot) { - if (snapshot.hasError) { - return Center(child: Text(snapshot.error.toString())); - } - if (!snapshot.hasData) { - return const Center(child: CircularProgressIndicator()); - } - - // Display the secure private content upon retrieval - final data = snapshot.data!; - return ListView.builder( - itemCount: data.length, - itemBuilder: (context, index) { - return ListTile(title: Text(data[index]['content'])); - }, - ); - }, - ), - ); - } -} diff --git a/examples/auth/flutter-mfa/lib/pages/list_mfa_page.dart b/examples/auth/flutter-mfa/lib/pages/list_mfa_page.dart deleted file mode 100644 index 069b3db7f8be8..0000000000000 --- a/examples/auth/flutter-mfa/lib/pages/list_mfa_page.dart +++ /dev/null @@ -1,77 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; -import 'package:mfa_app/main.dart'; -import 'package:mfa_app/pages/auth/register_page.dart'; - -/// A page that lists the currently signed in user's MFA methods. -/// -/// The user can unenroll the factors. -class ListMFAPage extends StatelessWidget { - static const route = '/list-mfa'; - ListMFAPage({super.key}); - - final _factorListFuture = supabase.auth.mfa.listFactors(); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: const Text('List of MFA Factors')), - body: FutureBuilder( - future: _factorListFuture, - builder: (context, snapshot) { - if (snapshot.hasError) { - return Center(child: Text(snapshot.error.toString())); - } - if (!snapshot.hasData) { - return const Center(child: CircularProgressIndicator()); - } - - final response = snapshot.data!; - final factors = response.all; - return ListView.builder( - itemCount: factors.length, - itemBuilder: (context, index) { - final factor = factors[index]; - return ListTile( - title: Text(factor.friendlyName ?? factor.factorType.name), - subtitle: Text(factor.status.name), - trailing: IconButton( - onPressed: () { - showDialog( - context: context, - builder: (context) { - return AlertDialog( - title: const Text( - 'Are you sure you want to delete this factor? You will be signed out of the app upon removing the factor.', - ), - actions: [ - TextButton( - onPressed: () { - context.pop(); - }, - child: const Text('cancel'), - ), - TextButton( - onPressed: () async { - await supabase.auth.mfa.unenroll(factor.id); - await supabase.auth.signOut(); - if (context.mounted) { - context.go(RegisterPage.route); - } - }, - child: const Text('delete'), - ), - ], - ); - }); - }, - icon: const Icon(Icons.delete_outline), - ), - ); - }, - ); - }, - ), - ); - } -} diff --git a/examples/auth/flutter-mfa/lib/pages/mfa/enroll_page.dart b/examples/auth/flutter-mfa/lib/pages/mfa/enroll_page.dart deleted file mode 100644 index 15f129ccd2dd8..0000000000000 --- a/examples/auth/flutter-mfa/lib/pages/mfa/enroll_page.dart +++ /dev/null @@ -1,135 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:go_router/go_router.dart'; -import 'package:mfa_app/main.dart'; -import 'package:mfa_app/pages/auth/register_page.dart'; -import 'package:mfa_app/pages/home_page.dart'; -import 'package:supabase_flutter/supabase_flutter.dart'; - -class MFAEnrollPage extends StatefulWidget { - static const route = '/mfa/enroll'; - const MFAEnrollPage({super.key}); - - @override - State createState() => _MFAEnrollPageState(); -} - -class _MFAEnrollPageState extends State { - final _enrollFuture = supabase.auth.mfa.enroll(); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Setup MFA'), - actions: [ - TextButton( - onPressed: () { - supabase.auth.signOut(); - context.go(RegisterPage.route); - }, - child: Text( - 'Logout', - style: TextStyle(color: Theme.of(context).colorScheme.onPrimary), - ), - ), - ], - ), - body: FutureBuilder( - future: _enrollFuture, - builder: (context, snapshot) { - if (snapshot.hasError) { - return Center(child: Text(snapshot.error.toString())); - } - if (!snapshot.hasData) { - return const Center(child: CircularProgressIndicator()); - } - - final response = snapshot.data!; - final qrCodeUrl = response.totp.qrCode; - final secret = response.totp.secret; - final factorId = response.id; - - return ListView( - padding: const EdgeInsets.symmetric( - horizontal: 20, - vertical: 24, - ), - children: [ - const Text( - 'Open your authentication app and add this app via QR code or by pasting the code below.', - style: TextStyle( - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 16), - SvgPicture.string( - qrCodeUrl, - width: 150, - height: 150, - ), - const SizedBox(height: 16), - Row( - children: [ - Expanded( - child: Text( - secret, - style: const TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18, - ), - ), - ), - IconButton( - onPressed: () { - Clipboard.setData(ClipboardData(text: secret)); - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: Text('Copied to your clip board'))); - }, - icon: const Icon(Icons.copy), - ), - ], - ), - const SizedBox(height: 16), - const Text('Enter the code shown in your authentication app.'), - const SizedBox(height: 16), - TextFormField( - decoration: const InputDecoration( - hintText: '000000', - ), - style: const TextStyle(fontSize: 24), - textAlign: TextAlign.center, - keyboardType: TextInputType.number, - onChanged: (value) async { - if (value.length != 6) return; - - // kick off the verification process once 6 characters are entered - try { - final challenge = - await supabase.auth.mfa.challenge(factorId: factorId); - await supabase.auth.mfa.verify( - factorId: factorId, - challengeId: challenge.id, - code: value, - ); - await supabase.auth.refreshSession(); - if (mounted) { - context.go(HomePage.route); - } - } on AuthException catch (error) { - ScaffoldMessenger.of(context) - .showSnackBar(SnackBar(content: Text(error.message))); - } catch (error) { - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: Text('Unexpected error occurred'))); - } - }, - ), - ], - ); - }, - ), - ); - } -} diff --git a/examples/auth/flutter-mfa/lib/pages/mfa/verify_page.dart b/examples/auth/flutter-mfa/lib/pages/mfa/verify_page.dart deleted file mode 100644 index 45b00b2eca558..0000000000000 --- a/examples/auth/flutter-mfa/lib/pages/mfa/verify_page.dart +++ /dev/null @@ -1,88 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; -import 'package:mfa_app/main.dart'; -import 'package:mfa_app/pages/auth/register_page.dart'; -import 'package:mfa_app/pages/home_page.dart'; -import 'package:supabase_flutter/supabase_flutter.dart'; - -class MFAVerifyPage extends StatefulWidget { - static const route = '/mfa/verify'; - const MFAVerifyPage({super.key}); - - @override - State createState() => _MFAVerifyPageState(); -} - -class _MFAVerifyPageState extends State { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Verify MFA'), - actions: [ - TextButton( - onPressed: () { - supabase.auth.signOut(); - context.go(RegisterPage.route); - }, - child: Text( - 'Logout', - style: TextStyle(color: Theme.of(context).colorScheme.onPrimary), - ), - ), - ], - ), - body: ListView( - padding: const EdgeInsets.symmetric( - horizontal: 20, - vertical: 24, - ), - children: [ - Text( - 'Verification Required', - style: Theme.of(context).textTheme.titleLarge, - ), - const SizedBox(height: 16), - const Text('Enter the code shown in your authentication app.'), - const SizedBox(height: 16), - TextFormField( - decoration: const InputDecoration( - hintText: '000000', - ), - style: const TextStyle(fontSize: 24), - textAlign: TextAlign.center, - keyboardType: TextInputType.number, - onChanged: (value) async { - if (value.length != 6) return; - - // kick off the verification process once 6 characters are entered - try { - final factorsResponse = await supabase.auth.mfa.listFactors(); - final factor = factorsResponse.totp.first; - final factorId = factor.id; - - final challenge = - await supabase.auth.mfa.challenge(factorId: factorId); - await supabase.auth.mfa.verify( - factorId: factorId, - challengeId: challenge.id, - code: value, - ); - await supabase.auth.refreshSession(); - if (mounted) { - context.go(HomePage.route); - } - } on AuthException catch (error) { - ScaffoldMessenger.of(context) - .showSnackBar(SnackBar(content: Text(error.message))); - } catch (error) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Unexpected error occurred'))); - } - }, - ), - ], - ), - ); - } -} diff --git a/examples/auth/flutter-mfa/pubspec.yaml b/examples/auth/flutter-mfa/pubspec.yaml deleted file mode 100644 index 94974cd480005..0000000000000 --- a/examples/auth/flutter-mfa/pubspec.yaml +++ /dev/null @@ -1,91 +0,0 @@ -name: mfa_app -description: A new Flutter project. -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -# In Windows, build-name is used as the major, minor, and patch parts -# of the product and file versions whie build-number is used as the build suffix. -version: 1.0.0+1 - -environment: - sdk: '>=2.19.6 <4.0.0' - -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. -dependencies: - flutter: - sdk: flutter - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.2 - supabase_flutter: ^1.8.1 - go_router: ^7.0.0 - flutter_svg: ^2.0.5 - -dev_dependencies: - flutter_test: - sdk: flutter - - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. - flutter_lints: ^2.0.0 - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. -flutter: - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/examples/auth/flutter-mfa/web/favicon.png b/examples/auth/flutter-mfa/web/favicon.png deleted file mode 100644 index 8aaa46ac1ae21..0000000000000 Binary files a/examples/auth/flutter-mfa/web/favicon.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/web/icons/Icon-192.png b/examples/auth/flutter-mfa/web/icons/Icon-192.png deleted file mode 100644 index b749bfef07473..0000000000000 Binary files a/examples/auth/flutter-mfa/web/icons/Icon-192.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/web/icons/Icon-512.png b/examples/auth/flutter-mfa/web/icons/Icon-512.png deleted file mode 100644 index 88cfd48dff116..0000000000000 Binary files a/examples/auth/flutter-mfa/web/icons/Icon-512.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/web/icons/Icon-maskable-192.png b/examples/auth/flutter-mfa/web/icons/Icon-maskable-192.png deleted file mode 100644 index eb9b4d76e5255..0000000000000 Binary files a/examples/auth/flutter-mfa/web/icons/Icon-maskable-192.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/web/icons/Icon-maskable-512.png b/examples/auth/flutter-mfa/web/icons/Icon-maskable-512.png deleted file mode 100644 index d69c56691fbdb..0000000000000 Binary files a/examples/auth/flutter-mfa/web/icons/Icon-maskable-512.png and /dev/null differ diff --git a/examples/auth/flutter-mfa/web/index.html b/examples/auth/flutter-mfa/web/index.html deleted file mode 100644 index 68a5ad2b5cb7f..0000000000000 --- a/examples/auth/flutter-mfa/web/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - mfa_app - - - - - - - - - - diff --git a/examples/auth/flutter-mfa/web/manifest.json b/examples/auth/flutter-mfa/web/manifest.json deleted file mode 100644 index 222e13d6e91fe..0000000000000 --- a/examples/auth/flutter-mfa/web/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "mfa_app", - "short_name": "mfa_app", - "start_url": ".", - "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", - "description": "A new Flutter project.", - "orientation": "portrait-primary", - "prefer_related_applications": false, - "icons": [ - { - "src": "icons/Icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "icons/Icon-512.png", - "sizes": "512x512", - "type": "image/png" - }, - { - "src": "icons/Icon-maskable-192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "maskable" - }, - { - "src": "icons/Icon-maskable-512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "maskable" - } - ] -} diff --git a/examples/auth/flutter-native-google-auth/.gitignore b/examples/auth/flutter-native-google-auth/.gitignore deleted file mode 100644 index 24476c5d1eb55..0000000000000 --- a/examples/auth/flutter-native-google-auth/.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -/build/ - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/examples/auth/flutter-native-google-auth/.metadata b/examples/auth/flutter-native-google-auth/.metadata deleted file mode 100644 index 30d90a7ef8bab..0000000000000 --- a/examples/auth/flutter-native-google-auth/.metadata +++ /dev/null @@ -1,45 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled. - -version: - revision: 796c8ef79279f9c774545b3771238c3098dbefab - channel: stable - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: android - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: ios - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: linux - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: macos - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: web - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: windows - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/examples/auth/flutter-native-google-auth/README.md b/examples/auth/flutter-native-google-auth/README.md deleted file mode 100644 index bb53729a0ba8f..0000000000000 --- a/examples/auth/flutter-native-google-auth/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Flutter native Google auth with Supabase - -![Flutter Google authentication with Supabase auth](https://raw.githubusercontent.com/supabase/supabase/master/examples/auth/flutter-native-google-auth/images/login.png) - -A simple Flutter application with native Google login capabilities on iOS and Android using Supabase auth. Upon signing in, the user is presented with a profile screen where their name and profile image from their Google account are displayed. - -- Full tutorial article [here](https://supabase.com/blog/flutter-authentication) -- Full video guide [here](https://www.youtube.com/watch?v=YtvxRgGouwg) - -## Getting Started - -- Create a new Supabase project [here](https://database.new) -- Add your Supabase credentials to `lib/main.dart` -- Obtain Google API client ID for [Android](https://developers.google.com/identity/sign-in/android/start-integrating#configure_a_project) and [iOS](https://developers.google.com/identity/sign-in/ios/start-integrating#get_an_oauth_client_id) -- Add the client IDs in Supabase dashboard under `Auth -> Providers -> Google -> Authorized Client IDs` and turn on `Enable Sign in with Google` -- Find the `clientId` variable in `lib/screens/login_screen.dart` and paste the two client IDs -- For android open `android/app/build.gradle` file, locate `appAuthRedirectScheme` variable and replace the value with your reversed DNS form of the Android client ID. For example, if your client ID is `1234567890-abc123def456.apps.googleusercontent.com`, then the value should be `com.googleusercontent.apps.1234567890-abc123def456` -- Run the app on iOS or Android and test the login flow 🚀 - -## Resources - -- [Flutter Authorization with RLS article](https://supabase.com/blog/flutter-authorization-with-rls) -- [Securing your Flutter apps with Multi-Factor Authentication article](https://supabase.com/blog/flutter-multi-factor-authentication) -- [Flutter Tutorial: building a Flutter chat app article](https://supabase.com/blog/flutter-tutorial-building-a-chat-app) -- [Supabase docs for Flutter](https://supabase.com/docs/reference/dart/introduction) -- [Supabase Flutter YouTube playlist](https://www.youtube.com/watch?v=F2j6Q-4nLEE&list=PL5S4mPUpp4OtkMf5LNDLXdTcAp1niHjoL) diff --git a/examples/auth/flutter-native-google-auth/analysis_options.yaml b/examples/auth/flutter-native-google-auth/analysis_options.yaml deleted file mode 100644 index 61b6c4de17c96..0000000000000 --- a/examples/auth/flutter-native-google-auth/analysis_options.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# This file configures the analyzer, which statically analyzes Dart code to -# check for errors, warnings, and lints. -# -# The issues identified by the analyzer are surfaced in the UI of Dart-enabled -# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be -# invoked from the command line by running `flutter analyze`. - -# The following line activates a set of recommended lints for Flutter apps, -# packages, and plugins designed to encourage good coding practices. -include: package:flutter_lints/flutter.yaml - -linter: - # The lint rules applied to this project can be customized in the - # section below to disable rules from the `package:flutter_lints/flutter.yaml` - # included above or to enable additional rules. A list of all available lints - # and their documentation is published at - # https://dart-lang.github.io/linter/lints/index.html. - # - # Instead of disabling a lint rule for the entire project in the - # section below, it can also be suppressed for a single line of code - # or a specific dart file by using the `// ignore: name_of_lint` and - # `// ignore_for_file: name_of_lint` syntax on the line or in the file - # producing the lint. - rules: - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/examples/auth/flutter-native-google-auth/android/.gitignore b/examples/auth/flutter-native-google-auth/android/.gitignore deleted file mode 100644 index 6f568019d3c69..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java - -# Remember to never publicly share your keystore. -# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app -key.properties -**/*.keystore -**/*.jks diff --git a/examples/auth/flutter-native-google-auth/android/app/build.gradle b/examples/auth/flutter-native-google-auth/android/app/build.gradle deleted file mode 100644 index 1eb3c6c96393d..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/app/build.gradle +++ /dev/null @@ -1,77 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - namespace "com.example.myauthapp" - compileSdkVersion flutter.compileSdkVersion - ndkVersion flutter.ndkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.myauthapp" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdkVersion 20 - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - manifestPlaceholders += [ - // *account_id* will be unique for every single app - 'appAuthRedirectScheme': 'com.googleusercontent.apps.*account_id*' - ] - - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/examples/auth/flutter-native-google-auth/android/app/src/debug/AndroidManifest.xml b/examples/auth/flutter-native-google-auth/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index 399f6981d5d35..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/AndroidManifest.xml b/examples/auth/flutter-native-google-auth/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index ee07181d612fc..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/kotlin/com/example/myauthapp/MainActivity.kt b/examples/auth/flutter-native-google-auth/android/app/src/main/kotlin/com/example/myauthapp/MainActivity.kt deleted file mode 100644 index 062b5da942468..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/app/src/main/kotlin/com/example/myauthapp/MainActivity.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.myauthapp - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity: FlutterActivity() { -} diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/res/drawable-v21/launch_background.xml b/examples/auth/flutter-native-google-auth/android/app/src/main/res/drawable-v21/launch_background.xml deleted file mode 100644 index f74085f3f6a2b..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/app/src/main/res/drawable-v21/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/res/drawable/launch_background.xml b/examples/auth/flutter-native-google-auth/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f884201..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db77bb4b7b090..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b79bb8a3..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 09d4391482be6..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5f1c8d34e7a8..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d6372eebdb28..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/res/values-night/styles.xml b/examples/auth/flutter-native-google-auth/android/app/src/main/res/values-night/styles.xml deleted file mode 100644 index 06952be745f9f..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/app/src/main/res/values-night/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/examples/auth/flutter-native-google-auth/android/app/src/main/res/values/styles.xml b/examples/auth/flutter-native-google-auth/android/app/src/main/res/values/styles.xml deleted file mode 100644 index cb1ef88056edd..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/examples/auth/flutter-native-google-auth/android/app/src/profile/AndroidManifest.xml b/examples/auth/flutter-native-google-auth/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index 399f6981d5d35..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/examples/auth/flutter-native-google-auth/android/build.gradle b/examples/auth/flutter-native-google-auth/android/build.gradle deleted file mode 100644 index f7eb7f63ce1ad..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.7.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/examples/auth/flutter-native-google-auth/android/gradle.properties b/examples/auth/flutter-native-google-auth/android/gradle.properties deleted file mode 100644 index 94adc3a3f97aa..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true diff --git a/examples/auth/flutter-native-google-auth/android/gradle/wrapper/gradle-wrapper.properties b/examples/auth/flutter-native-google-auth/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 3c472b99c6f35..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/examples/auth/flutter-native-google-auth/android/settings.gradle b/examples/auth/flutter-native-google-auth/android/settings.gradle deleted file mode 100644 index 44e62bcf06ae6..0000000000000 --- a/examples/auth/flutter-native-google-auth/android/settings.gradle +++ /dev/null @@ -1,11 +0,0 @@ -include ':app' - -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() - -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } - -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/auth/flutter-native-google-auth/images/login.png b/examples/auth/flutter-native-google-auth/images/login.png deleted file mode 100644 index 2a64b8ade38bf..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/images/login.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/.gitignore b/examples/auth/flutter-native-google-auth/ios/.gitignore deleted file mode 100644 index 7a7f9873ad7dc..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/examples/auth/flutter-native-google-auth/ios/Flutter/AppFrameworkInfo.plist b/examples/auth/flutter-native-google-auth/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 9625e105df39e..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 11.0 - - diff --git a/examples/auth/flutter-native-google-auth/ios/Flutter/Debug.xcconfig b/examples/auth/flutter-native-google-auth/ios/Flutter/Debug.xcconfig deleted file mode 100644 index ec97fc6f30212..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/examples/auth/flutter-native-google-auth/ios/Flutter/Release.xcconfig b/examples/auth/flutter-native-google-auth/ios/Flutter/Release.xcconfig deleted file mode 100644 index c4855bfe2000b..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/examples/auth/flutter-native-google-auth/ios/Podfile b/examples/auth/flutter-native-google-auth/ios/Podfile deleted file mode 100644 index fdcc671eb341c..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Podfile +++ /dev/null @@ -1,44 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '11.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/examples/auth/flutter-native-google-auth/ios/Podfile.lock b/examples/auth/flutter-native-google-auth/ios/Podfile.lock deleted file mode 100644 index d67eef758189f..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Podfile.lock +++ /dev/null @@ -1,72 +0,0 @@ -PODS: - - app_links (0.0.1): - - Flutter - - AppAuth (1.6.2): - - AppAuth/Core (= 1.6.2) - - AppAuth/ExternalUserAgent (= 1.6.2) - - AppAuth/Core (1.6.2) - - AppAuth/ExternalUserAgent (1.6.2): - - AppAuth/Core - - Flutter (1.0.0) - - flutter_appauth (0.0.1): - - AppAuth (= 1.6.2) - - Flutter - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - shared_preferences_foundation (0.0.1): - - Flutter - - FlutterMacOS - - sign_in_with_apple (0.0.1): - - Flutter - - url_launcher_ios (0.0.1): - - Flutter - - webview_flutter_wkwebview (0.0.1): - - Flutter - -DEPENDENCIES: - - app_links (from `.symlinks/plugins/app_links/ios`) - - Flutter (from `Flutter`) - - flutter_appauth (from `.symlinks/plugins/flutter_appauth/ios`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - - sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) - -SPEC REPOS: - trunk: - - AppAuth - -EXTERNAL SOURCES: - app_links: - :path: ".symlinks/plugins/app_links/ios" - Flutter: - :path: Flutter - flutter_appauth: - :path: ".symlinks/plugins/flutter_appauth/ios" - path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/darwin" - shared_preferences_foundation: - :path: ".symlinks/plugins/shared_preferences_foundation/darwin" - sign_in_with_apple: - :path: ".symlinks/plugins/sign_in_with_apple/ios" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - webview_flutter_wkwebview: - :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" - -SPEC CHECKSUMS: - app_links: 5ef33d0d295a89d9d16bb81b0e3b0d5f70d6c875 - AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - flutter_appauth: cf9b928962105b2a64a9802585d1c8adaf3e0f46 - path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8 - shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c - sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440 - url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4 - webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a - -PODFILE CHECKSUM: 70d9d25280d0dd177a5f637cdb0f0b0b12c6a189 - -COCOAPODS: 1.11.3 diff --git a/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.pbxproj b/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index d607a3d4697e9..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,723 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3304FB9E97805348E2562BE0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B564902DECB04C26DF5C1990 /* Pods_Runner.framework */; }; - 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - DEA8302A70C9ACD2650F9B7C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 828A241E8FA8208665D3EB86 /* Pods_RunnerTests.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 97C146E61CF9000F007C117D /* Project object */; - proxyType = 1; - remoteGlobalIDString = 97C146ED1CF9000F007C117D; - remoteInfo = Runner; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 27BEFA69E5DA94D046EFBE00 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; - 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 38E30A4AF317B140613697D2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 426FE104D430BF3CD70AF9E2 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 472D51D7E326E44047EEC5F0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 828A241E8FA8208665D3EB86 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B564902DECB04C26DF5C1990 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0870FF5D39BE2F0E613C78C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F00CBB189671F834144DE713 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3304FB9E97805348E2562BE0 /* Pods_Runner.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F0B9F11E87752367F31C27C8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DEA8302A70C9ACD2650F9B7C /* Pods_RunnerTests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { - isa = PBXGroup; - children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, - ); - path = RunnerTests; - sourceTree = ""; - }; - 4147D33225043F42F09814E7 /* Pods */ = { - isa = PBXGroup; - children = ( - D0870FF5D39BE2F0E613C78C /* Pods-Runner.debug.xcconfig */, - 38E30A4AF317B140613697D2 /* Pods-Runner.release.xcconfig */, - F00CBB189671F834144DE713 /* Pods-Runner.profile.xcconfig */, - 27BEFA69E5DA94D046EFBE00 /* Pods-RunnerTests.debug.xcconfig */, - 472D51D7E326E44047EEC5F0 /* Pods-RunnerTests.release.xcconfig */, - 426FE104D430BF3CD70AF9E2 /* Pods-RunnerTests.profile.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; - 83C49BB5102259C76EED0D53 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B564902DECB04C26DF5C1990 /* Pods_Runner.framework */, - 828A241E8FA8208665D3EB86 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - 331C8082294A63A400263BE5 /* RunnerTests */, - 4147D33225043F42F09814E7 /* Pods */, - 83C49BB5102259C76EED0D53 /* Frameworks */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - 331C8081294A63A400263BE5 /* RunnerTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 331C8080294A63A400263BE5 /* RunnerTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; - buildPhases = ( - 42C78DCFB35050844813EE93 /* [CP] Check Pods Manifest.lock */, - 331C807D294A63A400263BE5 /* Sources */, - 331C807F294A63A400263BE5 /* Resources */, - F0B9F11E87752367F31C27C8 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 331C8086294A63A400263BE5 /* PBXTargetDependency */, - ); - name = RunnerTests; - productName = RunnerTests; - productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 72352E8546CF6F5BA1AA1932 /* [CP] Check Pods Manifest.lock */, - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - D5C0C78971716833C4CC4F79 /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1300; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 331C8080294A63A400263BE5 = { - CreatedOnToolsVersion = 14.0; - TestTargetID = 97C146ED1CF9000F007C117D; - }; - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - 331C8080294A63A400263BE5 /* RunnerTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 331C807F294A63A400263BE5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 42C78DCFB35050844813EE93 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 72352E8546CF6F5BA1AA1932 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - D5C0C78971716833C4CC4F79 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 331C807D294A63A400263BE5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 97C146ED1CF9000F007C117D /* Runner */; - targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = Z6UYZY8QU4; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.myauthapp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 331C8088294A63A400263BE5 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 27BEFA69E5DA94D046EFBE00 /* Pods-RunnerTests.debug.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.myAuthApp.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; - }; - name = Debug; - }; - 331C8089294A63A400263BE5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 472D51D7E326E44047EEC5F0 /* Pods-RunnerTests.release.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.myAuthApp.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; - }; - name = Release; - }; - 331C808A294A63A400263BE5 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 426FE104D430BF3CD70AF9E2 /* Pods-RunnerTests.profile.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.myAuthApp.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = Z6UYZY8QU4; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.myauthapp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = Z6UYZY8QU4; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.myauthapp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 331C8088294A63A400263BE5 /* Debug */, - 331C8089294A63A400263BE5 /* Release */, - 331C808A294A63A400263BE5 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6254f0..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d68d..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea15f..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index e42adcb34c2d3..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/auth/flutter-native-google-auth/ios/Runner.xcworkspace/contents.xcworkspacedata b/examples/auth/flutter-native-google-auth/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 21a3cc14c74e9..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/examples/auth/flutter-native-google-auth/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/auth/flutter-native-google-auth/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d68d..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/auth/flutter-native-google-auth/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/auth/flutter-native-google-auth/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea15f..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/AppDelegate.swift b/examples/auth/flutter-native-google-auth/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a8c128..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fab2d9de..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725e9b..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 7353c41ecf9ca..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 797d452e45897..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 6ed2d933e1120..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cd7b0099ca80..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index fe730945a01f6..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index 321773cd857a8..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 797d452e45897..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 502f463a9bc88..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index 0ec303439225b..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 0ec303439225b..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index e9f5fea27c705..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 84ac32ae7d989..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 8953cba090649..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 0467bf12aa4d2..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2fd4678..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad3b0..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b0..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b0..0000000000000 Binary files a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and /dev/null differ diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b70f18..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Base.lproj/LaunchScreen.storyboard b/examples/auth/flutter-native-google-auth/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7c9390..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Base.lproj/Main.storyboard b/examples/auth/flutter-native-google-auth/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516fb38e..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Info.plist b/examples/auth/flutter-native-google-auth/ios/Runner/Info.plist deleted file mode 100644 index 41a71962ac35d..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner/Info.plist +++ /dev/null @@ -1,51 +0,0 @@ - - - - - CADisableMinimumFrameDurationOnPhone - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - My Auth App - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Supabase Auth - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UIApplicationSupportsIndirectInputEvents - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/examples/auth/flutter-native-google-auth/ios/Runner/Runner-Bridging-Header.h b/examples/auth/flutter-native-google-auth/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a560b42f..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/examples/auth/flutter-native-google-auth/ios/RunnerTests/RunnerTests.swift b/examples/auth/flutter-native-google-auth/ios/RunnerTests/RunnerTests.swift deleted file mode 100644 index 86a7c3b1b6119..0000000000000 --- a/examples/auth/flutter-native-google-auth/ios/RunnerTests/RunnerTests.swift +++ /dev/null @@ -1,12 +0,0 @@ -import Flutter -import UIKit -import XCTest - -class RunnerTests: XCTestCase { - - func testExample() { - // If you add code to the Runner application, consider adding tests here. - // See https://developer.apple.com/documentation/xctest for more information about using XCTest. - } - -} diff --git a/examples/auth/flutter-native-google-auth/lib/main.dart b/examples/auth/flutter-native-google-auth/lib/main.dart deleted file mode 100644 index a7be2ac3f1521..0000000000000 --- a/examples/auth/flutter-native-google-auth/lib/main.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:myauthapp/screens/login_screen.dart'; -import 'package:supabase_flutter/supabase_flutter.dart'; - -void main() async { - /// TODO: update Supabase credentials with your own - await Supabase.initialize( - url: 'YOUR_SUPABASE_URL', - anonKey: 'YOUR_ANON_KEY', - ); - runApp(const MyApp()); -} - -final supabase = Supabase.instance.client; - -class MyApp extends StatelessWidget { - const MyApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - title: 'Flutter Auth', - theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - useMaterial3: true, - ), - home: const LoginScreen(), - ); - } -} diff --git a/examples/auth/flutter-native-google-auth/lib/screens/login_screen.dart b/examples/auth/flutter-native-google-auth/lib/screens/login_screen.dart deleted file mode 100644 index 562e3d8376bed..0000000000000 --- a/examples/auth/flutter-native-google-auth/lib/screens/login_screen.dart +++ /dev/null @@ -1,127 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'dart:math'; - -import 'package:crypto/crypto.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_appauth/flutter_appauth.dart'; -import 'package:myauthapp/main.dart'; -import 'package:myauthapp/screens/profile_screen.dart'; -import 'package:supabase_flutter/supabase_flutter.dart'; - -class LoginScreen extends StatefulWidget { - const LoginScreen({super.key}); - - @override - State createState() => _LoginScreenState(); -} - -class _LoginScreenState extends State { - @override - void initState() { - _setupAuthListener(); - super.initState(); - } - - void _setupAuthListener() { - supabase.auth.onAuthStateChange.listen((data) { - final event = data.event; - if (event == AuthChangeEvent.signedIn) { - Navigator.of(context).pushReplacement( - MaterialPageRoute( - builder: (context) => const ProfileScreen(), - ), - ); - } - }); - } - - /// Function to generate a random 16 character string. - String _generateRandomString() { - final random = Random.secure(); - return base64Url.encode(List.generate(16, (_) => random.nextInt(256))); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Login'), - ), - body: Center( - child: ElevatedButton( - onPressed: () async { - const appAuth = FlutterAppAuth(); - - // Just a random string - final rawNonce = _generateRandomString(); - final hashedNonce = - sha256.convert(utf8.encode(rawNonce)).toString(); - - /// TODO: update the iOS and Android client ID with your own. - /// - /// Client ID that you registered with Google Cloud. - /// You will have two different values for iOS and Android. - final clientId = - Platform.isIOS ? 'IOS_CLIENT_ID' : 'ANDROID_CLIENT_ID'; - - /// Set as reversed DNS form of Google Client ID + `:/` for Google login - final redirectUrl = '${clientId.split('.').reversed.join('.')}:/'; - - /// Fixed value for google login - const discoveryUrl = - 'https://accounts.google.com/.well-known/openid-configuration'; - - // authorize the user by opening the concent page - final result = await appAuth.authorize( - AuthorizationRequest( - clientId, - redirectUrl, - discoveryUrl: discoveryUrl, - nonce: hashedNonce, - scopes: [ - 'openid', - 'email', - 'profile', - ], - ), - ); - - if (result == null) { - throw 'No result'; - } - - // Request the access and id token to google - final tokenResult = await appAuth.token( - TokenRequest( - clientId, - redirectUrl, - authorizationCode: result.authorizationCode, - discoveryUrl: discoveryUrl, - codeVerifier: result.codeVerifier, - nonce: result.nonce, - scopes: [ - 'openid', - 'email', - ], - ), - ); - - final idToken = tokenResult?.idToken; - - if (idToken == null) { - throw 'No idToken'; - } - - await supabase.auth.signInWithIdToken( - provider: Provider.google, - idToken: idToken, - nonce: rawNonce, - ); - }, - child: const Text('Google login'), - ), - ), - ); - } -} diff --git a/examples/auth/flutter-native-google-auth/lib/screens/profile_screen.dart b/examples/auth/flutter-native-google-auth/lib/screens/profile_screen.dart deleted file mode 100644 index b3c73dce36bac..0000000000000 --- a/examples/auth/flutter-native-google-auth/lib/screens/profile_screen.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:myauthapp/main.dart'; -import 'package:myauthapp/screens/login_screen.dart'; - -class ProfileScreen extends StatelessWidget { - const ProfileScreen({super.key}); - - @override - Widget build(BuildContext context) { - final user = supabase.auth.currentUser; - final profileImageUrl = user?.userMetadata?['avatar_url']; - final fullName = user?.userMetadata?['full_name']; - return Scaffold( - appBar: AppBar( - title: const Text('Profile'), - actions: [ - TextButton( - onPressed: () async { - await supabase.auth.signOut(); - if (context.mounted) { - Navigator.of(context).pushReplacement( - MaterialPageRoute(builder: (context) => const LoginScreen()), - ); - } - }, - child: const Text('Sign out'), - ) - ], - ), - body: Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - if (profileImageUrl != null) - ClipOval( - child: Image.network( - profileImageUrl, - width: 100, - height: 100, - fit: BoxFit.cover, - ), - ), - const SizedBox(height: 16), - Text( - fullName ?? '', - style: Theme.of(context).textTheme.headlineMedium, - ), - const SizedBox(height: 32), - ], - ), - ), - ); - } -} diff --git a/examples/auth/flutter-native-google-auth/pubspec.lock b/examples/auth/flutter-native-google-auth/pubspec.lock deleted file mode 100644 index 8af39a793f2ec..0000000000000 --- a/examples/auth/flutter-native-google-auth/pubspec.lock +++ /dev/null @@ -1,658 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - app_links: - dependency: transitive - description: - name: app_links - sha256: "16725e716afd0634a5441654b1dda2b6c5557aa230884b5e1f41a5aa546a4cb6" - url: "https://pub.dev" - source: hosted - version: "3.4.3" - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - collection: - dependency: transitive - description: - name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" - url: "https://pub.dev" - source: hosted - version: "1.17.1" - crypto: - dependency: "direct main" - description: - name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.dev" - source: hosted - version: "3.0.3" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be - url: "https://pub.dev" - source: hosted - version: "1.0.5" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 - url: "https://pub.dev" - source: hosted - version: "2.0.2" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_appauth: - dependency: "direct main" - description: - name: flutter_appauth - sha256: a047019b525ab0e260776d1b0da1000b7416b45b9e8dd02d124c9da571fc1918 - url: "https://pub.dev" - source: hosted - version: "6.0.0" - flutter_appauth_platform_interface: - dependency: transitive - description: - name: flutter_appauth_platform_interface - sha256: "44feaa7058191b5d3cd7c9ff195262725773643121bcada172d49c2ddcff71cb" - url: "https://pub.dev" - source: hosted - version: "6.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c - url: "https://pub.dev" - source: hosted - version: "2.0.1" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - functions_client: - dependency: transitive - description: - name: functions_client - sha256: "3b157b4d3ae9e38614fd80fab76d1ef1e0e39ff3412a45de2651f27cecb9d2d2" - url: "https://pub.dev" - source: hosted - version: "1.3.2" - gotrue: - dependency: transitive - description: - name: gotrue - sha256: "3639beedcbf3d63d9b2a6ca856138aff03d9e09bddd4c5477de77c58f36c83ae" - url: "https://pub.dev" - source: hosted - version: "1.9.0" - hive: - dependency: transitive - description: - name: hive - sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - hive_flutter: - dependency: transitive - description: - name: hive_flutter - sha256: dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc - url: "https://pub.dev" - source: hosted - version: "1.1.0" - http: - dependency: transitive - description: - name: http - sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - js: - dependency: transitive - description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.dev" - source: hosted - version: "0.6.7" - jwt_decode: - dependency: transitive - description: - name: jwt_decode - sha256: d2e9f68c052b2225130977429d30f187aa1981d789c76ad104a32243cfdebfbb - url: "https://pub.dev" - source: hosted - version: "0.3.1" - lints: - dependency: transitive - description: - name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - matcher: - dependency: transitive - description: - name: matcher - sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" - url: "https://pub.dev" - source: hosted - version: "0.12.15" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://pub.dev" - source: hosted - version: "0.2.0" - meta: - dependency: transitive - description: - name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" - url: "https://pub.dev" - source: hosted - version: "1.9.1" - mime: - dependency: transitive - description: - name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e - url: "https://pub.dev" - source: hosted - version: "1.0.4" - path: - dependency: transitive - description: - name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" - url: "https://pub.dev" - source: hosted - version: "1.8.3" - path_provider: - dependency: transitive - description: - name: path_provider - sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2" - url: "https://pub.dev" - source: hosted - version: "2.0.15" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86" - url: "https://pub.dev" - source: hosted - version: "2.0.27" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57 - url: "https://pub.dev" - source: hosted - version: "2.1.11" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" - url: "https://pub.dev" - source: hosted - version: "2.0.6" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96" - url: "https://pub.dev" - source: hosted - version: "2.1.7" - platform: - dependency: transitive - description: - name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - postgrest: - dependency: transitive - description: - name: postgrest - sha256: "78fd180ecd2274df7b04c406746495b5c627248856458f8f537bf5348de9c817" - url: "https://pub.dev" - source: hosted - version: "1.3.2" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - realtime_client: - dependency: transitive - description: - name: realtime_client - sha256: "0342f73f42345f3547e3cdcc804a0ed108fcd9142d1537d159aead94a213e248" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - retry: - dependency: transitive - description: - name: retry - sha256: "822e118d5b3aafed083109c72d5f484c6dc66707885e07c0fbcb8b986bba7efc" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - rxdart: - dependency: transitive - description: - name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" - source: hosted - version: "0.27.7" - shared_preferences: - dependency: transitive - description: - name: shared_preferences - sha256: "396f85b8afc6865182610c0a2fc470853d56499f75f7499e2a73a9f0539d23d0" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - shared_preferences_android: - dependency: transitive - description: - name: shared_preferences_android - sha256: "6478c6bbbecfe9aced34c483171e90d7c078f5883558b30ec3163cf18402c749" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - shared_preferences_foundation: - dependency: transitive - description: - name: shared_preferences_foundation - sha256: e014107bb79d6d3297196f4f2d0db54b5d1f85b8ea8ff63b8e8b391a02700feb - url: "https://pub.dev" - source: hosted - version: "2.2.2" - shared_preferences_linux: - dependency: transitive - description: - name: shared_preferences_linux - sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - shared_preferences_platform_interface: - dependency: transitive - description: - name: shared_preferences_platform_interface - sha256: "23b052f17a25b90ff2b61aad4cc962154da76fb62848a9ce088efe30d7c50ab1" - url: "https://pub.dev" - source: hosted - version: "2.3.0" - shared_preferences_web: - dependency: transitive - description: - name: shared_preferences_web - sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - shared_preferences_windows: - dependency: transitive - description: - name: shared_preferences_windows - sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - sign_in_with_apple: - dependency: transitive - description: - name: sign_in_with_apple - sha256: ac3b113767dfdd765078c507dad9d4d9fe96b669cc7bd88fc36fc15376fb3400 - url: "https://pub.dev" - source: hosted - version: "4.3.0" - sign_in_with_apple_platform_interface: - dependency: transitive - description: - name: sign_in_with_apple_platform_interface - sha256: a5883edee09ed6be19de19e7d9f618a617fe41a6fa03f76d082dfb787e9ea18d - url: "https://pub.dev" - source: hosted - version: "1.0.0" - sign_in_with_apple_web: - dependency: transitive - description: - name: sign_in_with_apple_web - sha256: "44b66528f576e77847c14999d5e881e17e7223b7b0625a185417829e5306f47a" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_span: - dependency: transitive - description: - name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://pub.dev" - source: hosted - version: "1.9.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.dev" - source: hosted - version: "1.11.0" - storage_client: - dependency: transitive - description: - name: storage_client - sha256: a3024569213b064587d616827747b766f9bc796e80cec99bd5ffb597b8aeb018 - url: "https://pub.dev" - source: hosted - version: "1.5.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - supabase: - dependency: transitive - description: - name: supabase - sha256: d854acbcfcfe0b3b703854aedd05858d684b2e46f8dca70b262665d7f70ad3d8 - url: "https://pub.dev" - source: hosted - version: "1.9.5" - supabase_flutter: - dependency: "direct main" - description: - name: supabase_flutter - sha256: "2a32140420a3bd1a9e8c093c08d12bbd93ee9fbb8fc373397ef5a3ad9d93f55c" - url: "https://pub.dev" - source: hosted - version: "1.10.6" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb - url: "https://pub.dev" - source: hosted - version: "0.5.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - url_launcher: - dependency: transitive - description: - name: url_launcher - sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3 - url: "https://pub.dev" - source: hosted - version: "6.1.11" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: "15f5acbf0dce90146a0f5a2c4a002b1814a6303c4c5c075aa2623b2d16156f03" - url: "https://pub.dev" - source: hosted - version: "6.0.36" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" - url: "https://pub.dev" - source: hosted - version: "3.0.5" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "91ee3e75ea9dadf38036200c5d3743518f4a5eb77a8d13fda1ee5764373f185e" - url: "https://pub.dev" - source: hosted - version: "3.0.5" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: bfdfa402f1f3298637d71ca8ecfe840b4696698213d5346e9d12d4ab647ee2ea - url: "https://pub.dev" - source: hosted - version: "2.1.3" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: "6bb1e5d7fe53daf02a8fee85352432a40b1f868a81880e99ec7440113d5cfcab" - url: "https://pub.dev" - source: hosted - version: "2.0.17" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771" - url: "https://pub.dev" - source: hosted - version: "3.0.6" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b - url: "https://pub.dev" - source: hosted - version: "2.4.0" - webview_flutter: - dependency: transitive - description: - name: webview_flutter - sha256: "789d52bd789373cc1e100fb634af2127e86c99cf9abde09499743270c5de8d00" - url: "https://pub.dev" - source: hosted - version: "4.2.2" - webview_flutter_android: - dependency: transitive - description: - name: webview_flutter_android - sha256: "532135f6f6b8030cd039f30eab23f340d650350e29f38e9b37d2eaad028f1018" - url: "https://pub.dev" - source: hosted - version: "3.8.0" - webview_flutter_platform_interface: - dependency: transitive - description: - name: webview_flutter_platform_interface - sha256: "656e2aeaef318900fffd21468b6ddc7958c7092a642f0e7220bac328b70d4a81" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - webview_flutter_wkwebview: - dependency: transitive - description: - name: webview_flutter_wkwebview - sha256: "7b203961d6830f3e5ed1df4c4f0493fea8388a46c4d43716167c4a8ba8ecbe83" - url: "https://pub.dev" - source: hosted - version: "3.6.0" - win32: - dependency: transitive - description: - name: win32 - sha256: dfdf0136e0aa7a1b474ea133e67cb0154a0acd2599c4f3ada3b49d38d38793ee - url: "https://pub.dev" - source: hosted - version: "5.0.5" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - yet_another_json_isolate: - dependency: transitive - description: - name: yet_another_json_isolate - sha256: "86fad76026c4241a32831d6c7febd8f9bded5019e2cd36c5b148499808d8307d" - url: "https://pub.dev" - source: hosted - version: "1.1.1" -sdks: - dart: ">=3.0.5 <4.0.0" - flutter: ">=3.3.0" diff --git a/examples/auth/flutter-native-google-auth/pubspec.yaml b/examples/auth/flutter-native-google-auth/pubspec.yaml deleted file mode 100644 index 50025acda2c2b..0000000000000 --- a/examples/auth/flutter-native-google-auth/pubspec.yaml +++ /dev/null @@ -1,27 +0,0 @@ -name: myauthapp -description: A new Flutter project. - -publish_to: 'none' - -version: 1.0.0+1 - -environment: - sdk: '>=3.0.5 <4.0.0' - -dependencies: - flutter: - sdk: flutter - - cupertino_icons: ^1.0.2 - supabase_flutter: ^1.10.6 - flutter_appauth: ^6.0.0 - crypto: ^3.0.3 - -dev_dependencies: - flutter_test: - sdk: flutter - - flutter_lints: ^2.0.0 - -flutter: - uses-material-design: true diff --git a/examples/auth/nextjs/.env.local.example b/examples/auth/nextjs/.env.local.example deleted file mode 100644 index d762c758fbb98..0000000000000 --- a/examples/auth/nextjs/.env.local.example +++ /dev/null @@ -1,4 +0,0 @@ -# Get these from your API settings: https://supabase.com/dashboard/project/_/settings/api - -NEXT_PUBLIC_SUPABASE_URL=your-supabase-url -NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key diff --git a/examples/auth/nextjs/.eslintrc.json b/examples/auth/nextjs/.eslintrc.json deleted file mode 100644 index bffb357a71225..0000000000000 --- a/examples/auth/nextjs/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/examples/auth/nextjs/.gitignore b/examples/auth/nextjs/.gitignore deleted file mode 100644 index c87c9b392c020..0000000000000 --- a/examples/auth/nextjs/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/examples/auth/nextjs/README.md b/examples/auth/nextjs/README.md deleted file mode 100644 index cfecec8c159f7..0000000000000 --- a/examples/auth/nextjs/README.md +++ /dev/null @@ -1,38 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `app/api/hello.ts`. - -The `app/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/examples/auth/nextjs/app/[id]/page.tsx b/examples/auth/nextjs/app/[id]/page.tsx deleted file mode 100644 index e06effa3feda8..0000000000000 --- a/examples/auth/nextjs/app/[id]/page.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' -import { notFound, redirect } from 'next/navigation' -import RealtimePost from './realtime-post' -import { cookies } from 'next/headers' - -import type { Database } from '@/lib/database.types' - -export default async function Post({ params: { id } }: { params: { id: string } }) { - const supabase = createServerComponentClient({ - cookies, - }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) { - // this is a protected route - only users who are signed in can view this route - redirect('/') - } - - const { data: post } = await supabase.from('posts').select().match({ id }).single() - - if (!post) { - notFound() - } - - return -} diff --git a/examples/auth/nextjs/app/[id]/realtime-post.tsx b/examples/auth/nextjs/app/[id]/realtime-post.tsx deleted file mode 100644 index 8591020db4890..0000000000000 --- a/examples/auth/nextjs/app/[id]/realtime-post.tsx +++ /dev/null @@ -1,41 +0,0 @@ -'use client' - -import { useEffect, useState } from 'react' -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' - -import type { Database } from '@/lib/database.types' - -type Post = Database['public']['Tables']['posts']['Row'] - -export default function RealtimePost({ serverPost }: { serverPost: Post }) { - const supabase = createClientComponentClient() - const [post, setPost] = useState(serverPost) - - useEffect(() => { - setPost(serverPost) - }, [serverPost]) - - useEffect(() => { - const channel = supabase - .channel('realtime post') - .on( - 'postgres_changes', - { - event: 'UPDATE', - schema: 'public', - table: 'posts', - filter: `id=eq.${post.id}`, - }, - (payload) => { - setPost(payload.new as Post) - } - ) - .subscribe() - - return () => { - supabase.removeChannel(channel) - } - }, [supabase, post, setPost]) - - return

    {JSON.stringify(post, null, 2)}
    -} diff --git a/examples/auth/nextjs/app/auth/callback/route.ts b/examples/auth/nextjs/app/auth/callback/route.ts deleted file mode 100644 index 3ce586204acfc..0000000000000 --- a/examples/auth/nextjs/app/auth/callback/route.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { NextResponse } from 'next/server' - -import type { Database } from '@/lib/database.types' - -export async function GET(request: Request) { - const requestUrl = new URL(request.url) - const code = requestUrl.searchParams.get('code') - - if (code) { - const supabase = createRouteHandlerClient({ cookies }) - await supabase.auth.exchangeCodeForSession(code) - } - - // URL to redirect to after sign in process completes - return NextResponse.redirect(requestUrl.origin) -} diff --git a/examples/auth/nextjs/app/favicon.ico b/examples/auth/nextjs/app/favicon.ico deleted file mode 100644 index 718d6fea4835e..0000000000000 Binary files a/examples/auth/nextjs/app/favicon.ico and /dev/null differ diff --git a/examples/auth/nextjs/app/globals.css b/examples/auth/nextjs/app/globals.css deleted file mode 100644 index d4f491e152dd0..0000000000000 --- a/examples/auth/nextjs/app/globals.css +++ /dev/null @@ -1,107 +0,0 @@ -:root { - --max-width: 1100px; - --border-radius: 12px; - --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', - 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', - 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; - - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; - - --primary-glow: conic-gradient( - from 180deg at 50% 50%, - #16abff33 0deg, - #0885ff33 55deg, - #54d6ff33 120deg, - #0071ff33 160deg, - transparent 360deg - ); - --secondary-glow: radial-gradient( - rgba(255, 255, 255, 1), - rgba(255, 255, 255, 0) - ); - - --tile-start-rgb: 239, 245, 249; - --tile-end-rgb: 228, 232, 233; - --tile-border: conic-gradient( - #00000080, - #00000040, - #00000030, - #00000020, - #00000010, - #00000010, - #00000080 - ); - - --callout-rgb: 238, 240, 241; - --callout-border-rgb: 172, 175, 176; - --card-rgb: 180, 185, 188; - --card-border-rgb: 131, 134, 135; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - - --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); - --secondary-glow: linear-gradient( - to bottom right, - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0.3) - ); - - --tile-start-rgb: 2, 13, 46; - --tile-end-rgb: 2, 5, 19; - --tile-border: conic-gradient( - #ffffff80, - #ffffff40, - #ffffff30, - #ffffff20, - #ffffff10, - #ffffff10, - #ffffff80 - ); - - --callout-rgb: 20, 20, 20; - --callout-border-rgb: 108, 108, 108; - --card-rgb: 100, 100, 100; - --card-border-rgb: 200, 200, 200; - } -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); -} - -a { - color: inherit; - text-decoration: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } -} diff --git a/examples/auth/nextjs/app/layout.tsx b/examples/auth/nextjs/app/layout.tsx deleted file mode 100644 index 7604edfa291ee..0000000000000 --- a/examples/auth/nextjs/app/layout.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import './globals.css' -import Login from './login' - -export const metadata = { - title: 'Create Next App', - description: 'Generated by create next app', -} - -export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - - {/* @ts-expect-error next version of TS will fix this */} - - {children} - - - ) -} diff --git a/examples/auth/nextjs/app/login-form.tsx b/examples/auth/nextjs/app/login-form.tsx deleted file mode 100644 index dd5b9db035717..0000000000000 --- a/examples/auth/nextjs/app/login-form.tsx +++ /dev/null @@ -1,56 +0,0 @@ -'use client' - -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' -import { useRouter } from 'next/navigation' -import { useState } from 'react' - -import type { Session } from '@supabase/auth-helpers-nextjs' - -export default function LoginForm({ session }: { session: Session | null }) { - const [email, setEmail] = useState('') - const [password, setPassword] = useState('') - const router = useRouter() - const supabase = createClientComponentClient() - - const handleSignUp = async () => { - await supabase.auth.signUp({ - email, - password, - options: { - emailRedirectTo: `${location.origin}/auth/callback`, - }, - }) - router.refresh() - } - - const handleSignIn = async () => { - await supabase.auth.signInWithPassword({ - email, - password, - }) - router.refresh() - } - - const handleSignOut = async () => { - await supabase.auth.signOut() - router.refresh() - } - - // for the `session` to be available on first SSR render, it must be - // fetched in a Server Component and passed down as a prop - return session ? ( - - ) : ( - <> - setEmail(e.target.value)} value={email} /> - setPassword(e.target.value)} - value={password} - /> - - - - ) -} diff --git a/examples/auth/nextjs/app/login.tsx b/examples/auth/nextjs/app/login.tsx deleted file mode 100644 index 3d7eca847340a..0000000000000 --- a/examples/auth/nextjs/app/login.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import LoginForm from './login-form' - -import type { Database } from '@/lib/database.types' - -export default async function Login() { - const supabase = createServerComponentClient({ cookies }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - return -} diff --git a/examples/auth/nextjs/app/new-post.tsx b/examples/auth/nextjs/app/new-post.tsx deleted file mode 100644 index c28caddbbab37..0000000000000 --- a/examples/auth/nextjs/app/new-post.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { createServerActionClient } from '@supabase/auth-helpers-nextjs' -import { revalidatePath } from 'next/cache' -import { cookies } from 'next/headers' - -import type { Database } from '@/lib/database.types' - -export default function NewPost() { - const addPost = async (formData: FormData) => { - 'use server' - const content = String(formData.get('content')) - const supabase = createServerActionClient({ cookies }) - await supabase.from('posts').insert({ content }).select() - revalidatePath('/') - } - - return ( -
    - -
    - ) -} diff --git a/examples/auth/nextjs/app/page.module.css b/examples/auth/nextjs/app/page.module.css deleted file mode 100644 index 4732b55fdc237..0000000000000 --- a/examples/auth/nextjs/app/page.module.css +++ /dev/null @@ -1,271 +0,0 @@ -.main { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - padding: 6rem; - min-height: 100vh; -} - -.description { - display: inherit; - justify-content: inherit; - align-items: inherit; - font-size: 0.85rem; - max-width: var(--max-width); - width: 100%; - z-index: 2; - font-family: var(--font-mono); -} - -.description a { - display: flex; - align-items: center; - justify-content: center; - gap: 0.5rem; -} - -.description p { - position: relative; - margin: 0; - padding: 1rem; - background-color: rgba(var(--callout-rgb), 0.5); - border: 1px solid rgba(var(--callout-border-rgb), 0.3); - border-radius: var(--border-radius); -} - -.code { - font-weight: 700; - font-family: var(--font-mono); -} - -.grid { - display: grid; - grid-template-columns: repeat(3, minmax(33%, auto)); - width: var(--max-width); - max-width: 100%; -} - -.card { - padding: 1rem 1.2rem; - border-radius: var(--border-radius); - background: rgba(var(--card-rgb), 0); - border: 1px solid rgba(var(--card-border-rgb), 0); - transition: background 200ms, border 200ms; -} - -.card span { - display: inline-block; - transition: transform 200ms; -} - -.card h2 { - font-weight: 600; - margin-bottom: 0.7rem; -} - -.card p { - margin: 0; - opacity: 0.6; - font-size: 0.9rem; - line-height: 1.5; - max-width: 34ch; -} - -.center { - display: flex; - justify-content: center; - align-items: center; - position: relative; - padding: 4rem 0; -} - -.center::before { - background: var(--secondary-glow); - border-radius: 50%; - width: 480px; - height: 360px; - margin-left: -400px; -} - -.center::after { - background: var(--primary-glow); - width: 240px; - height: 180px; - z-index: -1; -} - -.center::before, -.center::after { - content: ''; - left: 50%; - position: absolute; - filter: blur(45px); - transform: translateZ(0); -} - -.logo, -.thirteen { - position: relative; -} - -.thirteen { - display: flex; - justify-content: center; - align-items: center; - width: 75px; - height: 75px; - padding: 25px 10px; - margin-left: 16px; - transform: translateZ(0); - border-radius: var(--border-radius); - overflow: hidden; - box-shadow: 0px 2px 8px -1px #0000001a; -} - -.thirteen::before, -.thirteen::after { - content: ''; - position: absolute; - z-index: -1; -} - -/* Conic Gradient Animation */ -.thirteen::before { - animation: 6s rotate linear infinite; - width: 200%; - height: 200%; - background: var(--tile-border); -} - -/* Inner Square */ -.thirteen::after { - inset: 0; - padding: 1px; - border-radius: var(--border-radius); - background: linear-gradient( - to bottom right, - rgba(var(--tile-start-rgb), 1), - rgba(var(--tile-end-rgb), 1) - ); - background-clip: content-box; -} - -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - .card:hover { - background: rgba(var(--card-rgb), 0.1); - border: 1px solid rgba(var(--card-border-rgb), 0.15); - } - - .card:hover span { - transform: translateX(4px); - } -} - -@media (prefers-reduced-motion) { - .thirteen::before { - animation: none; - } - - .card:hover span { - transform: none; - } -} - -/* Mobile and Tablet */ -@media (max-width: 1023px) { - .content { - padding: 4rem; - } - - .grid { - grid-template-columns: 1fr; - margin-bottom: 120px; - max-width: 320px; - text-align: center; - } - - .card { - padding: 1rem 2.5rem; - } - - .card h2 { - margin-bottom: 0.5rem; - } - - .center { - padding: 8rem 0 6rem; - } - - .center::before { - transform: none; - height: 300px; - } - - .description { - font-size: 0.8rem; - } - - .description a { - padding: 1rem; - } - - .description p, - .description div { - display: flex; - justify-content: center; - position: fixed; - width: 100%; - } - - .description p { - align-items: center; - inset: 0 0 auto; - padding: 2rem 1rem 1.4rem; - border-radius: 0; - border: none; - border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); - background: linear-gradient( - to bottom, - rgba(var(--background-start-rgb), 1), - rgba(var(--callout-rgb), 0.5) - ); - background-clip: padding-box; - backdrop-filter: blur(24px); - } - - .description div { - align-items: flex-end; - pointer-events: none; - inset: auto 0 0; - padding: 2rem; - height: 200px; - background: linear-gradient( - to bottom, - transparent 0%, - rgb(var(--background-end-rgb)) 40% - ); - z-index: 1; - } -} - -@media (prefers-color-scheme: dark) { - .vercelLogo { - filter: invert(1); - } - - .logo, - .thirteen img { - filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); - } -} - -@keyframes rotate { - from { - transform: rotate(360deg); - } - to { - transform: rotate(0deg); - } -} diff --git a/examples/auth/nextjs/app/page.tsx b/examples/auth/nextjs/app/page.tsx deleted file mode 100644 index 1efe4e8e4c75d..0000000000000 --- a/examples/auth/nextjs/app/page.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import RealtimePosts from './realtime-posts' -import NewPost from './new-post' - -import type { Database } from '@/lib/database.types' - -export default async function ServerComponent() { - const supabase = createServerComponentClient({ - cookies, - }) - const { data } = await supabase.from('posts').select('*') - - return ( - <> - - - - ) -} diff --git a/examples/auth/nextjs/app/realtime-posts.tsx b/examples/auth/nextjs/app/realtime-posts.tsx deleted file mode 100644 index 4755da7fefc17..0000000000000 --- a/examples/auth/nextjs/app/realtime-posts.tsx +++ /dev/null @@ -1,40 +0,0 @@ -'use client' - -import { useEffect, useState } from 'react' -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' - -import type { Database } from '@/lib/database.types' -import Link from 'next/link' -type Post = Database['public']['Tables']['posts']['Row'] - -export default function RealtimePosts({ serverPosts }: { serverPosts: Post[] }) { - const [posts, setPosts] = useState(serverPosts) - const supabase = createClientComponentClient() - - useEffect(() => { - setPosts(serverPosts) - }, [serverPosts]) - - useEffect(() => { - const channel = supabase - .channel('*') - .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'posts' }, (payload) => - setPosts((posts) => [...posts, payload.new as Post]) - ) - .subscribe() - - return () => { - supabase.removeChannel(channel) - } - }, [supabase, setPosts, posts]) - - return ( - <> - {posts.map((post) => ( -
    - {post.content} -
    - ))} - - ) -} diff --git a/examples/auth/nextjs/app/sitemap.ts b/examples/auth/nextjs/app/sitemap.ts deleted file mode 100644 index d1c0e8a40c6cc..0000000000000 --- a/examples/auth/nextjs/app/sitemap.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' - -export default async function sitemap() { - const supabase = createServerComponentClient({ cookies }) - const { data: posts } = await supabase.from('posts').select() - - return ( - posts?.map(({ id }) => ({ - url: `https://example.com/${id}`, - lastModified: new Date(), - })) ?? [] - ) -} diff --git a/examples/auth/nextjs/lib/database.types.ts b/examples/auth/nextjs/lib/database.types.ts deleted file mode 100644 index 0f174b0913ec0..0000000000000 --- a/examples/auth/nextjs/lib/database.types.ts +++ /dev/null @@ -1,46 +0,0 @@ -export type Json = - | string - | number - | boolean - | null - | { [key: string]: Json } - | Json[]; - -export interface Database { - public: { - Tables: { - posts: { - Row: { - content: string; - created_at: string; - id: number; - user_id: string | null; - }; - Insert: { - content: string; - created_at?: string; - id?: number; - user_id?: string | null; - }; - Update: { - content?: string; - created_at?: string; - id?: number; - user_id?: string | null; - }; - }; - }; - Views: { - [_ in never]: never; - }; - Functions: { - [_ in never]: never; - }; - Enums: { - [_ in never]: never; - }; - CompositeTypes: { - [_ in never]: never; - }; - }; -} diff --git a/examples/auth/nextjs/middleware.ts b/examples/auth/nextjs/middleware.ts deleted file mode 100644 index 71bd069a4844e..0000000000000 --- a/examples/auth/nextjs/middleware.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createMiddlewareClient } from '@supabase/auth-helpers-nextjs' -import { NextResponse } from 'next/server' - -import type { NextRequest } from 'next/server' -import type { Database } from '@/lib/database.types' - -export async function middleware(req: NextRequest) { - const res = NextResponse.next() - const supabase = createMiddlewareClient({ req, res }) - await supabase.auth.getSession() - return res -} diff --git a/examples/auth/nextjs/next.config.js b/examples/auth/nextjs/next.config.js deleted file mode 100644 index 950e2f42ec32e..0000000000000 --- a/examples/auth/nextjs/next.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - experimental: { - serverActions: true, - }, -} - -module.exports = nextConfig diff --git a/examples/auth/nextjs/package-lock.json b/examples/auth/nextjs/package-lock.json deleted file mode 100644 index a50bed53741bb..0000000000000 --- a/examples/auth/nextjs/package-lock.json +++ /dev/null @@ -1,6409 +0,0 @@ -{ - "name": "full-nextjs-auth-helpers", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "full-nextjs-auth-helpers", - "version": "0.1.0", - "dependencies": { - "@supabase/auth-helpers-nextjs": "^0.7.1", - "@supabase/supabase-js": "^2.26.0", - "@types/node": "^20.2.3", - "@types/react": "^18.2.6", - "@types/react-dom": "^18.2.4", - "eslint": "^8.41.0", - "next": "^13.4.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "typescript": "^5.0.4" - }, - "devDependencies": { - "eslint-config-next": "^13.4.3" - } - }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", - "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", - "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", - "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "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==", - "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", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "node_modules/@next/env": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.3.tgz", - "integrity": "sha512-pa1ErjyFensznttAk3EIv77vFbfSYT6cLzVRK5jx4uiRuCQo+m2wCFAREaHKIy63dlgvOyMlzh6R8Inu8H3KrQ==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.3.tgz", - "integrity": "sha512-5B0uOnh7wyUY9vNNdIA6NUvWozhrZaTMZOzdirYAefqD0ZBK5C/h3+KMYdCKrR7JrXGvVpWnHtv54b3dCzwICA==", - "dev": true, - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.3.tgz", - "integrity": "sha512-yx18udH/ZmR4Bw4M6lIIPE3JxsAZwo04iaucEfA2GMt1unXr2iodHUX/LAKNyi6xoLP2ghi0E+Xi1f4Qb8f1LQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.3.tgz", - "integrity": "sha512-Mi8xJWh2IOjryAM1mx18vwmal9eokJ2njY4nDh04scy37F0LEGJ/diL6JL6kTXi0UfUCGbMsOItf7vpReNiD2A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.3.tgz", - "integrity": "sha512-aBvtry4bxJ1xwKZ/LVPeBGBwWVwxa4bTnNkRRw6YffJnn/f4Tv4EGDPaVeYHZGQVA56wsGbtA6nZMuWs/EIk4Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.3.tgz", - "integrity": "sha512-krT+2G3kEsEUvZoYte3/2IscscDraYPc2B+fDJFipPktJmrv088Pei/RjrhWm5TMIy5URYjZUoDZdh5k940Dyw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.3.tgz", - "integrity": "sha512-AMdFX6EKJjC0G/CM6hJvkY8wUjCcbdj3Qg7uAQJ7PVejRWaVt0sDTMavbRfgMchx8h8KsAudUCtdFkG9hlEClw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.3.tgz", - "integrity": "sha512-jySgSXE48shaLtcQbiFO9ajE9mqz7pcAVLnVLvRIlUHyQYR/WyZdK8ehLs65Mz6j9cLrJM+YdmdJPyV4WDaz2g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.3.tgz", - "integrity": "sha512-5DxHo8uYcaADiE9pHrg8o28VMt/1kR8voDehmfs9AqS0qSClxAAl+CchjdboUvbCjdNWL1MISCvEfKY2InJ3JA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.3.tgz", - "integrity": "sha512-LaqkF3d+GXRA5X6zrUjQUrXm2MN/3E2arXBtn5C7avBCNYfm9G3Xc646AmmmpN3DJZVaMYliMyCIQCMDEzk80w==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.3.tgz", - "integrity": "sha512-jglUk/x7ZWeOJWlVoKyIAkHLTI+qEkOriOOV+3hr1GyiywzcqfI7TpFSiwC7kk1scOiH7NTFKp8mA3XPNO9bDw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "node_modules/@supabase/auth-helpers-nextjs": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-nextjs/-/auth-helpers-nextjs-0.7.2.tgz", - "integrity": "sha512-n5IyGBYJV/WiR5Rgw4CUaiJYiOv9yW2of4ZP4EyzKt2O6/6rztt7PcGE4AoK2vERw+fb5F2QtJBdt6J5eOYCCw==", - "dependencies": { - "@supabase/auth-helpers-shared": "0.4.1", - "set-cookie-parser": "^2.6.0" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.19.0" - } - }, - "node_modules/@supabase/auth-helpers-shared": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-shared/-/auth-helpers-shared-0.4.1.tgz", - "integrity": "sha512-IEDX9JzWkIjQiLUaP4Qy5YDiG0jFQatWfS+jw8cCQs6QfbNdEPd2Y3qonwGHnM90CZom9SvjuylBv2pFVAL7Lw==", - "dependencies": { - "jose": "^4.14.3" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.19.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.2.tgz", - "integrity": "sha512-QCR6pwJs9exCl37bmpMisUd6mf+0SUBJ6mUpiAjEkSJ/+xW8TCuO14bvkWHADd5hElJK9MxNlMQXxSA4DRz9nQ==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.31.0.tgz", - "integrity": "sha512-YcwlbbNfedlue/HVIXtYBb4fuOrs29gNOTl6AmyxPp4zryRxzFvslVN9kmLDBRUAVU9fnPJh2bgOR3chRjJX5w==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.7.1.tgz", - "integrity": "sha512-xPRYLaZrkLbXNlzmHW6Wtf9hmcBLjjI5xUz2zj8oE2hgXGaYoZBBkpN9bmW9i17Z1f6Ujxa942AqK439XOA36A==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.3.tgz", - "integrity": "sha512-c7TzL81sx2kqyxsxcDduJcHL9KJdCOoKimGP6lQSqiZKX42ATlBZpWbyy9KFGFBjAP4nyopMf5JhPi2ZH9jyNw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "@types/websocket": "^1.0.3", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.1.tgz", - "integrity": "sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.26.0.tgz", - "integrity": "sha512-RXmTPTobaYAwkSobadHZmEVLmzX3SGrtRZIGfLWnLv92VzBRrjuXn0a+bJqKl50GUzsyqPA+j5pod7EwMkcH5A==", - "dependencies": { - "@supabase/functions-js": "^2.1.0", - "@supabase/gotrue-js": "^2.31.0", - "@supabase/postgrest-js": "^1.7.0", - "@supabase/realtime-js": "^2.7.3", - "@supabase/storage-js": "^2.5.1", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.2.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", - "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==" - }, - "node_modules/@types/phoenix": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.0.tgz", - "integrity": "sha512-qwfpsHmFuhAS/dVd4uBIraMxRd56vwBUYQGZ6GpXnFuM2XMRFJbIyruFKKlW2daQliuYZwe0qfn/UjFCDKic5g==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", - "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", - "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/websocket": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", - "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.55.0.tgz", - "integrity": "sha512-ppvmeF7hvdhUUZWSd2EEWfzcFkjJzgNQzVST22nzg958CR+sphy8A6K7LXQZd6V75m1VKjp+J4g/PCEfSCmzhw==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.55.0", - "@typescript-eslint/types": "5.55.0", - "@typescript-eslint/typescript-estree": "5.55.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.55.0.tgz", - "integrity": "sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.55.0", - "@typescript-eslint/visitor-keys": "5.55.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.55.0.tgz", - "integrity": "sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz", - "integrity": "sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.55.0", - "@typescript-eslint/visitor-keys": "5.55.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz", - "integrity": "sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.55.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", - "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001466", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz", - "integrity": "sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", - "dependencies": { - "node-fetch": "^2.6.11" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", - "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.3.tgz", - "integrity": "sha512-1lXwdFi29fKxzeugof/TUE7lpHyJQt5+U4LaUHyvQfHjvsWO77vFNicJv5sX6k0VDVSbnfz0lw+avxI+CinbMg==", - "dev": true, - "dependencies": { - "@next/eslint-plugin-next": "13.4.3", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", - "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.10.0", - "get-tsconfig": "^4.2.0", - "globby": "^13.1.2", - "is-core-module": "^2.10.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.4" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", - "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/next": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.3.tgz", - "integrity": "sha512-FV3pBrAAnAIfOclTvncw9dDohyeuEEXPe5KNcva91anT/rdycWbgtu3IjUj4n5yHnWK8YEPo0vrUecHmnmUNbA==", - "dependencies": { - "@next/env": "13.4.3", - "@swc/helpers": "0.5.1", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.1", - "zod": "3.21.4" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=16.8.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "13.4.3", - "@next/swc-darwin-x64": "13.4.3", - "@next/swc-linux-arm64-gnu": "13.4.3", - "@next/swc-linux-arm64-musl": "13.4.3", - "@next/swc-linux-x64-gnu": "13.4.3", - "@next/swc-linux-x64-musl": "13.4.3", - "@next/swc-win32-arm64-msvc": "13.4.3", - "@next/swc-win32-ia32-msvc": "13.4.3", - "@next/swc-win32-x64-msvc": "13.4.3" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "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==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "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" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dependencies": { - "client-only": "0.0.1" - }, - "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 - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dev": true, - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - }, - "dependencies": { - "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@eslint-community/eslint-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", - "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", - "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==" - }, - "@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@eslint/js": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", - "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==" - }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "@next/env": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.3.tgz", - "integrity": "sha512-pa1ErjyFensznttAk3EIv77vFbfSYT6cLzVRK5jx4uiRuCQo+m2wCFAREaHKIy63dlgvOyMlzh6R8Inu8H3KrQ==" - }, - "@next/eslint-plugin-next": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.3.tgz", - "integrity": "sha512-5B0uOnh7wyUY9vNNdIA6NUvWozhrZaTMZOzdirYAefqD0ZBK5C/h3+KMYdCKrR7JrXGvVpWnHtv54b3dCzwICA==", - "dev": true, - "requires": { - "glob": "7.1.7" - } - }, - "@next/swc-darwin-arm64": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.3.tgz", - "integrity": "sha512-yx18udH/ZmR4Bw4M6lIIPE3JxsAZwo04iaucEfA2GMt1unXr2iodHUX/LAKNyi6xoLP2ghi0E+Xi1f4Qb8f1LQ==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.3.tgz", - "integrity": "sha512-Mi8xJWh2IOjryAM1mx18vwmal9eokJ2njY4nDh04scy37F0LEGJ/diL6JL6kTXi0UfUCGbMsOItf7vpReNiD2A==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.3.tgz", - "integrity": "sha512-aBvtry4bxJ1xwKZ/LVPeBGBwWVwxa4bTnNkRRw6YffJnn/f4Tv4EGDPaVeYHZGQVA56wsGbtA6nZMuWs/EIk4Q==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.3.tgz", - "integrity": "sha512-krT+2G3kEsEUvZoYte3/2IscscDraYPc2B+fDJFipPktJmrv088Pei/RjrhWm5TMIy5URYjZUoDZdh5k940Dyw==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.3.tgz", - "integrity": "sha512-AMdFX6EKJjC0G/CM6hJvkY8wUjCcbdj3Qg7uAQJ7PVejRWaVt0sDTMavbRfgMchx8h8KsAudUCtdFkG9hlEClw==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.3.tgz", - "integrity": "sha512-jySgSXE48shaLtcQbiFO9ajE9mqz7pcAVLnVLvRIlUHyQYR/WyZdK8ehLs65Mz6j9cLrJM+YdmdJPyV4WDaz2g==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.3.tgz", - "integrity": "sha512-5DxHo8uYcaADiE9pHrg8o28VMt/1kR8voDehmfs9AqS0qSClxAAl+CchjdboUvbCjdNWL1MISCvEfKY2InJ3JA==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.3.tgz", - "integrity": "sha512-LaqkF3d+GXRA5X6zrUjQUrXm2MN/3E2arXBtn5C7avBCNYfm9G3Xc646AmmmpN3DJZVaMYliMyCIQCMDEzk80w==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.3.tgz", - "integrity": "sha512-jglUk/x7ZWeOJWlVoKyIAkHLTI+qEkOriOOV+3hr1GyiywzcqfI7TpFSiwC7kk1scOiH7NTFKp8mA3XPNO9bDw==", - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" - } - }, - "@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "@supabase/auth-helpers-nextjs": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-nextjs/-/auth-helpers-nextjs-0.7.2.tgz", - "integrity": "sha512-n5IyGBYJV/WiR5Rgw4CUaiJYiOv9yW2of4ZP4EyzKt2O6/6rztt7PcGE4AoK2vERw+fb5F2QtJBdt6J5eOYCCw==", - "requires": { - "@supabase/auth-helpers-shared": "0.4.1", - "set-cookie-parser": "^2.6.0" - } - }, - "@supabase/auth-helpers-shared": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-shared/-/auth-helpers-shared-0.4.1.tgz", - "integrity": "sha512-IEDX9JzWkIjQiLUaP4Qy5YDiG0jFQatWfS+jw8cCQs6QfbNdEPd2Y3qonwGHnM90CZom9SvjuylBv2pFVAL7Lw==", - "requires": { - "jose": "^4.14.3" - } - }, - "@supabase/functions-js": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.2.tgz", - "integrity": "sha512-QCR6pwJs9exCl37bmpMisUd6mf+0SUBJ6mUpiAjEkSJ/+xW8TCuO14bvkWHADd5hElJK9MxNlMQXxSA4DRz9nQ==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.31.0.tgz", - "integrity": "sha512-YcwlbbNfedlue/HVIXtYBb4fuOrs29gNOTl6AmyxPp4zryRxzFvslVN9kmLDBRUAVU9fnPJh2bgOR3chRjJX5w==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.7.1.tgz", - "integrity": "sha512-xPRYLaZrkLbXNlzmHW6Wtf9hmcBLjjI5xUz2zj8oE2hgXGaYoZBBkpN9bmW9i17Z1f6Ujxa942AqK439XOA36A==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.3.tgz", - "integrity": "sha512-c7TzL81sx2kqyxsxcDduJcHL9KJdCOoKimGP6lQSqiZKX42ATlBZpWbyy9KFGFBjAP4nyopMf5JhPi2ZH9jyNw==", - "requires": { - "@types/phoenix": "^1.5.4", - "@types/websocket": "^1.0.3", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.1.tgz", - "integrity": "sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.26.0.tgz", - "integrity": "sha512-RXmTPTobaYAwkSobadHZmEVLmzX3SGrtRZIGfLWnLv92VzBRrjuXn0a+bJqKl50GUzsyqPA+j5pod7EwMkcH5A==", - "requires": { - "@supabase/functions-js": "^2.1.0", - "@supabase/gotrue-js": "^2.31.0", - "@supabase/postgrest-js": "^1.7.0", - "@supabase/realtime-js": "^2.7.3", - "@supabase/storage-js": "^2.5.1", - "cross-fetch": "^3.1.5" - } - }, - "@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/node": { - "version": "20.2.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", - "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==" - }, - "@types/phoenix": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.0.tgz", - "integrity": "sha512-qwfpsHmFuhAS/dVd4uBIraMxRd56vwBUYQGZ6GpXnFuM2XMRFJbIyruFKKlW2daQliuYZwe0qfn/UjFCDKic5g==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/react": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", - "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", - "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/websocket": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", - "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/parser": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.55.0.tgz", - "integrity": "sha512-ppvmeF7hvdhUUZWSd2EEWfzcFkjJzgNQzVST22nzg958CR+sphy8A6K7LXQZd6V75m1VKjp+J4g/PCEfSCmzhw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.55.0", - "@typescript-eslint/types": "5.55.0", - "@typescript-eslint/typescript-estree": "5.55.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.55.0.tgz", - "integrity": "sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.55.0", - "@typescript-eslint/visitor-keys": "5.55.0" - } - }, - "@typescript-eslint/types": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.55.0.tgz", - "integrity": "sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz", - "integrity": "sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.55.0", - "@typescript-eslint/visitor-keys": "5.55.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz", - "integrity": "sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.55.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axe-core": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", - "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", - "dev": true - }, - "axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "requires": { - "streamsearch": "^1.1.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "caniuse-lite": { - "version": "1.0.30001466", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz", - "integrity": "sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", - "requires": { - "node-fetch": "^2.6.11" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - } - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", - "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - } - }, - "eslint-config-next": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.3.tgz", - "integrity": "sha512-1lXwdFi29fKxzeugof/TUE7lpHyJQt5+U4LaUHyvQfHjvsWO77vFNicJv5sX6k0VDVSbnfz0lw+avxI+CinbMg==", - "dev": true, - "requires": { - "@next/eslint-plugin-next": "13.4.3", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", - "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.10.0", - "get-tsconfig": "^4.2.0", - "globby": "^13.1.2", - "is-core-module": "^2.10.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.4" - }, - "dependencies": { - "globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "dev": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "dev": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==" - }, - "espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-tsconfig": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", - "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "next": { - "version": "13.4.3", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.3.tgz", - "integrity": "sha512-FV3pBrAAnAIfOclTvncw9dDohyeuEEXPe5KNcva91anT/rdycWbgtu3IjUj4n5yHnWK8YEPo0vrUecHmnmUNbA==", - "requires": { - "@next/env": "13.4.3", - "@next/swc-darwin-arm64": "13.4.3", - "@next/swc-darwin-x64": "13.4.3", - "@next/swc-linux-arm64-gnu": "13.4.3", - "@next/swc-linux-arm64-musl": "13.4.3", - "@next/swc-linux-x64-gnu": "13.4.3", - "@next/swc-linux-x64-musl": "13.4.3", - "@next/swc-win32-arm64-msvc": "13.4.3", - "@next/swc-win32-ia32-msvc": "13.4.3", - "@next/swc-win32-x64-msvc": "13.4.3", - "@swc/helpers": "0.5.1", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.1", - "zod": "3.21.4" - } - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "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==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "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==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "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" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "requires": { - "internal-slot": "^1.0.4" - } - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "requires": { - "client-only": "0.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dev": true, - "requires": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "requires": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==" - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "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==" - }, - "zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==" - } - } -} diff --git a/examples/auth/nextjs/package.json b/examples/auth/nextjs/package.json deleted file mode 100644 index 1e70631c6a7e1..0000000000000 --- a/examples/auth/nextjs/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "full-nextjs-auth-helpers", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "@supabase/auth-helpers-nextjs": "^0.7.1", - "@supabase/supabase-js": "^2.26.0", - "@types/node": "^20.2.3", - "@types/react": "^18.2.6", - "@types/react-dom": "^18.2.4", - "eslint": "^8.41.0", - "next": "^13.4.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "typescript": "^5.0.4" - }, - "devDependencies": { - "eslint-config-next": "^13.4.3" - } -} diff --git a/examples/auth/nextjs/public/next.svg b/examples/auth/nextjs/public/next.svg deleted file mode 100644 index 5174b28c565c2..0000000000000 --- a/examples/auth/nextjs/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/auth/nextjs/public/thirteen.svg b/examples/auth/nextjs/public/thirteen.svg deleted file mode 100644 index 8977c1bd123cb..0000000000000 --- a/examples/auth/nextjs/public/thirteen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/auth/nextjs/public/vercel.svg b/examples/auth/nextjs/public/vercel.svg deleted file mode 100644 index d2f84222734f2..0000000000000 --- a/examples/auth/nextjs/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/auth/nextjs/tsconfig.json b/examples/auth/nextjs/tsconfig.json deleted file mode 100644 index e06a4454ab062..0000000000000 --- a/examples/auth/nextjs/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/examples/caching/with-cloudflare-workers-kv/.gitignore b/examples/caching/with-cloudflare-workers-kv/.gitignore deleted file mode 100644 index 42387803be0c4..0000000000000 --- a/examples/caching/with-cloudflare-workers-kv/.gitignore +++ /dev/null @@ -1,171 +0,0 @@ -# Logs - -logs -_.log -npm-debug.log_ -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) - -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# Runtime data - -pids -_.pid -_.seed -\*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover - -lib-cov - -# Coverage directory used by tools like istanbul - -coverage -\*.lcov - -# nyc test coverage - -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) - -.grunt - -# Bower dependency directory (https://bower.io/) - -bower_components - -# node-waf configuration - -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) - -build/Release - -# Dependency directories - -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) - -web_modules/ - -# TypeScript cache - -\*.tsbuildinfo - -# Optional npm cache directory - -.npm - -# Optional eslint cache - -.eslintcache - -# Optional stylelint cache - -.stylelintcache - -# Microbundle cache - -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history - -.node_repl_history - -# Output of 'npm pack' - -\*.tgz - -# Yarn Integrity file - -.yarn-integrity - -# dotenv environment variable files - -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) - -.cache -.parcel-cache - -# Next.js build output - -.next -out - -# Nuxt.js build / generate output - -.nuxt -dist - -# Gatsby files - -.cache/ - -# Comment in the public line in if your project uses Gatsby and not Next.js - -# https://nextjs.org/blog/next-9-1#public-directory-support - -# public - -# vuepress build output - -.vuepress/dist - -# vuepress v2.x temp and cache directory - -.temp -.cache - -# Docusaurus cache and generated files - -.docusaurus - -# Serverless directories - -.serverless/ - -# FuseBox cache - -.fusebox/ - -# DynamoDB Local files - -.dynamodb/ - -# TernJS port file - -.tern-port - -# Stores VSCode versions used for testing VSCode extensions - -.vscode-test - -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.\* - -# wrangler project - -.dev.vars diff --git a/examples/caching/with-cloudflare-workers-kv/README.md b/examples/caching/with-cloudflare-workers-kv/README.md deleted file mode 100644 index 7444515f6aeb4..0000000000000 --- a/examples/caching/with-cloudflare-workers-kv/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# Use waitUntil to perform work after Cloudflare Worker returns response - -**[📹 Video](https://egghead.io/lessons/supabase-use-waituntil-to-perform-work-after-cloudflare-worker-returns-response?af=9qsk0a)** - -The `waitUntil` function allows us to continue performing work in our Cloudflare Worker, after a response has been sent back to the client. - -In this lesson, we modify the `revalidate` route to send a response immediately, and then continue on to fetch new data and refresh our KV store. - -Finally, we use the Thunder Client extension to simulate a POST request to the `revalidate` route, and confirm that this receives a response before the cache is updated. - -## Code Snippets - -**Update Revalidate route to respond immediately** - -```javascript -router.post( - "/revalidate", - withContent, - async (request, { SUPABASE_URL, SUPABASE_ANON_KEY, ARTICLES }, context) => { - const updateCache = async () => { - const { type, record, old_record } = request.content; - const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY); - - if (type === "INSERT" || type === "UPDATE") { - await writeTo(ARTICLES, `/articles/${record.id}`, record); - } - - if (type === "DELETE") { - await ARTICLES.delete(`/articles/${old_record.id}`); - } - - const { data: articles } = await supabase.from("articles").select("*"); - await writeTo(ARTICLES, "/articles", articles); - console.log("updated cache"); - }; - - context.waitUntil(updateCache()); - - console.log("sending response"); - - return json({ received: true }); - } -); -``` - -**Run wrangler development server** - -```bash -npx wrangler dev -``` - -## Resources - -- [Cloudflare waitUntil docs](https://developers.cloudflare.com/workers/runtime-apis/scheduled-event/) -- [Supabase.js docs](https://github.com/supabase/supabase-js) -- [Wrangler CLI docs](https://developers.cloudflare.com/workers/wrangler/commands/) -- [KV Storage docs](https://developers.cloudflare.com/workers/runtime-apis/kv/) -- [Thunder Client VS Code extension](https://marketplace.visualstudio.com/items?itemName=rangav.vscode-thunder-client) - ---- - -Enjoying the course? Follow Jon Meyers on [Twitter](https://twitter.com/jonmeyers_io) and subscribe to the [YouTube channel](https://www.youtube.com/c/jonmeyers). diff --git a/examples/caching/with-cloudflare-workers-kv/package-lock.json b/examples/caching/with-cloudflare-workers-kv/package-lock.json deleted file mode 100644 index fd76f85bd8913..0000000000000 --- a/examples/caching/with-cloudflare-workers-kv/package-lock.json +++ /dev/null @@ -1,2770 +0,0 @@ -{ - "name": "supabase-at-the-edge", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "supabase-at-the-edge", - "version": "0.0.0", - "dependencies": { - "@supabase/supabase-js": "^1.35.4", - "itty-router": "^2.6.1", - "itty-router-extras": "^0.4.2" - }, - "devDependencies": { - "wrangler": "2.0.16" - } - }, - "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", - "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", - "dev": true, - "dependencies": { - "mime": "^3.0.0" - } - }, - "node_modules/@esbuild-plugins/node-globals-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", - "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", - "dev": true, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@esbuild-plugins/node-modules-polyfill": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", - "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" - }, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true - }, - "node_modules/@miniflare/cache": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/cache/-/cache-2.13.0.tgz", - "integrity": "sha512-y3SdN3SVyPECWmLAEGkkrv0RB+LugEPs/FeXn8QtN9aE1vyj69clOAgmsDzoh1DpFfFsLKRiv05aWs4m79P8Xw==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "http-cache-semantics": "^4.1.0", - "undici": "5.20.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/cli-parser": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/cli-parser/-/cli-parser-2.13.0.tgz", - "integrity": "sha512-Nx1PIfuMZ3mK9Dg/JojWZAjHR16h1pcdCFSqYln/ME7y5ifx+P1E5UkShWUQ1cBlibNaltjbJ2n/7stSAsIGPQ==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0", - "kleur": "^4.1.4" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/core": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/core/-/core-2.13.0.tgz", - "integrity": "sha512-YJ/C0J3k+7xn4gvlMpvePnM3xC8nOnkweW96cc0IA8kJ1JSmScOO2tZ7rrU1RyDgp6StkAtQBw4yC0wYeFycBw==", - "dev": true, - "dependencies": { - "@iarna/toml": "^2.2.5", - "@miniflare/queues": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/watcher": "2.13.0", - "busboy": "^1.6.0", - "dotenv": "^10.0.0", - "kleur": "^4.1.4", - "set-cookie-parser": "^2.4.8", - "undici": "5.20.0", - "urlpattern-polyfill": "^4.0.3" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/d1": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/d1/-/d1-2.13.0.tgz", - "integrity": "sha512-OslqjO8iTcvzyrC0spByftMboRmHJEyHyTHnlKkjWDGdQQztEOjso2Xj+3I4SZIeUYvbzDRhKLS2QXI9a8LS5A==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.7" - } - }, - "node_modules/@miniflare/durable-objects": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/durable-objects/-/durable-objects-2.13.0.tgz", - "integrity": "sha512-CRGVBPO9vY4Fc3aV+pdPRVVeYIt64vQqvw+BJbyW+TQtqVP2CGQeziJGnCfcONNNKyooZxGyUkHewUypyH+Qhg==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/storage-memory": "2.13.0", - "undici": "5.20.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/html-rewriter": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/html-rewriter/-/html-rewriter-2.13.0.tgz", - "integrity": "sha512-XhN7Icyzvtvu+o/A0hrnSiSmla78seCaNwQ9M1TDHxt352I/ahPX4wtPXs6GbKqY0/i+V6yoG2KGFRQ/j59cQQ==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "html-rewriter-wasm": "^0.4.1", - "undici": "5.20.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/http-server": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/http-server/-/http-server-2.13.0.tgz", - "integrity": "sha512-aMS/nUMTKP15hKnyZboeuWCiqmNrrCu+XRBY/TxDDl07iXcLpiHGf3oVv+yXxXkWlJHJVCbK7i/nXSNPllRMSw==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/web-sockets": "2.13.0", - "kleur": "^4.1.4", - "selfsigned": "^2.0.0", - "undici": "5.20.0", - "ws": "^8.2.2", - "youch": "^2.2.2" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/kv": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/kv/-/kv-2.13.0.tgz", - "integrity": "sha512-J0AS5x3g/YVOmHMxMAZs07nRXRvSo9jyuC0eikTBf+4AABvBIyvVYmdTjYNjCmr8O5smcfWBX5S27HelD3aAAQ==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/queues": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/queues/-/queues-2.13.0.tgz", - "integrity": "sha512-Gf/a6M1mJL03iOvNqh3JNahcBfvEMPHnO28n0gkCoyYWGvddIr9lwCdFIa0qwNJsC1fIDRxhPg8PZ5cQLBMwRA==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.7" - } - }, - "node_modules/@miniflare/r2": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/r2/-/r2-2.13.0.tgz", - "integrity": "sha512-/5k6GHOYMNV/oBtilV9HDXBkJUrx8oXVigG5vxbnzEGRXyVRmR+Glzu7mFT8JiE94XiEbXHk9Qvu1S5Dej3wBw==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0", - "undici": "5.20.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/runner-vm": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/runner-vm/-/runner-vm-2.13.0.tgz", - "integrity": "sha512-VmKtF2cA8HmTuLXor1THWY0v+DmaobPct63iLcgWIaUdP3MIvL+9X8HDXFAviCR7bCTe6MKxckHkaOj0IE0aJQ==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/scheduler": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/scheduler/-/scheduler-2.13.0.tgz", - "integrity": "sha512-AOaQanoR4NjVEzVGWHnrL15A7aMx+d9AKLJhSDF7KaP+4NrT2Wo2BQuXCpn5oStx3itOdlQpMfqQ139e/I8WhQ==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "cron-schedule": "^3.0.4" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/shared": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/shared/-/shared-2.13.0.tgz", - "integrity": "sha512-m8YFQzKmbjberrV9hPzNcQjNCXxjTjXUpuNrIGjAJO7g+BDztUHaZbdd26H9maBDlkeiWxA3hf0mDyCT/6MCMA==", - "dev": true, - "dependencies": { - "@types/better-sqlite3": "^7.6.0", - "kleur": "^4.1.4", - "npx-import": "^1.1.4", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/sites": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/sites/-/sites-2.13.0.tgz", - "integrity": "sha512-/tuzIu00o6CF2tkSv01q02MgEShXBSKx85h9jwWvc+6u7prGacAOer0FA1YNRFbE+t9QIfutAkoPGMA9zYf8+Q==", - "dev": true, - "dependencies": { - "@miniflare/kv": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/storage-file": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/storage-file": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/storage-file/-/storage-file-2.13.0.tgz", - "integrity": "sha512-LuAeAAY5046rq5U1eFLVkz+ppiFEWytWacpkQw92DvVKFFquZcXSj6WPxZF4rSs23WDk+rdcwuLekbb52aDR7A==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0", - "@miniflare/storage-memory": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/storage-memory": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/storage-memory/-/storage-memory-2.13.0.tgz", - "integrity": "sha512-FnkYcBNXa/ym1ksNilNZycg9WYYKo6cWKplVBeSthRon3e8QY6t3n7/XRseBUo7O6mhDybVTy4wNCP1R2nBiEw==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/watcher": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/watcher/-/watcher-2.13.0.tgz", - "integrity": "sha512-teAacWcpMStoBLbLae95IUaL5lPzjPlXa9lhK9CbRaio/KRMibTMRGWrYos3IVGQRZvklvLwcms/nTvgcdb6yw==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/web-sockets": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/web-sockets/-/web-sockets-2.13.0.tgz", - "integrity": "sha512-+U2/HCf+BetRIgjAnNQjkuN6UeAjQmXifhQC+7CCaX834XJhrKXoR6z2xr2xkg1qj0qQs4D2jWG0KzrO5OUpug==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "undici": "5.20.0", - "ws": "^8.2.2" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@supabase/functions-js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-1.3.4.tgz", - "integrity": "sha512-yYVgkECjv7IZEBKBI3EB5Q7R1p0FJ10g8Q9N7SWKIHUU6i6DnbEGHIMFLyQRm1hmiNWD8fL7bRVEYacmTRJhHw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "1.22.19", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-1.22.19.tgz", - "integrity": "sha512-IBkbV852iyd8AzeeJa8AgE5rGrOS54MR+N6bagQQWmDC1MdGbpRovK8uuFIkmtoRQpNvbnsl5HRSfskgqmsS+A==", - "dependencies": { - "cross-fetch": "^3.0.6" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "0.37.4", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-0.37.4.tgz", - "integrity": "sha512-x+c2rk1fz9s6f1PrGxCJ0QTUgXPDI0G3ngIqD5sSiXhhCyfl8Q5V92mXl2EYtlDhkiUkjFNrOZFhXVbXOHgvDw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-1.7.3.tgz", - "integrity": "sha512-iNUWhVeYRi5+XUlW2zJ7ccGfhI6caLxcn2t6VuQK3OTJNzXdVXeKb25nffLx1g4F7Ty6VM8Xiue7i0z0cWG3pQ==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-1.7.2.tgz", - "integrity": "sha512-HX4HAfLUJznVgAwiKVgdTe5QD0bpUcqgc0hpk/s5Uy8qoe1tHZAc5qE9kI+tqk7rQKyymFpiA7+bAHlzyZXxxQ==", - "dependencies": { - "cross-fetch": "^3.1.0" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "1.35.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-1.35.4.tgz", - "integrity": "sha512-9krwmuG3hdoS7SfM1UmCIw88aW9V1WW2Zx91tofdnmQraWKfk5e2fIKfp+Wjb9owq7JIkuUIA/qziVs2qX0lLQ==", - "dependencies": { - "@supabase/functions-js": "^1.3.4", - "@supabase/gotrue-js": "^1.22.17", - "@supabase/postgrest-js": "^0.37.4", - "@supabase/realtime-js": "^1.7.2", - "@supabase/storage-js": "^1.7.2" - } - }, - "node_modules/@types/better-sqlite3": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.4.tgz", - "integrity": "sha512-dzrRZCYPXIXfSR1/surNbJ/grU3scTaygS0OMzjlGf71i9sc2fGyHPXXiXmEvNIoE0cGwsanEFMVJxPXmco9Eg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true - }, - "node_modules/@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "node_modules/@types/stack-trace": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/stack-trace/-/stack-trace-0.0.29.tgz", - "integrity": "sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==", - "dev": true - }, - "node_modules/blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cron-schedule": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/cron-schedule/-/cron-schedule-3.0.6.tgz", - "integrity": "sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", - "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-64": "0.14.47", - "esbuild-android-arm64": "0.14.47", - "esbuild-darwin-64": "0.14.47", - "esbuild-darwin-arm64": "0.14.47", - "esbuild-freebsd-64": "0.14.47", - "esbuild-freebsd-arm64": "0.14.47", - "esbuild-linux-32": "0.14.47", - "esbuild-linux-64": "0.14.47", - "esbuild-linux-arm": "0.14.47", - "esbuild-linux-arm64": "0.14.47", - "esbuild-linux-mips64le": "0.14.47", - "esbuild-linux-ppc64le": "0.14.47", - "esbuild-linux-riscv64": "0.14.47", - "esbuild-linux-s390x": "0.14.47", - "esbuild-netbsd-64": "0.14.47", - "esbuild-openbsd-64": "0.14.47", - "esbuild-sunos-64": "0.14.47", - "esbuild-windows-32": "0.14.47", - "esbuild-windows-64": "0.14.47", - "esbuild-windows-arm64": "0.14.47" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", - "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", - "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", - "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", - "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", - "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", - "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", - "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", - "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", - "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", - "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", - "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", - "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", - "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", - "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", - "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", - "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", - "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", - "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", - "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", - "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-rewriter-wasm": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/html-rewriter-wasm/-/html-rewriter-wasm-0.4.1.tgz", - "integrity": "sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/itty-router": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-2.6.1.tgz", - "integrity": "sha512-l9gxWe5TOLUESYnBn85Jxd6tIZLWdRX5YKkHIBfSgbNQ7UFPNUGuWihRV+LlEbfJJIzgLmhwAbaWRi5yWJm8kg==" - }, - "node_modules/itty-router-extras": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/itty-router-extras/-/itty-router-extras-0.4.2.tgz", - "integrity": "sha512-ppHaBzcTXs7idFSDISehG+8kif2/4aqLCfyY/Y/uIZv79sfEfNmTq9G+rDeqblun/VZRBiXZD8ztYmMS8EOsKw==" - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/miniflare": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-2.13.0.tgz", - "integrity": "sha512-ayNhVa4a6bZiOuHtrPmOt4BCYcmW1fBQ/+qGL85smq1m2OBBm3aUs6f4ISf38xH8tk+qewgmAywetyVtn6KHPw==", - "dev": true, - "dependencies": { - "@miniflare/cache": "2.13.0", - "@miniflare/cli-parser": "2.13.0", - "@miniflare/core": "2.13.0", - "@miniflare/d1": "2.13.0", - "@miniflare/durable-objects": "2.13.0", - "@miniflare/html-rewriter": "2.13.0", - "@miniflare/http-server": "2.13.0", - "@miniflare/kv": "2.13.0", - "@miniflare/queues": "2.13.0", - "@miniflare/r2": "2.13.0", - "@miniflare/runner-vm": "2.13.0", - "@miniflare/scheduler": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/sites": "2.13.0", - "@miniflare/storage-file": "2.13.0", - "@miniflare/storage-memory": "2.13.0", - "@miniflare/web-sockets": "2.13.0", - "kleur": "^4.1.4", - "semiver": "^1.1.0", - "source-map-support": "^0.5.20", - "undici": "5.20.0" - }, - "bin": { - "miniflare": "bootstrap.js" - }, - "engines": { - "node": ">=16.13" - }, - "peerDependencies": { - "@miniflare/storage-redis": "2.13.0", - "cron-schedule": "^3.0.4", - "ioredis": "^4.27.9" - }, - "peerDependenciesMeta": { - "@miniflare/storage-redis": { - "optional": true - }, - "cron-schedule": { - "optional": true - }, - "ioredis": { - "optional": true - } - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true, - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npx-import": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/npx-import/-/npx-import-1.1.4.tgz", - "integrity": "sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==", - "dev": true, - "dependencies": { - "execa": "^6.1.0", - "parse-package-name": "^1.0.0", - "semver": "^7.3.7", - "validate-npm-package-name": "^4.0.0" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-package-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-package-name/-/parse-package-name-1.0.0.tgz", - "integrity": "sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==", - "dev": true - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" - } - }, - "node_modules/rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", - "dev": true, - "dependencies": { - "rollup-plugin-inject": "^3.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semiver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", - "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/semver": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", - "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "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/source-map-support": { - "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==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/undici": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", - "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=12.18" - } - }, - "node_modules/urlpattern-polyfill": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-4.0.3.tgz", - "integrity": "sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==", - "dev": true - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrangler": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-2.0.16.tgz", - "integrity": "sha512-Fx3DCbQcYpnmUfRvCt4e7nxT0s6WVtIgjdBljvqOX6M/Cd1nJae8VpDtYG1XHtMjIkakRqmdtLCFds9a5usZGQ==", - "dev": true, - "dependencies": { - "@cloudflare/kv-asset-handler": "^0.2.0", - "@esbuild-plugins/node-globals-polyfill": "^0.1.1", - "@esbuild-plugins/node-modules-polyfill": "^0.1.4", - "blake3-wasm": "^2.1.5", - "esbuild": "0.14.47", - "miniflare": "^2.5.1", - "nanoid": "^3.3.3", - "path-to-regexp": "^6.2.0", - "selfsigned": "^2.0.1", - "semiver": "^1.1.0", - "xxhash-wasm": "^1.0.1" - }, - "bin": { - "wrangler": "bin/wrangler.js", - "wrangler2": "bin/wrangler.js" - }, - "engines": { - "node": ">=16.7.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": 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/xxhash-wasm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.1.tgz", - "integrity": "sha512-Lc9CTvDrH2vRoiaUzz25q7lRaviMhz90pkx6YxR9EPYtF99yOJnv2cB+CQ0hp/TLoqrUsk8z/W2EN31T568Azw==", - "dev": true - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/youch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/youch/-/youch-2.2.2.tgz", - "integrity": "sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ==", - "dev": true, - "dependencies": { - "@types/stack-trace": "0.0.29", - "cookie": "^0.4.1", - "mustache": "^4.2.0", - "stack-trace": "0.0.10" - } - } - }, - "dependencies": { - "@cloudflare/kv-asset-handler": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", - "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", - "dev": true, - "requires": { - "mime": "^3.0.0" - } - }, - "@esbuild-plugins/node-globals-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", - "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", - "dev": true, - "requires": {} - }, - "@esbuild-plugins/node-modules-polyfill": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", - "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", - "dev": true, - "requires": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" - } - }, - "@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true - }, - "@miniflare/cache": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/cache/-/cache-2.13.0.tgz", - "integrity": "sha512-y3SdN3SVyPECWmLAEGkkrv0RB+LugEPs/FeXn8QtN9aE1vyj69clOAgmsDzoh1DpFfFsLKRiv05aWs4m79P8Xw==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "http-cache-semantics": "^4.1.0", - "undici": "5.20.0" - } - }, - "@miniflare/cli-parser": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/cli-parser/-/cli-parser-2.13.0.tgz", - "integrity": "sha512-Nx1PIfuMZ3mK9Dg/JojWZAjHR16h1pcdCFSqYln/ME7y5ifx+P1E5UkShWUQ1cBlibNaltjbJ2n/7stSAsIGPQ==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0", - "kleur": "^4.1.4" - } - }, - "@miniflare/core": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/core/-/core-2.13.0.tgz", - "integrity": "sha512-YJ/C0J3k+7xn4gvlMpvePnM3xC8nOnkweW96cc0IA8kJ1JSmScOO2tZ7rrU1RyDgp6StkAtQBw4yC0wYeFycBw==", - "dev": true, - "requires": { - "@iarna/toml": "^2.2.5", - "@miniflare/queues": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/watcher": "2.13.0", - "busboy": "^1.6.0", - "dotenv": "^10.0.0", - "kleur": "^4.1.4", - "set-cookie-parser": "^2.4.8", - "undici": "5.20.0", - "urlpattern-polyfill": "^4.0.3" - } - }, - "@miniflare/d1": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/d1/-/d1-2.13.0.tgz", - "integrity": "sha512-OslqjO8iTcvzyrC0spByftMboRmHJEyHyTHnlKkjWDGdQQztEOjso2Xj+3I4SZIeUYvbzDRhKLS2QXI9a8LS5A==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/durable-objects": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/durable-objects/-/durable-objects-2.13.0.tgz", - "integrity": "sha512-CRGVBPO9vY4Fc3aV+pdPRVVeYIt64vQqvw+BJbyW+TQtqVP2CGQeziJGnCfcONNNKyooZxGyUkHewUypyH+Qhg==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/storage-memory": "2.13.0", - "undici": "5.20.0" - } - }, - "@miniflare/html-rewriter": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/html-rewriter/-/html-rewriter-2.13.0.tgz", - "integrity": "sha512-XhN7Icyzvtvu+o/A0hrnSiSmla78seCaNwQ9M1TDHxt352I/ahPX4wtPXs6GbKqY0/i+V6yoG2KGFRQ/j59cQQ==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "html-rewriter-wasm": "^0.4.1", - "undici": "5.20.0" - } - }, - "@miniflare/http-server": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/http-server/-/http-server-2.13.0.tgz", - "integrity": "sha512-aMS/nUMTKP15hKnyZboeuWCiqmNrrCu+XRBY/TxDDl07iXcLpiHGf3oVv+yXxXkWlJHJVCbK7i/nXSNPllRMSw==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/web-sockets": "2.13.0", - "kleur": "^4.1.4", - "selfsigned": "^2.0.0", - "undici": "5.20.0", - "ws": "^8.2.2", - "youch": "^2.2.2" - } - }, - "@miniflare/kv": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/kv/-/kv-2.13.0.tgz", - "integrity": "sha512-J0AS5x3g/YVOmHMxMAZs07nRXRvSo9jyuC0eikTBf+4AABvBIyvVYmdTjYNjCmr8O5smcfWBX5S27HelD3aAAQ==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/queues": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/queues/-/queues-2.13.0.tgz", - "integrity": "sha512-Gf/a6M1mJL03iOvNqh3JNahcBfvEMPHnO28n0gkCoyYWGvddIr9lwCdFIa0qwNJsC1fIDRxhPg8PZ5cQLBMwRA==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/r2": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/r2/-/r2-2.13.0.tgz", - "integrity": "sha512-/5k6GHOYMNV/oBtilV9HDXBkJUrx8oXVigG5vxbnzEGRXyVRmR+Glzu7mFT8JiE94XiEbXHk9Qvu1S5Dej3wBw==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0", - "undici": "5.20.0" - } - }, - "@miniflare/runner-vm": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/runner-vm/-/runner-vm-2.13.0.tgz", - "integrity": "sha512-VmKtF2cA8HmTuLXor1THWY0v+DmaobPct63iLcgWIaUdP3MIvL+9X8HDXFAviCR7bCTe6MKxckHkaOj0IE0aJQ==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/scheduler": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/scheduler/-/scheduler-2.13.0.tgz", - "integrity": "sha512-AOaQanoR4NjVEzVGWHnrL15A7aMx+d9AKLJhSDF7KaP+4NrT2Wo2BQuXCpn5oStx3itOdlQpMfqQ139e/I8WhQ==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "cron-schedule": "^3.0.4" - } - }, - "@miniflare/shared": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/shared/-/shared-2.13.0.tgz", - "integrity": "sha512-m8YFQzKmbjberrV9hPzNcQjNCXxjTjXUpuNrIGjAJO7g+BDztUHaZbdd26H9maBDlkeiWxA3hf0mDyCT/6MCMA==", - "dev": true, - "requires": { - "@types/better-sqlite3": "^7.6.0", - "kleur": "^4.1.4", - "npx-import": "^1.1.4", - "picomatch": "^2.3.1" - } - }, - "@miniflare/sites": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/sites/-/sites-2.13.0.tgz", - "integrity": "sha512-/tuzIu00o6CF2tkSv01q02MgEShXBSKx85h9jwWvc+6u7prGacAOer0FA1YNRFbE+t9QIfutAkoPGMA9zYf8+Q==", - "dev": true, - "requires": { - "@miniflare/kv": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/storage-file": "2.13.0" - } - }, - "@miniflare/storage-file": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/storage-file/-/storage-file-2.13.0.tgz", - "integrity": "sha512-LuAeAAY5046rq5U1eFLVkz+ppiFEWytWacpkQw92DvVKFFquZcXSj6WPxZF4rSs23WDk+rdcwuLekbb52aDR7A==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0", - "@miniflare/storage-memory": "2.13.0" - } - }, - "@miniflare/storage-memory": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/storage-memory/-/storage-memory-2.13.0.tgz", - "integrity": "sha512-FnkYcBNXa/ym1ksNilNZycg9WYYKo6cWKplVBeSthRon3e8QY6t3n7/XRseBUo7O6mhDybVTy4wNCP1R2nBiEw==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/watcher": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/watcher/-/watcher-2.13.0.tgz", - "integrity": "sha512-teAacWcpMStoBLbLae95IUaL5lPzjPlXa9lhK9CbRaio/KRMibTMRGWrYos3IVGQRZvklvLwcms/nTvgcdb6yw==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/web-sockets": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/web-sockets/-/web-sockets-2.13.0.tgz", - "integrity": "sha512-+U2/HCf+BetRIgjAnNQjkuN6UeAjQmXifhQC+7CCaX834XJhrKXoR6z2xr2xkg1qj0qQs4D2jWG0KzrO5OUpug==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "undici": "5.20.0", - "ws": "^8.2.2" - } - }, - "@supabase/functions-js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-1.3.4.tgz", - "integrity": "sha512-yYVgkECjv7IZEBKBI3EB5Q7R1p0FJ10g8Q9N7SWKIHUU6i6DnbEGHIMFLyQRm1hmiNWD8fL7bRVEYacmTRJhHw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "1.22.19", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-1.22.19.tgz", - "integrity": "sha512-IBkbV852iyd8AzeeJa8AgE5rGrOS54MR+N6bagQQWmDC1MdGbpRovK8uuFIkmtoRQpNvbnsl5HRSfskgqmsS+A==", - "requires": { - "cross-fetch": "^3.0.6" - } - }, - "@supabase/postgrest-js": { - "version": "0.37.4", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-0.37.4.tgz", - "integrity": "sha512-x+c2rk1fz9s6f1PrGxCJ0QTUgXPDI0G3ngIqD5sSiXhhCyfl8Q5V92mXl2EYtlDhkiUkjFNrOZFhXVbXOHgvDw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-1.7.3.tgz", - "integrity": "sha512-iNUWhVeYRi5+XUlW2zJ7ccGfhI6caLxcn2t6VuQK3OTJNzXdVXeKb25nffLx1g4F7Ty6VM8Xiue7i0z0cWG3pQ==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-1.7.2.tgz", - "integrity": "sha512-HX4HAfLUJznVgAwiKVgdTe5QD0bpUcqgc0hpk/s5Uy8qoe1tHZAc5qE9kI+tqk7rQKyymFpiA7+bAHlzyZXxxQ==", - "requires": { - "cross-fetch": "^3.1.0" - } - }, - "@supabase/supabase-js": { - "version": "1.35.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-1.35.4.tgz", - "integrity": "sha512-9krwmuG3hdoS7SfM1UmCIw88aW9V1WW2Zx91tofdnmQraWKfk5e2fIKfp+Wjb9owq7JIkuUIA/qziVs2qX0lLQ==", - "requires": { - "@supabase/functions-js": "^1.3.4", - "@supabase/gotrue-js": "^1.22.17", - "@supabase/postgrest-js": "^0.37.4", - "@supabase/realtime-js": "^1.7.2", - "@supabase/storage-js": "^1.7.2" - } - }, - "@types/better-sqlite3": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.4.tgz", - "integrity": "sha512-dzrRZCYPXIXfSR1/surNbJ/grU3scTaygS0OMzjlGf71i9sc2fGyHPXXiXmEvNIoE0cGwsanEFMVJxPXmco9Eg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true - }, - "@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "@types/stack-trace": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/stack-trace/-/stack-trace-0.0.29.tgz", - "integrity": "sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==", - "dev": true - }, - "blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cron-schedule": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/cron-schedule/-/cron-schedule-3.0.6.tgz", - "integrity": "sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "esbuild": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", - "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", - "dev": true, - "requires": { - "esbuild-android-64": "0.14.47", - "esbuild-android-arm64": "0.14.47", - "esbuild-darwin-64": "0.14.47", - "esbuild-darwin-arm64": "0.14.47", - "esbuild-freebsd-64": "0.14.47", - "esbuild-freebsd-arm64": "0.14.47", - "esbuild-linux-32": "0.14.47", - "esbuild-linux-64": "0.14.47", - "esbuild-linux-arm": "0.14.47", - "esbuild-linux-arm64": "0.14.47", - "esbuild-linux-mips64le": "0.14.47", - "esbuild-linux-ppc64le": "0.14.47", - "esbuild-linux-riscv64": "0.14.47", - "esbuild-linux-s390x": "0.14.47", - "esbuild-netbsd-64": "0.14.47", - "esbuild-openbsd-64": "0.14.47", - "esbuild-sunos-64": "0.14.47", - "esbuild-windows-32": "0.14.47", - "esbuild-windows-64": "0.14.47", - "esbuild-windows-arm64": "0.14.47" - } - }, - "esbuild-android-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", - "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", - "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", - "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", - "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", - "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", - "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", - "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", - "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", - "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", - "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", - "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", - "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", - "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", - "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", - "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", - "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", - "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", - "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", - "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", - "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", - "dev": true, - "optional": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "html-rewriter-wasm": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/html-rewriter-wasm/-/html-rewriter-wasm-0.4.1.tgz", - "integrity": "sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "itty-router": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-2.6.1.tgz", - "integrity": "sha512-l9gxWe5TOLUESYnBn85Jxd6tIZLWdRX5YKkHIBfSgbNQ7UFPNUGuWihRV+LlEbfJJIzgLmhwAbaWRi5yWJm8kg==" - }, - "itty-router-extras": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/itty-router-extras/-/itty-router-extras-0.4.2.tgz", - "integrity": "sha512-ppHaBzcTXs7idFSDISehG+8kif2/4aqLCfyY/Y/uIZv79sfEfNmTq9G+rDeqblun/VZRBiXZD8ztYmMS8EOsKw==" - }, - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "miniflare": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-2.13.0.tgz", - "integrity": "sha512-ayNhVa4a6bZiOuHtrPmOt4BCYcmW1fBQ/+qGL85smq1m2OBBm3aUs6f4ISf38xH8tk+qewgmAywetyVtn6KHPw==", - "dev": true, - "requires": { - "@miniflare/cache": "2.13.0", - "@miniflare/cli-parser": "2.13.0", - "@miniflare/core": "2.13.0", - "@miniflare/d1": "2.13.0", - "@miniflare/durable-objects": "2.13.0", - "@miniflare/html-rewriter": "2.13.0", - "@miniflare/http-server": "2.13.0", - "@miniflare/kv": "2.13.0", - "@miniflare/queues": "2.13.0", - "@miniflare/r2": "2.13.0", - "@miniflare/runner-vm": "2.13.0", - "@miniflare/scheduler": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/sites": "2.13.0", - "@miniflare/storage-file": "2.13.0", - "@miniflare/storage-memory": "2.13.0", - "@miniflare/web-sockets": "2.13.0", - "kleur": "^4.1.4", - "semiver": "^1.1.0", - "source-map-support": "^0.5.20", - "undici": "5.20.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - } - } - }, - "npx-import": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/npx-import/-/npx-import-1.1.4.tgz", - "integrity": "sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==", - "dev": true, - "requires": { - "execa": "^6.1.0", - "parse-package-name": "^1.0.0", - "semver": "^7.3.7", - "validate-npm-package-name": "^4.0.0" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "parse-package-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-package-name/-/parse-package-name-1.0.0.tgz", - "integrity": "sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" - } - }, - "rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", - "dev": true, - "requires": { - "rollup-plugin-inject": "^3.0.0" - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - } - }, - "selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "semiver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", - "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", - "dev": true - }, - "semver": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", - "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "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 - }, - "source-map-support": { - "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==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "undici": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", - "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", - "dev": true, - "requires": { - "busboy": "^1.6.0" - } - }, - "urlpattern-polyfill": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-4.0.3.tgz", - "integrity": "sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==", - "dev": true - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrangler": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-2.0.16.tgz", - "integrity": "sha512-Fx3DCbQcYpnmUfRvCt4e7nxT0s6WVtIgjdBljvqOX6M/Cd1nJae8VpDtYG1XHtMjIkakRqmdtLCFds9a5usZGQ==", - "dev": true, - "requires": { - "@cloudflare/kv-asset-handler": "^0.2.0", - "@esbuild-plugins/node-globals-polyfill": "^0.1.1", - "@esbuild-plugins/node-modules-polyfill": "^0.1.4", - "blake3-wasm": "^2.1.5", - "esbuild": "0.14.47", - "fsevents": "~2.3.2", - "miniflare": "^2.5.1", - "nanoid": "^3.3.3", - "path-to-regexp": "^6.2.0", - "selfsigned": "^2.0.1", - "semiver": "^1.1.0", - "xxhash-wasm": "^1.0.1" - } - }, - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "requires": {} - }, - "xxhash-wasm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.1.tgz", - "integrity": "sha512-Lc9CTvDrH2vRoiaUzz25q7lRaviMhz90pkx6YxR9EPYtF99yOJnv2cB+CQ0hp/TLoqrUsk8z/W2EN31T568Azw==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "youch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/youch/-/youch-2.2.2.tgz", - "integrity": "sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ==", - "dev": true, - "requires": { - "@types/stack-trace": "0.0.29", - "cookie": "^0.4.1", - "mustache": "^4.2.0", - "stack-trace": "0.0.10" - } - } - } -} diff --git a/examples/caching/with-cloudflare-workers-kv/package.json b/examples/caching/with-cloudflare-workers-kv/package.json deleted file mode 100644 index 5b4c5c2178a31..0000000000000 --- a/examples/caching/with-cloudflare-workers-kv/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "supabase-at-the-edge", - "version": "0.0.0", - "devDependencies": { - "wrangler": "2.0.16" - }, - "private": true, - "scripts": { - "start": "wrangler dev", - "deploy": "wrangler publish" - }, - "dependencies": { - "@supabase/supabase-js": "^1.35.4", - "itty-router": "^2.6.1", - "itty-router-extras": "^0.4.2" - } -} diff --git a/examples/caching/with-cloudflare-workers-kv/src/index.js b/examples/caching/with-cloudflare-workers-kv/src/index.js deleted file mode 100644 index 964658642e828..0000000000000 --- a/examples/caching/with-cloudflare-workers-kv/src/index.js +++ /dev/null @@ -1,100 +0,0 @@ -import { createClient } from "@supabase/supabase-js"; -import { Router } from "itty-router"; -import { json, status, withContent } from "itty-router-extras"; -import { readFrom, writeTo } from "./utils/cache"; - -const router = new Router(); - -router.get("/read-kv", async (request, { ARTICLES }) => { - const articles = await readFrom(ARTICLES, "/articles"); - return json(articles); -}); - -router.get("/write-kv", async (request, { ARTICLES }) => { - const articles = [{ title: "test3" }, { title: "test4" }]; - await writeTo(ARTICLES, "/articles", articles); - - return json(articles); -}); - -router.get( - "/articles", - async (request, { SUPABASE_URL, SUPABASE_ANON_KEY, ARTICLES }) => { - const cachedArticles = await readFrom(ARTICLES, "/articles"); - - if (cachedArticles) { - console.log("sending the cache"); - return json(cachedArticles); - } - - console.log("fetching fresh articles"); - - const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY); - - const { data } = await supabase.from("articles").select("*"); - await writeTo(ARTICLES, "/articles", data); - return json(data); - } -); - -router.get( - "/articles/:id", - async (request, { SUPABASE_URL, SUPABASE_ANON_KEY, ARTICLES }) => { - const { id } = request.params; - const cachedArticle = await readFrom(ARTICLES, `/articles/${id}`); - - if (cachedArticle) { - console.log("sending the cache"); - return json(cachedArticle); - } - - console.log("fetching fresh article"); - - const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY); - - const { data } = await supabase - .from("articles") - .select("*") - .match({ id }) - .single(); - - await writeTo(ARTICLES, `/articles/${id}`, data); - - return json(data); - } -); - -router.post( - "/revalidate", - withContent, - async (request, { SUPABASE_URL, SUPABASE_ANON_KEY, ARTICLES }, context) => { - const updateCache = async () => { - const { type, record, old_record } = request.content; - const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY); - - if (type === "INSERT" || type === "UPDATE") { - await writeTo(ARTICLES, `/articles/${record.id}`, record); - } - - if (type === "DELETE") { - await ARTICLES.delete(`/articles/${old_record.id}`); - } - - const { data: articles } = await supabase.from("articles").select("*"); - await writeTo(ARTICLES, "/articles", articles); - console.log("updated cache"); - }; - - context.waitUntil(updateCache()); - - console.log("sending response"); - - return json({ received: true }); - } -); - -router.all("*", () => status(404, "Not found")); - -export default { - fetch: router.handle, -}; diff --git a/examples/caching/with-cloudflare-workers-kv/src/utils/cache.js b/examples/caching/with-cloudflare-workers-kv/src/utils/cache.js deleted file mode 100644 index 6b4aaac271cb5..0000000000000 --- a/examples/caching/with-cloudflare-workers-kv/src/utils/cache.js +++ /dev/null @@ -1,8 +0,0 @@ -export const readFrom = async (cache, path) => { - const data = await cache.get(path); - return JSON.parse(data); -}; - -export const writeTo = async (cache, path, data) => { - await cache.put(path, JSON.stringify(data)); -}; diff --git a/examples/caching/with-cloudflare-workers-kv/wrangler.toml b/examples/caching/with-cloudflare-workers-kv/wrangler.toml deleted file mode 100644 index 267d4229ee900..0000000000000 --- a/examples/caching/with-cloudflare-workers-kv/wrangler.toml +++ /dev/null @@ -1,7 +0,0 @@ -name = "supabase-at-the-edge" -main = "src/index.js" -compatibility_date = "2022-07-07" - -kv_namespaces = [ - { binding = "replace-with-your-kv-name", id = "replace-with-your-kv-production-id", preview_id = "replace-with-your-kv-preview-id" } -] diff --git a/examples/caching/with-nextjs-13-server-components/.env.local.example b/examples/caching/with-nextjs-13-server-components/.env.local.example deleted file mode 100644 index ebd83d9fe356a..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/.env.local.example +++ /dev/null @@ -1,5 +0,0 @@ -# these values can be found in your project's API settings -# https://supabase.com/dashboard/project/_/settings/api - -NEXT_PUBLIC_SUPABASE_URL=your-supabase-url -NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key diff --git a/examples/caching/with-nextjs-13-server-components/.eslintrc.json b/examples/caching/with-nextjs-13-server-components/.eslintrc.json deleted file mode 100644 index bffb357a71225..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/examples/caching/with-nextjs-13-server-components/.gitignore b/examples/caching/with-nextjs-13-server-components/.gitignore deleted file mode 100644 index c87c9b392c020..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/examples/caching/with-nextjs-13-server-components/README.md b/examples/caching/with-nextjs-13-server-components/README.md deleted file mode 100644 index a5d2f3302e2dd..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/README.md +++ /dev/null @@ -1,3 +0,0 @@ -This is an example repo to show how to fetch and cache Supabase data with Next.js Server Components. - -Check out [the article](https://supabase.com/blog/fetching-and-caching-supabase-data-in-next-js-server-components) to learn more. diff --git a/examples/caching/with-nextjs-13-server-components/app/client-side/page.tsx b/examples/caching/with-nextjs-13-server-components/app/client-side/page.tsx deleted file mode 100644 index 519b29396265b..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/client-side/page.tsx +++ /dev/null @@ -1,21 +0,0 @@ -'use client' - -import { useEffect, useState } from 'react' -import supabase from '../../utils/supabase' - -export default function ClientPosts() { - const [isLoading, setIsLoading] = useState(true) - const [posts, setPosts] = useState([]) - - useEffect(() => { - const fetchPosts = async () => { - const { data } = await supabase.from('posts').select() - setPosts(data) - setIsLoading(false) - } - - fetchPosts() - }, []) - - return isLoading ?

    Loading

    :
    {JSON.stringify(posts, null, 2)}
    -} diff --git a/examples/caching/with-nextjs-13-server-components/app/globals.css b/examples/caching/with-nextjs-13-server-components/app/globals.css deleted file mode 100644 index 36aac7e73dfc1..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/globals.css +++ /dev/null @@ -1,26 +0,0 @@ -html, -body { - padding: 0; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, - Fira Sans, Droid Sans, Helvetica Neue, sans-serif; -} - -a { - color: inherit; - text-decoration: none; -} - -* { - box-sizing: border-box; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } - body { - color: white; - background: black; - } -} diff --git a/examples/caching/with-nextjs-13-server-components/app/head.tsx b/examples/caching/with-nextjs-13-server-components/app/head.tsx deleted file mode 100644 index 5ad797f1f2191..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/head.tsx +++ /dev/null @@ -1,10 +0,0 @@ -export default function Head() { - return ( - <> - Create Next App - - - - - ) -} diff --git a/examples/caching/with-nextjs-13-server-components/app/layout.tsx b/examples/caching/with-nextjs-13-server-components/app/layout.tsx deleted file mode 100644 index 24b2aca547fa2..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/layout.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import './globals.css' - -export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - {/* - will contain the components returned by the nearest parent - head.tsx. Find out more at https://beta.nextjs.org/docs/api-reference/file-conventions/head - */} - - {children} - - ) -} diff --git a/examples/caching/with-nextjs-13-server-components/app/page.module.css b/examples/caching/with-nextjs-13-server-components/app/page.module.css deleted file mode 100644 index a978c99de57b3..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/page.module.css +++ /dev/null @@ -1,146 +0,0 @@ -.container { - padding: 0 2rem; -} - -.main { - min-height: 100vh; - padding: 4rem 0; - flex: 1; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.footer { - display: flex; - flex: 1; - padding: 2rem 0; - border-top: 1px solid #eaeaea; - justify-content: center; - align-items: center; -} - -.footer a { - display: flex; - justify-content: center; - align-items: center; - flex-grow: 1; -} - -.title { - margin: 0; - line-height: 1.15; - font-size: 4rem; - font-style: normal; - font-weight: 800; - letter-spacing: -0.025em; -} - -.title a { - text-decoration: none; - color: #0070f3; -} - -.title a:hover, -.title a:focus, -.title a:active { - text-decoration: underline; -} - -.title, -.description { - text-align: center; -} - -.description { - margin: 4rem 0; - line-height: 1.5; - font-size: 1.5rem; -} - -.code { - background: #fafafa; - border-radius: 5px; - padding: 0.75rem; - font-size: 1.1rem; - font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, - Bitstream Vera Sans Mono, Courier New, monospace; -} - -.grid { - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - max-width: 1200px; -} - -.card { - margin: 1rem; - padding: 1.5rem; - text-align: left; - color: inherit; - text-decoration: none; - border: 1px solid #eaeaea; - border-radius: 10px; - transition: color 0.15s ease, border-color 0.15s ease; - max-width: 300px; -} - -.card:hover, -.card:focus, -.card:active { - color: #0070f3; - border-color: #0070f3; -} - -.card h2 { - margin: 0 0 1rem 0; - font-size: 1.5rem; -} - -.card p { - margin: 0; - font-size: 1.25rem; - line-height: 1.5; -} - -.logo { - height: 1em; - margin-left: 0.5rem; -} - -@media (max-width: 600px) { - .grid { - width: 100%; - flex-direction: column; - } -} - -@media (prefers-color-scheme: dark) { - .title { - background: linear-gradient(180deg, #ffffff 0%, #aaaaaa 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - text-fill-color: transparent; - } - .title a { - background: linear-gradient(180deg, #0070f3 0%, #0153af 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - text-fill-color: transparent; - } - .card, - .footer { - border-color: #222; - } - .code { - background: #111; - } - .logo img { - filter: invert(1); - } -} diff --git a/examples/caching/with-nextjs-13-server-components/app/page.tsx b/examples/caching/with-nextjs-13-server-components/app/page.tsx deleted file mode 100644 index 951caeb2dc848..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/page.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import Image from 'next/image' -import styles from './page.module.css' - -export default function Home() { - return ( -
    - ) -} diff --git a/examples/caching/with-nextjs-13-server-components/app/realtime/page.tsx b/examples/caching/with-nextjs-13-server-components/app/realtime/page.tsx deleted file mode 100644 index c14ed5303bbe9..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/realtime/page.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import supabase from '../../utils/supabase' -import RealtimePosts from './realtime-posts' - -// do not cache this page -export const revalidate = 0 - -// this component fetches the current posts server-side -// and subscribes to new posts client-side -export default async function Realtime() { - const { data } = await supabase.from('posts').select('*') - - // data can be passed from server components to client components - // this allows us to fetch the initial posts before rendering the page - // our component will then subscribe to new posts client-side - return -} diff --git a/examples/caching/with-nextjs-13-server-components/app/realtime/realtime-posts.tsx b/examples/caching/with-nextjs-13-server-components/app/realtime/realtime-posts.tsx deleted file mode 100644 index d02d5a3661338..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/realtime/realtime-posts.tsx +++ /dev/null @@ -1,34 +0,0 @@ -'use client' - -import { useEffect, useState } from 'react' -import supabase from '../../utils/supabase' - -// realtime subscriptions need to be set up client-side -// this component takes initial posts as props and automatically -// updates when new posts are inserted into Supabase's `posts` table -export default function RealtimePosts({ serverPosts }: { serverPosts: any }) { - const [posts, setPosts] = useState(serverPosts) - - useEffect(() => { - // this overwrites `posts` any time the `serverPosts` prop changes - // this happens when the parent Server Component is re-rendered - setPosts(serverPosts) - }, [serverPosts]) - - useEffect(() => { - // ensure you have enabled replication on the `posts` table - // https://supabase.com/dashboard/project/_/database/replication - const channel = supabase - .channel('*') - .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'posts' }, (payload) => - setPosts((posts: any) => [...posts, payload.new]) - ) - .subscribe() - - return () => { - supabase.removeChannel(channel) - } - }, [serverPosts]) - - return
    {JSON.stringify(posts, null, 2)}
    -} diff --git a/examples/caching/with-nextjs-13-server-components/app/server-rendered/[id]/page.tsx b/examples/caching/with-nextjs-13-server-components/app/server-rendered/[id]/page.tsx deleted file mode 100644 index 1b323e4d0c59b..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/server-rendered/[id]/page.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import supabase from '../../../utils/supabase' -import { notFound } from 'next/navigation' - -// do not cache this page -export const revalidate = 0 - -export async function generateStaticParams() { - const { data: posts } = await supabase.from('posts').select('id') - - return posts?.map(({ id }) => ({ - id, - })) -} - -export default async function Post({ params: { id } }: { params: { id: string } }) { - const { data: post } = await supabase.from('posts').select().match({ id }).single() - - if (!post) { - notFound() - } - - return
    {JSON.stringify(post, null, 2)}
    -} diff --git a/examples/caching/with-nextjs-13-server-components/app/server-rendered/page.tsx b/examples/caching/with-nextjs-13-server-components/app/server-rendered/page.tsx deleted file mode 100644 index 2b96263ba9967..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/server-rendered/page.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import Link from 'next/link' -import supabase from '../../utils/supabase' - -// do not cache this page -export const revalidate = 0 - -export default async function Posts() { - const { data: posts } = await supabase.from('posts').select('id, title') - - if (!posts) { - return

    No posts found.

    - } - - return posts.map((post) => ( -

    - {post.title} -

    - )) -} diff --git a/examples/caching/with-nextjs-13-server-components/app/static-with-revalidation/[id]/page.tsx b/examples/caching/with-nextjs-13-server-components/app/static-with-revalidation/[id]/page.tsx deleted file mode 100644 index 06541e7a702e3..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/static-with-revalidation/[id]/page.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import supabase from '../../../utils/supabase' -import { notFound } from 'next/navigation' - -// cache this page for 1 minute -export const revalidate = 60 - -export async function generateStaticParams() { - const { data: posts } = await supabase.from('posts').select('id') - - return posts?.map(({ id }) => ({ - id, - })) -} - -export default async function Post({ params: { id } }: { params: { id: string } }) { - const { data: post } = await supabase.from('posts').select().match({ id }).single() - - if (!post) { - notFound() - } - - return
    {JSON.stringify(post, null, 2)}
    -} diff --git a/examples/caching/with-nextjs-13-server-components/app/static-with-revalidation/page.tsx b/examples/caching/with-nextjs-13-server-components/app/static-with-revalidation/page.tsx deleted file mode 100644 index cb6879d2e28bf..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/static-with-revalidation/page.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import Link from 'next/link' -import supabase from '../../utils/supabase' - -// cache this page for 1 minute -export const revalidate = 60 - -export default async function Posts() { - const { data: posts } = await supabase.from('posts').select('id, title') - - if (!posts) { - return

    No posts found.

    - } - - return posts.map((post) => ( -

    - {post.title} -

    - )) -} diff --git a/examples/caching/with-nextjs-13-server-components/app/static/[id]/page.tsx b/examples/caching/with-nextjs-13-server-components/app/static/[id]/page.tsx deleted file mode 100644 index 43f87fa981565..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/static/[id]/page.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import supabase from '../../../utils/supabase' -import { notFound } from 'next/navigation' - -export async function generateStaticParams() { - const { data: posts } = await supabase.from('posts').select('id') - - return posts?.map(({ id }) => ({ - id, - })) -} - -export default async function Post({ params: { id } }: { params: { id: string } }) { - const { data: post } = await supabase.from('posts').select().match({ id }).single() - - if (!post) { - notFound() - } - - return
    {JSON.stringify(post, null, 2)}
    -} diff --git a/examples/caching/with-nextjs-13-server-components/app/static/page.tsx b/examples/caching/with-nextjs-13-server-components/app/static/page.tsx deleted file mode 100644 index 0465d62bbca87..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/app/static/page.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import Link from 'next/link' -import supabase from '../../utils/supabase' - -export default async function Posts() { - const { data: posts } = await supabase.from('posts').select('id, title') - - if (!posts) { - return

    No posts found.

    - } - - return posts.map((post) => ( -

    - {post.title} -

    - )) -} diff --git a/examples/caching/with-nextjs-13-server-components/next.config.js b/examples/caching/with-nextjs-13-server-components/next.config.js deleted file mode 100644 index dafb0c88e961e..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/next.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - experimental: { - appDir: true, - }, -} - -module.exports = nextConfig diff --git a/examples/caching/with-nextjs-13-server-components/package-lock.json b/examples/caching/with-nextjs-13-server-components/package-lock.json deleted file mode 100644 index 04bf2880b38e8..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/package-lock.json +++ /dev/null @@ -1,5302 +0,0 @@ -{ - "name": "next13", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "next13", - "version": "0.1.0", - "dependencies": { - "@supabase/supabase-js": "^2.1.0", - "@types/node": "18.11.9", - "@types/react": "18.0.25", - "@types/react-dom": "18.0.9", - "eslint": "8.27.0", - "eslint-config-next": "13.0.3", - "next": "13.0.3", - "react": "18.2.0", - "react-dom": "18.2.0", - "typescript": "4.8.4" - } - }, - "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "dependencies": { - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "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==", - "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", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "node_modules/@next/env": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.0.3.tgz", - "integrity": "sha512-/4WzeG61Ot/PxsghXkSqQJ6UohFfwXoZ3dtsypmR9EBP+OIax9JRq0trq8Z/LCT9Aq4JbihVkaazRWguORjTAw==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.3.tgz", - "integrity": "sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==", - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.3.tgz", - "integrity": "sha512-uxfUoj65CdFc1gX2q7GtBX3DhKv9Kn343LMqGNvXyuTpYTGMmIiVY7b9yF8oLWRV0gVKqhZBZifUmoPE8SJU6Q==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.0.3.tgz", - "integrity": "sha512-t2k+WDfg7Cq2z/EnalKGsd/9E5F4Hdo1xu+UzZXYDpKUI9zgE6Bz8ajQb8m8txv3qOaWdKuDa5j5ziq9Acd1Xw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.3.tgz", - "integrity": "sha512-wV6j6SZ1bc/YHOLCLk9JVqaZTCCey6HBV7inl2DriHsHqIcO6F3+QiYf0KXwRP9BE0GSZZrYd5mZQm2JPTHdJA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.3.tgz", - "integrity": "sha512-jaI2CMuYWvUtRixV3AIjUhnxUDU1FKOR+8hADMhYt3Yz+pCKuj4RZ0n0nY5qUf3qT1AtvnJXEgyatSFJhSp/wQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-freebsd-x64": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.3.tgz", - "integrity": "sha512-nbyT0toBTJrcj5TCB9pVnQpGJ3utGyQj4CWegZs1ulaeUQ5Z7CS/qt8nRyYyOKYHtOdSCJ9Nw5F/RgKNkdpOdw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.3.tgz", - "integrity": "sha512-1naLxYvRUQCoFCU1nMkcQueRc0Iux9xBv1L5pzH2ejtIWFg8BrSgyuluJG4nyAhFCx4WG863IEIkAaefOowVdA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.3.tgz", - "integrity": "sha512-3Z4A8JkuGWpMVbUhUPQInK/SLY+kijTT78Q/NZCrhLlyvwrVxaQALJNlXzxDLraUgv4oVH0Wz/FIw1W9PUUhxA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.3.tgz", - "integrity": "sha512-MoYe9SM40UaunTjC+01c9OILLH3uSoeri58kDMu3KF/EFEvn1LZ6ODeDj+SLGlAc95wn46hrRJS2BPmDDE+jFQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.3.tgz", - "integrity": "sha512-z22T5WGnRanjLMXdF0NaNjSpBlEzzY43t5Ysp3nW1oI6gOkub6WdQNZeHIY7A2JwkgSWZmtjLtf+Fzzz38LHeQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.3.tgz", - "integrity": "sha512-ZOMT7zjBFmkusAtr47k8xs/oTLsNlTH6xvYb+iux7yly2hZGwhfBLzPGBsbeMZukZ96IphJTagT+C033s6LNVA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.3.tgz", - "integrity": "sha512-Q4BM16Djl+Oah9UdGrvjFYgoftYB2jNd+rtRGPX5Mmxo09Ry/KiLbOZnoUyoIxKc1xPyfqMXuaVsAFQLYs0KEQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.3.tgz", - "integrity": "sha512-Sa8yGkNeRUsic8Qjf7MLIAfP0p0+einK/wIqJ8UO1y76j+8rRQu42AMs5H4Ax1fm9GEYq6I8njHtY59TVpTtGQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.3.tgz", - "integrity": "sha512-IAptmSqA7k4tQzaw2NAkoEjj3+Dz9ceuvlEHwYh770MMDL4V0ku2m+UHrmn5HUCEDHhgwwjg2nyf6728q2jr1w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" - }, - "node_modules/@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.3.0.tgz", - "integrity": "sha512-e50w8LkfbxtI2SJxUbuQNM7pN+Yu3HYkvCLsidwBgivTdcoFOkhFodwLvWSVdeaxY1mH6Gm66RiKeUMn1+BAow==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.1.0.tgz", - "integrity": "sha512-hODrAUDSC6RV6EhwuSMyhaQCF32gij0EBTceuDR+8suJsg7XcyUG0fYgeYecWIvt0nz61xAMY6E+Ywb0tJaAng==", - "dependencies": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.3.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "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/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - }, - "node_modules/@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", - "dependencies": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", - "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", - "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", - "dependencies": { - "@typescript-eslint/types": "5.43.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "node_modules/axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", - "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.3.tgz", - "integrity": "sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==", - "dependencies": { - "@next/eslint-plugin-next": "13.0.3", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", - "dependencies": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-13.0.3.tgz", - "integrity": "sha512-rFQeepcenRxKzeKlh1CsmEnxsJwhIERtbUjmYnKZyDInZsU06lvaGw5DT44rlNp1Rv2MT/e9vffZ8vK+ytwXHA==", - "dependencies": { - "@next/env": "13.0.3", - "@swc/helpers": "0.4.11", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.0", - "use-sync-external-store": "1.2.0" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=14.6.0" - }, - "optionalDependencies": { - "@next/swc-android-arm-eabi": "13.0.3", - "@next/swc-android-arm64": "13.0.3", - "@next/swc-darwin-arm64": "13.0.3", - "@next/swc-darwin-x64": "13.0.3", - "@next/swc-freebsd-x64": "13.0.3", - "@next/swc-linux-arm-gnueabihf": "13.0.3", - "@next/swc-linux-arm64-gnu": "13.0.3", - "@next/swc-linux-arm64-musl": "13.0.3", - "@next/swc-linux-x64-gnu": "13.0.3", - "@next/swc-linux-x64-musl": "13.0.3", - "@next/swc-win32-arm64-msvc": "13.0.3", - "@next/swc-win32-ia32-msvc": "13.0.3", - "@next/swc-win32-x64-msvc": "13.0.3" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "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==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "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" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.0.tgz", - "integrity": "sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==", - "dependencies": { - "client-only": "0.0.1" - }, - "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 - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - } - }, - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "@next/env": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.0.3.tgz", - "integrity": "sha512-/4WzeG61Ot/PxsghXkSqQJ6UohFfwXoZ3dtsypmR9EBP+OIax9JRq0trq8Z/LCT9Aq4JbihVkaazRWguORjTAw==" - }, - "@next/eslint-plugin-next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.3.tgz", - "integrity": "sha512-slmTAHNKDyc7jhx4VF8lFbmOPWJ3PShtUUWpb6x9+ga59CyOxgP6AdcDhxfapnWYACKe/TwYiaveufu7LqXgZg==", - "requires": { - "glob": "7.1.7" - } - }, - "@next/swc-android-arm-eabi": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.3.tgz", - "integrity": "sha512-uxfUoj65CdFc1gX2q7GtBX3DhKv9Kn343LMqGNvXyuTpYTGMmIiVY7b9yF8oLWRV0gVKqhZBZifUmoPE8SJU6Q==", - "optional": true - }, - "@next/swc-android-arm64": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.0.3.tgz", - "integrity": "sha512-t2k+WDfg7Cq2z/EnalKGsd/9E5F4Hdo1xu+UzZXYDpKUI9zgE6Bz8ajQb8m8txv3qOaWdKuDa5j5ziq9Acd1Xw==", - "optional": true - }, - "@next/swc-darwin-arm64": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.3.tgz", - "integrity": "sha512-wV6j6SZ1bc/YHOLCLk9JVqaZTCCey6HBV7inl2DriHsHqIcO6F3+QiYf0KXwRP9BE0GSZZrYd5mZQm2JPTHdJA==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.3.tgz", - "integrity": "sha512-jaI2CMuYWvUtRixV3AIjUhnxUDU1FKOR+8hADMhYt3Yz+pCKuj4RZ0n0nY5qUf3qT1AtvnJXEgyatSFJhSp/wQ==", - "optional": true - }, - "@next/swc-freebsd-x64": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.3.tgz", - "integrity": "sha512-nbyT0toBTJrcj5TCB9pVnQpGJ3utGyQj4CWegZs1ulaeUQ5Z7CS/qt8nRyYyOKYHtOdSCJ9Nw5F/RgKNkdpOdw==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.3.tgz", - "integrity": "sha512-1naLxYvRUQCoFCU1nMkcQueRc0Iux9xBv1L5pzH2ejtIWFg8BrSgyuluJG4nyAhFCx4WG863IEIkAaefOowVdA==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.3.tgz", - "integrity": "sha512-3Z4A8JkuGWpMVbUhUPQInK/SLY+kijTT78Q/NZCrhLlyvwrVxaQALJNlXzxDLraUgv4oVH0Wz/FIw1W9PUUhxA==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.3.tgz", - "integrity": "sha512-MoYe9SM40UaunTjC+01c9OILLH3uSoeri58kDMu3KF/EFEvn1LZ6ODeDj+SLGlAc95wn46hrRJS2BPmDDE+jFQ==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.3.tgz", - "integrity": "sha512-z22T5WGnRanjLMXdF0NaNjSpBlEzzY43t5Ysp3nW1oI6gOkub6WdQNZeHIY7A2JwkgSWZmtjLtf+Fzzz38LHeQ==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.3.tgz", - "integrity": "sha512-ZOMT7zjBFmkusAtr47k8xs/oTLsNlTH6xvYb+iux7yly2hZGwhfBLzPGBsbeMZukZ96IphJTagT+C033s6LNVA==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.3.tgz", - "integrity": "sha512-Q4BM16Djl+Oah9UdGrvjFYgoftYB2jNd+rtRGPX5Mmxo09Ry/KiLbOZnoUyoIxKc1xPyfqMXuaVsAFQLYs0KEQ==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.3.tgz", - "integrity": "sha512-Sa8yGkNeRUsic8Qjf7MLIAfP0p0+einK/wIqJ8UO1y76j+8rRQu42AMs5H4Ax1fm9GEYq6I8njHtY59TVpTtGQ==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.3.tgz", - "integrity": "sha512-IAptmSqA7k4tQzaw2NAkoEjj3+Dz9ceuvlEHwYh770MMDL4V0ku2m+UHrmn5HUCEDHhgwwjg2nyf6728q2jr1w==", - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" - }, - "@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.3.0.tgz", - "integrity": "sha512-e50w8LkfbxtI2SJxUbuQNM7pN+Yu3HYkvCLsidwBgivTdcoFOkhFodwLvWSVdeaxY1mH6Gm66RiKeUMn1+BAow==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.1.0.tgz", - "integrity": "sha512-hODrAUDSC6RV6EhwuSMyhaQCF32gij0EBTceuDR+8suJsg7XcyUG0fYgeYecWIvt0nz61xAMY6E+Ywb0tJaAng==", - "requires": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.3.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "@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" - } - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - }, - "@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", - "requires": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", - "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" - } - }, - "@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==" - }, - "@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", - "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", - "requires": { - "@typescript-eslint/types": "5.43.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==" - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==" - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", - "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - } - }, - "eslint-config-next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.3.tgz", - "integrity": "sha512-i2JoQP8gGv303GjXTonA27fm1ckRRkRoAP1WYEQgN0D2DDoFeBPqlJgHlMHnXKWjmNct/sW8jQEvy9am2juc8g==", - "requires": { - "@next/eslint-plugin-next": "13.0.3", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", - "requires": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "requires": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "requires": {} - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "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==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "requires": { - "minimist": "^1.2.0" - } - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "next": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-13.0.3.tgz", - "integrity": "sha512-rFQeepcenRxKzeKlh1CsmEnxsJwhIERtbUjmYnKZyDInZsU06lvaGw5DT44rlNp1Rv2MT/e9vffZ8vK+ytwXHA==", - "requires": { - "@next/env": "13.0.3", - "@next/swc-android-arm-eabi": "13.0.3", - "@next/swc-android-arm64": "13.0.3", - "@next/swc-darwin-arm64": "13.0.3", - "@next/swc-darwin-x64": "13.0.3", - "@next/swc-freebsd-x64": "13.0.3", - "@next/swc-linux-arm-gnueabihf": "13.0.3", - "@next/swc-linux-arm64-gnu": "13.0.3", - "@next/swc-linux-arm64-musl": "13.0.3", - "@next/swc-linux-x64-gnu": "13.0.3", - "@next/swc-linux-x64-musl": "13.0.3", - "@next/swc-win32-arm64-msvc": "13.0.3", - "@next/swc-win32-ia32-msvc": "13.0.3", - "@next/swc-win32-x64-msvc": "13.0.3", - "@swc/helpers": "0.4.11", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.0", - "use-sync-external-store": "1.2.0" - } - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "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==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "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==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "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" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "styled-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.0.tgz", - "integrity": "sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==", - "requires": { - "client-only": "0.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "requires": {} - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "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==" - } - } -} diff --git a/examples/caching/with-nextjs-13-server-components/package.json b/examples/caching/with-nextjs-13-server-components/package.json deleted file mode 100644 index c9f034b12d93a..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "next13", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "@supabase/supabase-js": "^2.1.0", - "@types/node": "18.11.9", - "@types/react": "18.0.25", - "@types/react-dom": "18.0.9", - "eslint": "8.27.0", - "eslint-config-next": "13.0.3", - "next": "13.0.3", - "react": "18.2.0", - "react-dom": "18.2.0", - "typescript": "4.8.4" - } -} diff --git a/examples/caching/with-nextjs-13-server-components/pages/api/hello.ts b/examples/caching/with-nextjs-13-server-components/pages/api/hello.ts deleted file mode 100644 index 9bafa6e258d23..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/pages/api/hello.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import type { NextApiRequest, NextApiResponse } from 'next' - -type Data = { - name: string -} - -export default function handler(req: NextApiRequest, res: NextApiResponse) { - res.status(200).json({ name: 'John Doe' }) -} diff --git a/examples/caching/with-nextjs-13-server-components/public/favicon.ico b/examples/caching/with-nextjs-13-server-components/public/favicon.ico deleted file mode 100644 index 718d6fea4835e..0000000000000 Binary files a/examples/caching/with-nextjs-13-server-components/public/favicon.ico and /dev/null differ diff --git a/examples/caching/with-nextjs-13-server-components/public/vercel.svg b/examples/caching/with-nextjs-13-server-components/public/vercel.svg deleted file mode 100644 index fbf0e25a651c2..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/public/vercel.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/caching/with-nextjs-13-server-components/tsconfig.json b/examples/caching/with-nextjs-13-server-components/tsconfig.json deleted file mode 100644 index 6ef5cd577f6ed..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ] - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/examples/caching/with-nextjs-13-server-components/utils/supabase.ts b/examples/caching/with-nextjs-13-server-components/utils/supabase.ts deleted file mode 100644 index 03729d0b48646..0000000000000 --- a/examples/caching/with-nextjs-13-server-components/utils/supabase.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createClient } from '@supabase/supabase-js' - -export default createClient( - process.env.NEXT_PUBLIC_SUPABASE_URL!, - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! -) diff --git a/examples/caching/with-nextjs-13/.env.local.example b/examples/caching/with-nextjs-13/.env.local.example deleted file mode 100644 index f41d144a080e1..0000000000000 --- a/examples/caching/with-nextjs-13/.env.local.example +++ /dev/null @@ -1,2 +0,0 @@ -NEXT_PUBLIC_SUPABASE_URL= -SUPABASE_SERVICE_ROLE_KEY= \ No newline at end of file diff --git a/examples/caching/with-nextjs-13/.eslintrc.json b/examples/caching/with-nextjs-13/.eslintrc.json deleted file mode 100644 index bffb357a71225..0000000000000 --- a/examples/caching/with-nextjs-13/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/examples/caching/with-nextjs-13/.gitignore b/examples/caching/with-nextjs-13/.gitignore deleted file mode 100644 index 4f360c89d2acf..0000000000000 --- a/examples/caching/with-nextjs-13/.gitignore +++ /dev/null @@ -1,38 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts - -.vscode diff --git a/examples/caching/with-nextjs-13/README.md b/examples/caching/with-nextjs-13/README.md deleted file mode 100644 index a71d2e3b11485..0000000000000 --- a/examples/caching/with-nextjs-13/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# Caching data with Next.js 13 and Supabase - -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -It showcases how to [fetch and cache data](https://beta.nextjs.org/docs/data-fetching/caching) with Next.js and Supabase. - -## Getting Started - -Download this example: - -``` -curl https://codeload.github.com/supabase/supabase/tar.gz/master | tar -xz --strip=3 supabase-master/examples/caching/with-nextjs-13 -``` - -Then, start Supabase locally and seed your local development database with the [Supabase CLI](https://supabase.com/docs/reference/cli): - -```bash -supabase start -``` - -Next, run the development server: - -```bash -npm run dev -# or -yarn dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. - -The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/examples/caching/with-nextjs-13/app/globals.css b/examples/caching/with-nextjs-13/app/globals.css deleted file mode 100644 index 4f1842163d222..0000000000000 --- a/examples/caching/with-nextjs-13/app/globals.css +++ /dev/null @@ -1,26 +0,0 @@ -html, -body { - padding: 0; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, - Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; -} - -a { - color: inherit; - text-decoration: none; -} - -* { - box-sizing: border-box; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } - body { - color: white; - background: black; - } -} diff --git a/examples/caching/with-nextjs-13/app/layout.tsx b/examples/caching/with-nextjs-13/app/layout.tsx deleted file mode 100644 index 44facc948f4c8..0000000000000 --- a/examples/caching/with-nextjs-13/app/layout.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import './globals.css' - -export default function RootLayout({ - children, -}: { - children: React.ReactNode -}) { - return ( - - - Create Next App - - - - {children} - - ) -} diff --git a/examples/caching/with-nextjs-13/app/page.tsx b/examples/caching/with-nextjs-13/app/page.tsx deleted file mode 100644 index 0969a3a94ff1b..0000000000000 --- a/examples/caching/with-nextjs-13/app/page.tsx +++ /dev/null @@ -1,19 +0,0 @@ -// Caching data with Next.js 13 and Supabase -// See the docs: https://beta.nextjs.org/docs/data-fetching/caching -import 'server-only' -import { createClient } from '@supabase/supabase-js' - -const supabase = createClient( - process.env.NEXT_PUBLIC_SUPABASE_URL ?? 'http://localhost:54321', - process.env.SUPABASE_SERVICE_ROLE_KEY ?? - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSJ9.vI9obAHOGyVVKa3pD--kJlyxp-Z2zV9UUMAhKpNLAcU', - { global: { fetch } } // Note: this is not required as supabase-js uses the global fetch when available! -) - -export const revalidate = 60 // revalidate this page at most every 60 seconds - -export default async function PostList() { - const { data, error } = await supabase.from('articles').select('*') - - return
    {JSON.stringify({ data, error }, null, 2)}
    -} diff --git a/examples/caching/with-nextjs-13/next.config.js b/examples/caching/with-nextjs-13/next.config.js deleted file mode 100644 index dafb0c88e961e..0000000000000 --- a/examples/caching/with-nextjs-13/next.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - experimental: { - appDir: true, - }, -} - -module.exports = nextConfig diff --git a/examples/caching/with-nextjs-13/package-lock.json b/examples/caching/with-nextjs-13/package-lock.json deleted file mode 100644 index efafeecfc0955..0000000000000 --- a/examples/caching/with-nextjs-13/package-lock.json +++ /dev/null @@ -1,5751 +0,0 @@ -{ - "name": "with-nextjs-13", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "with-nextjs-13", - "version": "0.1.0", - "dependencies": { - "@supabase/supabase-js": "^2.0.4", - "next": "13.0.0", - "react": "18.2.0", - "react-dom": "18.2.0", - "server-only": "^0.0.1" - }, - "devDependencies": { - "@types/node": "18.11.7", - "@types/react": "18.0.24", - "@types/react-dom": "18.0.8", - "eslint": "8.26.0", - "eslint-config-next": "13.0.0", - "typescript": "4.8.4" - } - }, - "node_modules/@babel/runtime": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.0.tgz", - "integrity": "sha512-NDYdls71fTXoU8TZHfbBWg7DiZfNzClcKui/+kyi6ppD2L1qnWW3VV6CjtaBXSUGGhiTWJ6ereOIkUvenif66Q==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.0.tgz", - "integrity": "sha512-v1JH7PeAAGBEyTQM9TqojVl+b20zXtesFKCJHu50xMxZKD1fX0TKaKHPsZfFkXfs7D1M9M6Eeqg1FkJ3a0x2dA==", - "dev": true, - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", - "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "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", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@next/env": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.0.0.tgz", - "integrity": "sha512-65v9BVuah2Mplohm4+efsKEnoEuhmlGm8B2w6vD1geeEP2wXtlSJCvR/cCRJ3fD8wzCQBV41VcMBQeYET6MRkg==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.0.tgz", - "integrity": "sha512-z+gnX4Zizatqatc6f4CQrcC9oN8Us3Vrq/OLyc98h7K/eWctrnV91zFZodmJHUjx0cITY8uYM7LXD7IdYkg3kg==", - "dev": true, - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.0.tgz", - "integrity": "sha512-+DUQkYF93gxFjWY+CYWE1QDX6gTgnUiWf+W4UqZjM1Jcef8U97fS6xYh+i+8rH4MM0AXHm7OSakvfOMzmjU6VA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.0.0.tgz", - "integrity": "sha512-RW9Uy3bMSc0zVGCa11klFuwfP/jdcdkhdruqnrJ7v+7XHm6OFKkSRzX6ee7yGR1rdDZvTnP4GZSRSpzjLv/N0g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.0.tgz", - "integrity": "sha512-APA26nps1j4qyhOIzkclW/OmgotVHj1jBxebSpMCPw2rXfiNvKNY9FA0TcuwPmUCNqaTnm703h6oW4dvp73A4Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.0.tgz", - "integrity": "sha512-qsUhUdoFuRJiaJ7LnvTQ6GZv1QnMDcRXCIjxaN0FNVXwrjkq++U7KjBUaxXkRzLV4C7u0NHLNOp0iZwNNE7ypw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-freebsd-x64": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.0.tgz", - "integrity": "sha512-sCdyCbboS7CwdnevKH9J6hkJI76LUw1jVWt4eV7kISuLiPba3JmehZSWm80oa4ADChRVAwzhLAo2zJaYRrInbg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.0.tgz", - "integrity": "sha512-/X/VxfFA41C9jrEv+sUsPLQ5vbDPVIgG0CJrzKvrcc+b+4zIgPgtfsaWq9ockjHFQi3ycvlZK4TALOXO8ovQ6Q==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.0.tgz", - "integrity": "sha512-x6Oxr1GIi0ZtNiT6jbw+JVcbEi3UQgF7mMmkrgfL4mfchOwXtWSHKTSSPnwoJWJfXYa0Vy1n8NElWNTGAqoWFw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.0.tgz", - "integrity": "sha512-SnMH9ngI+ipGh3kqQ8+mDtWunirwmhQnQeZkEq9e/9Xsgjf04OetqrqRHKM1HmJtG2qMUJbyXFJ0F81TPuT+3g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.0.tgz", - "integrity": "sha512-VSQwTX9EmdbotArtA1J67X8964oQfe0xHb32x4tu+JqTR+wOHyG6wGzPMdXH2oKAp6rdd7BzqxUXXf0J+ypHlw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.0.tgz", - "integrity": "sha512-xBCP0nnpO0q4tsytXkvIwWFINtbFRyVY5gxa1zB0vlFtqYR9lNhrOwH3CBrks3kkeaePOXd611+8sjdUtrLnXA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.0.tgz", - "integrity": "sha512-NutwDafqhGxqPj/eiUixJq9ImS/0sgx6gqlD7jRndCvQ2Q8AvDdu1+xKcGWGNnhcDsNM/n1avf1e62OG1GaqJg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.0.tgz", - "integrity": "sha512-zNaxaO+Kl/xNz02E9QlcVz0pT4MjkXGDLb25qxtAzyJL15aU0+VjjbIZAYWctG59dvggNIUNDWgoBeVTKB9xLg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.0.tgz", - "integrity": "sha512-FFOGGWwTCRMu9W7MF496Urefxtuo2lttxF1vwS+1rIRsKvuLrWhVaVTj3T8sf2EBL6gtJbmh4TYlizS+obnGKA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "node_modules/@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "dependencies": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "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/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.7.tgz", - "integrity": "sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ==", - "dev": true - }, - "node_modules/@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.0.24", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.24.tgz", - "integrity": "sha512-wRJWT6ouziGUy+9uX0aW4YOJxAY0bG6/AOk5AW5QSvZqI7dk6VBIbXvcVgIw/W5Jrl24f77df98GEKTJGOLx7Q==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.0.8", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.8.tgz", - "integrity": "sha512-C3GYO0HLaOkk9dDAz3Dl4sbe4AKUGTCfFIZsz3n/82dPNN8Du533HzKatDxeUYWu24wJgMP1xICqkWk1YOLOIw==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.41.0.tgz", - "integrity": "sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.41.0", - "@typescript-eslint/types": "5.41.0", - "@typescript-eslint/typescript-estree": "5.41.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.41.0.tgz", - "integrity": "sha512-xOxPJCnuktUkY2xoEZBKXO5DBCugFzjrVndKdUnyQr3+9aDWZReKq9MhaoVnbL+maVwWJu/N0SEtrtEUNb62QQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.41.0", - "@typescript-eslint/visitor-keys": "5.41.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.41.0.tgz", - "integrity": "sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.41.0.tgz", - "integrity": "sha512-SlzFYRwFSvswzDSQ/zPkIWcHv8O5y42YUskko9c4ki+fV6HATsTODUPbRbcGDFYP86gaJL5xohUEytvyNNcXWg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.41.0", - "@typescript-eslint/visitor-keys": "5.41.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.41.0.tgz", - "integrity": "sha512-vilqeHj267v8uzzakbm13HkPMl7cbYpKVjgFWZPIOHIJHZtinvypUhJ5xBXfWYg4eFKqztbMMpOgFpT9Gfx4fw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.41.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", - "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/axe-core": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.0.tgz", - "integrity": "sha512-4+rr8eQ7+XXS5nZrKcMO/AikHL0hVqy+lHWAnE3xdHl+aguag8SOQ6eEqLexwLNWgXIMfunGuD3ON1/6Kyet0A==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001426", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz", - "integrity": "sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/core-js-pure": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.0.tgz", - "integrity": "sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz", - "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.0.tgz", - "integrity": "sha512-y2nqWS2tycWySdVhb+rhp6CuDmDazGySqkzzQZf3UTyfHyC7og1m5m/AtMFwCo5mtvDqvw1BENin52kV9733lg==", - "dev": true, - "dependencies": { - "@next/eslint-plugin-next": "13.0.0", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.21.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/next": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/next/-/next-13.0.0.tgz", - "integrity": "sha512-puH1WGM6rGeFOoFdXXYfUxN9Sgi4LMytCV5HkQJvVUOhHfC1DoVqOfvzaEteyp6P04IW+gbtK2Q9pInVSrltPA==", - "dependencies": { - "@next/env": "13.0.0", - "@swc/helpers": "0.4.11", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.0", - "use-sync-external-store": "1.2.0" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=14.6.0" - }, - "optionalDependencies": { - "@next/swc-android-arm-eabi": "13.0.0", - "@next/swc-android-arm64": "13.0.0", - "@next/swc-darwin-arm64": "13.0.0", - "@next/swc-darwin-x64": "13.0.0", - "@next/swc-freebsd-x64": "13.0.0", - "@next/swc-linux-arm-gnueabihf": "13.0.0", - "@next/swc-linux-arm64-gnu": "13.0.0", - "@next/swc-linux-arm64-musl": "13.0.0", - "@next/swc-linux-x64-gnu": "13.0.0", - "@next/swc-linux-x64-musl": "13.0.0", - "@next/swc-win32-arm64-msvc": "13.0.0", - "@next/swc-win32-ia32-msvc": "13.0.0", - "@next/swc-win32-x64-msvc": "13.0.0" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", - "react": "^18.0.0-0", - "react-dom": "^18.0.0-0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "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" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/server-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", - "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.0.tgz", - "integrity": "sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==", - "dependencies": { - "client-only": "0.0.1" - }, - "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 - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/runtime": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.0.tgz", - "integrity": "sha512-NDYdls71fTXoU8TZHfbBWg7DiZfNzClcKui/+kyi6ppD2L1qnWW3VV6CjtaBXSUGGhiTWJ6ereOIkUvenif66Q==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.0.tgz", - "integrity": "sha512-v1JH7PeAAGBEyTQM9TqojVl+b20zXtesFKCJHu50xMxZKD1fX0TKaKHPsZfFkXfs7D1M9M6Eeqg1FkJ3a0x2dA==", - "dev": true, - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - } - }, - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", - "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@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", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@next/env": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.0.0.tgz", - "integrity": "sha512-65v9BVuah2Mplohm4+efsKEnoEuhmlGm8B2w6vD1geeEP2wXtlSJCvR/cCRJ3fD8wzCQBV41VcMBQeYET6MRkg==" - }, - "@next/eslint-plugin-next": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.0.tgz", - "integrity": "sha512-z+gnX4Zizatqatc6f4CQrcC9oN8Us3Vrq/OLyc98h7K/eWctrnV91zFZodmJHUjx0cITY8uYM7LXD7IdYkg3kg==", - "dev": true, - "requires": { - "glob": "7.1.7" - } - }, - "@next/swc-android-arm-eabi": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.0.tgz", - "integrity": "sha512-+DUQkYF93gxFjWY+CYWE1QDX6gTgnUiWf+W4UqZjM1Jcef8U97fS6xYh+i+8rH4MM0AXHm7OSakvfOMzmjU6VA==", - "optional": true - }, - "@next/swc-android-arm64": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.0.0.tgz", - "integrity": "sha512-RW9Uy3bMSc0zVGCa11klFuwfP/jdcdkhdruqnrJ7v+7XHm6OFKkSRzX6ee7yGR1rdDZvTnP4GZSRSpzjLv/N0g==", - "optional": true - }, - "@next/swc-darwin-arm64": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.0.tgz", - "integrity": "sha512-APA26nps1j4qyhOIzkclW/OmgotVHj1jBxebSpMCPw2rXfiNvKNY9FA0TcuwPmUCNqaTnm703h6oW4dvp73A4Q==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.0.tgz", - "integrity": "sha512-qsUhUdoFuRJiaJ7LnvTQ6GZv1QnMDcRXCIjxaN0FNVXwrjkq++U7KjBUaxXkRzLV4C7u0NHLNOp0iZwNNE7ypw==", - "optional": true - }, - "@next/swc-freebsd-x64": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.0.tgz", - "integrity": "sha512-sCdyCbboS7CwdnevKH9J6hkJI76LUw1jVWt4eV7kISuLiPba3JmehZSWm80oa4ADChRVAwzhLAo2zJaYRrInbg==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.0.tgz", - "integrity": "sha512-/X/VxfFA41C9jrEv+sUsPLQ5vbDPVIgG0CJrzKvrcc+b+4zIgPgtfsaWq9ockjHFQi3ycvlZK4TALOXO8ovQ6Q==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.0.tgz", - "integrity": "sha512-x6Oxr1GIi0ZtNiT6jbw+JVcbEi3UQgF7mMmkrgfL4mfchOwXtWSHKTSSPnwoJWJfXYa0Vy1n8NElWNTGAqoWFw==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.0.tgz", - "integrity": "sha512-SnMH9ngI+ipGh3kqQ8+mDtWunirwmhQnQeZkEq9e/9Xsgjf04OetqrqRHKM1HmJtG2qMUJbyXFJ0F81TPuT+3g==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.0.tgz", - "integrity": "sha512-VSQwTX9EmdbotArtA1J67X8964oQfe0xHb32x4tu+JqTR+wOHyG6wGzPMdXH2oKAp6rdd7BzqxUXXf0J+ypHlw==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.0.tgz", - "integrity": "sha512-xBCP0nnpO0q4tsytXkvIwWFINtbFRyVY5gxa1zB0vlFtqYR9lNhrOwH3CBrks3kkeaePOXd611+8sjdUtrLnXA==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.0.tgz", - "integrity": "sha512-NutwDafqhGxqPj/eiUixJq9ImS/0sgx6gqlD7jRndCvQ2Q8AvDdu1+xKcGWGNnhcDsNM/n1avf1e62OG1GaqJg==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.0.tgz", - "integrity": "sha512-zNaxaO+Kl/xNz02E9QlcVz0pT4MjkXGDLb25qxtAzyJL15aU0+VjjbIZAYWctG59dvggNIUNDWgoBeVTKB9xLg==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.0.tgz", - "integrity": "sha512-FFOGGWwTCRMu9W7MF496Urefxtuo2lttxF1vwS+1rIRsKvuLrWhVaVTj3T8sf2EBL6gtJbmh4TYlizS+obnGKA==", - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "requires": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "@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" - } - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/node": { - "version": "18.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.7.tgz", - "integrity": "sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ==", - "dev": true - }, - "@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "@types/react": { - "version": "18.0.24", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.24.tgz", - "integrity": "sha512-wRJWT6ouziGUy+9uX0aW4YOJxAY0bG6/AOk5AW5QSvZqI7dk6VBIbXvcVgIw/W5Jrl24f77df98GEKTJGOLx7Q==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.0.8", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.8.tgz", - "integrity": "sha512-C3GYO0HLaOkk9dDAz3Dl4sbe4AKUGTCfFIZsz3n/82dPNN8Du533HzKatDxeUYWu24wJgMP1xICqkWk1YOLOIw==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "@typescript-eslint/parser": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.41.0.tgz", - "integrity": "sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.41.0", - "@typescript-eslint/types": "5.41.0", - "@typescript-eslint/typescript-estree": "5.41.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.41.0.tgz", - "integrity": "sha512-xOxPJCnuktUkY2xoEZBKXO5DBCugFzjrVndKdUnyQr3+9aDWZReKq9MhaoVnbL+maVwWJu/N0SEtrtEUNb62QQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.41.0", - "@typescript-eslint/visitor-keys": "5.41.0" - } - }, - "@typescript-eslint/types": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.41.0.tgz", - "integrity": "sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.41.0.tgz", - "integrity": "sha512-SlzFYRwFSvswzDSQ/zPkIWcHv8O5y42YUskko9c4ki+fV6HATsTODUPbRbcGDFYP86gaJL5xohUEytvyNNcXWg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.41.0", - "@typescript-eslint/visitor-keys": "5.41.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.41.0.tgz", - "integrity": "sha512-vilqeHj267v8uzzakbm13HkPMl7cbYpKVjgFWZPIOHIJHZtinvypUhJ5xBXfWYg4eFKqztbMMpOgFpT9Gfx4fw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.41.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "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", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", - "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "axe-core": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.0.tgz", - "integrity": "sha512-4+rr8eQ7+XXS5nZrKcMO/AikHL0hVqy+lHWAnE3xdHl+aguag8SOQ6eEqLexwLNWgXIMfunGuD3ON1/6Kyet0A==", - "dev": true - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001426", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz", - "integrity": "sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "core-js-pure": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.0.tgz", - "integrity": "sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz", - "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - } - }, - "eslint-config-next": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.0.tgz", - "integrity": "sha512-y2nqWS2tycWySdVhb+rhp6CuDmDazGySqkzzQZf3UTyfHyC7og1m5m/AtMFwCo5mtvDqvw1BENin52kV9733lg==", - "dev": true, - "requires": { - "@next/eslint-plugin-next": "13.0.0", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.21.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "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" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "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 - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "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" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/next/-/next-13.0.0.tgz", - "integrity": "sha512-puH1WGM6rGeFOoFdXXYfUxN9Sgi4LMytCV5HkQJvVUOhHfC1DoVqOfvzaEteyp6P04IW+gbtK2Q9pInVSrltPA==", - "requires": { - "@next/env": "13.0.0", - "@next/swc-android-arm-eabi": "13.0.0", - "@next/swc-android-arm64": "13.0.0", - "@next/swc-darwin-arm64": "13.0.0", - "@next/swc-darwin-x64": "13.0.0", - "@next/swc-freebsd-x64": "13.0.0", - "@next/swc-linux-arm-gnueabihf": "13.0.0", - "@next/swc-linux-arm64-gnu": "13.0.0", - "@next/swc-linux-arm64-musl": "13.0.0", - "@next/swc-linux-x64-gnu": "13.0.0", - "@next/swc-linux-x64-musl": "13.0.0", - "@next/swc-win32-arm64-msvc": "13.0.0", - "@next/swc-win32-ia32-msvc": "13.0.0", - "@next/swc-win32-x64-msvc": "13.0.0", - "@swc/helpers": "0.4.11", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.0", - "use-sync-external-store": "1.2.0" - } - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "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" - } - }, - "p-locate": { - "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" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "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 - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "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" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "server-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", - "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "styled-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.0.tgz", - "integrity": "sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==", - "requires": { - "client-only": "0.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "requires": {} - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "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==", - "dev": true - } - } -} diff --git a/examples/caching/with-nextjs-13/package.json b/examples/caching/with-nextjs-13/package.json deleted file mode 100644 index a1f779bf10539..0000000000000 --- a/examples/caching/with-nextjs-13/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "with-nextjs-13", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "@supabase/supabase-js": "^2.0.4", - "next": "13.0.0", - "react": "18.2.0", - "react-dom": "18.2.0", - "server-only": "^0.0.1" - }, - "devDependencies": { - "@types/node": "18.11.7", - "@types/react": "18.0.24", - "@types/react-dom": "18.0.8", - "eslint": "8.26.0", - "eslint-config-next": "13.0.0", - "typescript": "4.8.4" - } -} diff --git a/examples/caching/with-nextjs-13/pages/api/hello.ts b/examples/caching/with-nextjs-13/pages/api/hello.ts deleted file mode 100644 index f8bcc7e5caed1..0000000000000 --- a/examples/caching/with-nextjs-13/pages/api/hello.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import type { NextApiRequest, NextApiResponse } from 'next' - -type Data = { - name: string -} - -export default function handler( - req: NextApiRequest, - res: NextApiResponse -) { - res.status(200).json({ name: 'John Doe' }) -} diff --git a/examples/caching/with-nextjs-13/public/favicon.ico b/examples/caching/with-nextjs-13/public/favicon.ico deleted file mode 100644 index 718d6fea4835e..0000000000000 Binary files a/examples/caching/with-nextjs-13/public/favicon.ico and /dev/null differ diff --git a/examples/caching/with-nextjs-13/public/vercel.svg b/examples/caching/with-nextjs-13/public/vercel.svg deleted file mode 100644 index fbf0e25a651c2..0000000000000 --- a/examples/caching/with-nextjs-13/public/vercel.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/caching/with-nextjs-13/supabase/.gitignore b/examples/caching/with-nextjs-13/supabase/.gitignore deleted file mode 100644 index 773c7c3e0a15a..0000000000000 --- a/examples/caching/with-nextjs-13/supabase/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Supabase -.branches -.temp diff --git a/examples/caching/with-nextjs-13/supabase/config.toml b/examples/caching/with-nextjs-13/supabase/config.toml deleted file mode 100644 index f294277043275..0000000000000 --- a/examples/caching/with-nextjs-13/supabase/config.toml +++ /dev/null @@ -1,71 +0,0 @@ -# A string used to distinguish different Supabase projects on the same host. Defaults to the working -# directory name when running `supabase init`. -project_id = "with-nextjs-13" - -[api] -# Port to use for the API URL. -port = 54321 -# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API -# endpoints. public and storage are always included. -schemas = [] -# Extra schemas to add to the search_path of every request. -extra_search_path = ["extensions"] -# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size -# for accidental or malicious requests. -max_rows = 1000 - -[db] -# Port to use for the local database URL. -port = 54322 -# The database major version to use. This has to be the same as your remote database's. Run `SHOW -# server_version;` on the remote database to check. -major_version = 14 - -[studio] -# Port to use for Supabase Studio. -port = 54323 - -# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they -# are monitored, and you can view the emails that would have been sent from the web interface. -[inbucket] -# Port to use for the email testing server web interface. -port = 54324 -smtp_port = 54325 -pop3_port = 54326 - -[storage] -# The maximum file size allowed (e.g. "5MB", "500KB"). -file_size_limit = "50MiB" - -[auth] -# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used -# in emails. -site_url = "http://localhost:3000" -# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. -additional_redirect_urls = ["https://localhost:3000"] -# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one -# week). -jwt_expiry = 3600 -# Allow/disallow new user signups to your project. -enable_signup = true - -[auth.email] -# Allow/disallow new user signups via email to your project. -enable_signup = true -# If enabled, a user will be required to confirm any email change on both the old, and new email -# addresses. If disabled, only the new email is required to confirm. -double_confirm_changes = true -# If enabled, users need to confirm their email address before signing in. -enable_confirmations = false - -# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, -# `discord`, `facebook`, `github`, `gitlab`, `google`, `twitch`, `twitter`, `slack`, `spotify`. -[auth.external.apple] -enabled = false -client_id = "" -secret = "" -# Overrides the default auth redirectUrl. -redirect_uri = "" -# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, -# or any other third-party OIDC providers. -url = "" diff --git a/examples/caching/with-nextjs-13/supabase/migrations/20221028100232_init.sql b/examples/caching/with-nextjs-13/supabase/migrations/20221028100232_init.sql deleted file mode 100644 index 2bb0a7b08609c..0000000000000 --- a/examples/caching/with-nextjs-13/supabase/migrations/20221028100232_init.sql +++ /dev/null @@ -1,7 +0,0 @@ -create table if not exists articles ( - id uuid default gen_random_uuid() primary key, - created_at timestamp with time zone default timezone('utc'::text, now()) not null, - title text not null, - content text not null, - is_published bool default false not null -); \ No newline at end of file diff --git a/examples/caching/with-nextjs-13/supabase/seed.sql b/examples/caching/with-nextjs-13/supabase/seed.sql deleted file mode 100644 index 6e5c8504a7f2b..0000000000000 --- a/examples/caching/with-nextjs-13/supabase/seed.sql +++ /dev/null @@ -1,5 +0,0 @@ -insert into articles(title, content) -values - ('First blog', 'This is my very first blog'), - ('Second blog', 'I am really enjoying writing blogs'), - ('Third blog', 'Okay, this is getting hard to maintain'); \ No newline at end of file diff --git a/examples/caching/with-nextjs-13/tsconfig.json b/examples/caching/with-nextjs-13/tsconfig.json deleted file mode 100644 index 6ef5cd577f6ed..0000000000000 --- a/examples/caching/with-nextjs-13/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ] - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/examples/edge-functions/.github/workflows/deploy.yaml b/examples/edge-functions/.github/workflows/deploy.yaml deleted file mode 100644 index 054fe9b8e4002..0000000000000 --- a/examples/edge-functions/.github/workflows/deploy.yaml +++ /dev/null @@ -1,24 +0,0 @@ -name: Deploy Function - -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - deploy: - runs-on: ubuntu-latest - - env: - SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} - PROJECT_ID: zdtdtxajzydjqzuktnqx - - steps: - - uses: actions/checkout@v3 - - - uses: supabase/setup-cli@v1 - with: - version: latest - - - run: supabase functions deploy github-action-deploy --project-ref $PROJECT_ID diff --git a/examples/edge-functions/README.md b/examples/edge-functions/README.md deleted file mode 100644 index a0abd49456022..0000000000000 --- a/examples/edge-functions/README.md +++ /dev/null @@ -1,109 +0,0 @@ -# Supabase Edge Function Examples - -## What are Supabase Edge Functions? - -[Supabase Edge Functions](https://supabase.com/edge-functions) are written in TypeScript, run via Deno, and deployed with the Supabase CLI. Please [download](https://github.com/supabase/cli#install-the-cli) the latest version of the Supabase CLI, or [upgrade](https://github.com/supabase/cli#install-the-cli) it if you have it already installed. - -## Example Functions - -We're constantly adding new Function Examples, [check our docs](https://supabase.com/docs/guides/functions#examples) for a complete list! - -## Develop locally - -- Run `supabase start` (make sure your Docker daemon is running.) -- Run `cp ./supabase/.env.local.example ./supabase/.env.local` to create your local `.env` file. -- Set the required variables for the corresponding edge functions in the `.env.local` file. -- Run `supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt` -- Run the CURL command in the example function, or use the [invoke method](https://supabase.com/docs/reference/javascript/invoke) on the Supabase client or use the test client [app](./app/). - -## Test Client - -This example includes a create-react-app in the [`./app/`](./app/) directory which you can use as a sort of postman to make test requests both locally and to your deployed functions. - -### Test locally - -- `cd app` -- `npm install` -- `npm start` - -Note: when testing locally, the select dropdown doesn't have any effect, and invoke simply calls whatever function is currently served by the CLI. - -## Deploy - -- Generate access token and log in to CLI - - Navigate to https://supabase.com/dashboard/account/tokens - - Click "Generate New Token" - - Copy newly created token - - Run `supabase login` - - Input your token when prompted -- Link your project - - Within your project root run `supabase link --project-ref your-project-ref` -- Set up your secrets - - - Run `supabase secrets set --env-file ./supabase/.env.local` to set the environment variables. - - (This is assuming your local and production secrets are the same. The recommended way is to create a separate `.env` file for storing production secrets, and then use it to set the environment variables while deploying.) - - - You can run `supabase secrets list` to check that it worked and also to see what other env vars are set by default. - -- Deploy the function - - Within your project root run `supabase functions deploy your-function-name` -- In your [`./app/.env`](./app/.env) file remove the `SUPA_FUNCTION_LOCALHOST` variable and restart your Expo app. - -### Test deployed functions - -This example includes a create-react-app in the [`./app/`](./app/) directory which you can use as a sort of postman to make test requests both locally and to your deployed functions. - -- `cd app` -- `cp .env.example .env` -- Fill in your env vars from https://supabase.com/dashboard/project/_/settings/api -- `npm install` -- `npm start` - -### Deploy via GitHub Actions - -This example includes a [deploy GitHub Action](./.github/workflows/deploy.yaml) that automatically deploys your Supabase Edge Functions when pushing to or merging into the main branch. - -You can use the [`setup-cli` GitHub Action](https://github.com/marketplace/actions/supabase-cli-action) to run Supabase CLI commands in your GitHub Actions, for example to deploy a Supabase Edge Function: - -```yaml -name: Deploy Function - -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - deploy: - runs-on: ubuntu-latest - - env: - SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} - PROJECT_ID: your-project-id - - steps: - - uses: actions/checkout@v3 - - - uses: supabase/setup-cli@v1 - with: - version: latest - - - run: supabase functions deploy --project-ref $PROJECT_ID -``` - -Since Supabase CLI [v1.62.0](https://github.com/supabase/cli/releases/tag/v1.62.0) you can deploy all functions with a single command. - -Individual function configuration like [JWT verification](/docs/reference/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/reference/cli/config#functions.function_name.import_map) can be set via the `config.toml` file. - -```toml -[functions.hello-world] -verify_jwt = false -``` - -## 👁⚡️👁 - -\o/ That's it, you can now invoke your Supabase Function via the [`supabase-js`](https://supabase.com/docs/reference/javascript/invoke) and [`supabase-dart`](https://supabase.com/docs/reference/dart/invoke) client libraries. (More client libraries coming soon. Check the [supabase-community](https://github.com/supabase-community#client-libraries) org for details). - -For more info on Supabase Functions, check out the [docs](https://supabase.com/docs/guides/functions) and the [examples](https://github.com/supabase/supabase/tree/master/examples/edge-functions). diff --git a/examples/edge-functions/app/.env.example b/examples/edge-functions/app/.env.example deleted file mode 100644 index a0fb63f466b75..0000000000000 --- a/examples/edge-functions/app/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -# Get these from your Dashboard: https://supabase.com/dashboard/project/_/settings/api -REACT_APP_SUPABASE_URL= -REACT_APP_SUPABASE_ANON_KEY= \ No newline at end of file diff --git a/examples/edge-functions/app/.gitignore b/examples/edge-functions/app/.gitignore deleted file mode 100644 index 0802cb4c07594..0000000000000 --- a/examples/edge-functions/app/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* -*lock.json diff --git a/examples/edge-functions/app/README.md b/examples/edge-functions/app/README.md deleted file mode 100644 index 58beeaccd87e2..0000000000000 --- a/examples/edge-functions/app/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Getting Started with Create React App - -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -## Available Scripts - -In the project directory, you can run: - -### `npm start` - -Runs the app in the development mode.\ -Open [http://localhost:3000](http://localhost:3000) to view it in your browser. - -The page will reload when you make changes.\ -You may also see any lint errors in the console. - -### `npm test` - -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `npm run build` - -Builds the app for production to the `build` folder.\ -It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.\ -Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `npm run eject` - -**Note: this is a one-way operation. Once you `eject`, you can't go back!** - -If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. - -You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). - -### Code Splitting - -This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) - -### Analyzing the Bundle Size - -This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) - -### Making a Progressive Web App - -This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) - -### Advanced Configuration - -This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) - -### Deployment - -This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) - -### `npm run build` fails to minify - -This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/examples/edge-functions/app/package.json b/examples/edge-functions/app/package.json deleted file mode 100644 index df1f7c4643d73..0000000000000 --- a/examples/edge-functions/app/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "app", - "version": "0.1.0", - "private": true, - "dependencies": { - "@supabase/auth-ui-react": "^0.2.1", - "@supabase/supabase-js": "^2.0.0", - "@testing-library/jest-dom": "^5.16.3", - "@testing-library/react": "^12.1.4", - "@testing-library/user-event": "^13.5.0", - "react": "^18.0.0", - "react-dom": "^18.0.0", - "react-json-editor-ajrm": "^2.5.13", - "react-scripts": "5.0.0" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - "autoprefixer": "^10.4.4", - "postcss": "^8.4.12", - "tailwindcss": "^3.0.23" - } -} diff --git a/examples/edge-functions/app/postcss.config.js b/examples/edge-functions/app/postcss.config.js deleted file mode 100644 index 33ad091d26d8a..0000000000000 --- a/examples/edge-functions/app/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/examples/edge-functions/app/public/favicon.ico b/examples/edge-functions/app/public/favicon.ico deleted file mode 100644 index a11777cc471a4..0000000000000 Binary files a/examples/edge-functions/app/public/favicon.ico and /dev/null differ diff --git a/examples/edge-functions/app/public/index.html b/examples/edge-functions/app/public/index.html deleted file mode 100644 index da27e950acccc..0000000000000 --- a/examples/edge-functions/app/public/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - Supabase Edge Functions Test Client - - - -
    - - - diff --git a/examples/edge-functions/app/public/logo192.png b/examples/edge-functions/app/public/logo192.png deleted file mode 100644 index fc44b0a3796c0..0000000000000 Binary files a/examples/edge-functions/app/public/logo192.png and /dev/null differ diff --git a/examples/edge-functions/app/public/logo512.png b/examples/edge-functions/app/public/logo512.png deleted file mode 100644 index a4e47a6545bc1..0000000000000 Binary files a/examples/edge-functions/app/public/logo512.png and /dev/null differ diff --git a/examples/edge-functions/app/public/manifest.json b/examples/edge-functions/app/public/manifest.json deleted file mode 100644 index 080d6c77ac21b..0000000000000 --- a/examples/edge-functions/app/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/examples/edge-functions/app/public/robots.txt b/examples/edge-functions/app/public/robots.txt deleted file mode 100644 index e9e57dc4d41b9..0000000000000 --- a/examples/edge-functions/app/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/examples/edge-functions/app/src/App.js b/examples/edge-functions/app/src/App.js deleted file mode 100644 index 89f57cfe09def..0000000000000 --- a/examples/edge-functions/app/src/App.js +++ /dev/null @@ -1,100 +0,0 @@ -import React, { useState } from 'react' -import { Auth, ThemeSupa } from '@supabase/auth-ui-react' -import JSONInput from 'react-json-editor-ajrm' -import locale from 'react-json-editor-ajrm/locale/en' -import { supabase } from './utils/supabaseClient' -import { functionsList } from './functionsList' - -const sampleObject = { name: 'world' } - -function App() { - const { user } = Auth.useUser() - const [supaFunction, setSupaFunction] = useState(functionsList[0]) - const [requestJson, setRequestJson] = useState(sampleObject) - const [responseJson, setResponseJson] = useState({}) - - const invokeFunction = async () => { - setResponseJson({ loading: true }) - const { data, error } = await supabase.functions.invoke(supaFunction, { - body: JSON.stringify(requestJson), - }) - if (error) alert(error) - setResponseJson(data) - } - - return ( -
    -

    Supabase Egde Functions Test Client

    -
    -
    -

    Request

    -

    Function

    - -

    - Note: when using locally, this selection doesn't have any effect and the function that's - currently being served via the CLI is called instead. -

    -

    Body

    - setRequestJson(jsObject)} - placeholder={sampleObject} - locale={locale} - height="100" - width="100%" - /> - -
    -
    -

    Response

    -
    {JSON.stringify(responseJson, null, 2)}
    -
    -
    -

    Log in to see RLS in action

    - {user ? ( -
    -

    {`Logged in as ${user.email}`}

    - -
    - ) : ( - - )} -
    -
    -
    - ) -} - -export default App diff --git a/examples/edge-functions/app/src/functionsList.js b/examples/edge-functions/app/src/functionsList.js deleted file mode 100644 index a3f5ba13780b4..0000000000000 --- a/examples/edge-functions/app/src/functionsList.js +++ /dev/null @@ -1,6 +0,0 @@ -export const functionsList = [ - 'local: Whatever function is currently served by the CLI', - 'browser-with-cors', - 'select-from-table-with-auth-rls', - 'send-email-smtp', -] diff --git a/examples/edge-functions/app/src/index.css b/examples/edge-functions/app/src/index.css deleted file mode 100644 index b5c61c956711f..0000000000000 --- a/examples/edge-functions/app/src/index.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/examples/edge-functions/app/src/index.js b/examples/edge-functions/app/src/index.js deleted file mode 100644 index 36515be3349f6..0000000000000 --- a/examples/edge-functions/app/src/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom' -import './index.css' -import App from './App' -import { Auth } from '@supabase/auth-ui-react' -import { supabase } from './utils/supabaseClient' - -ReactDOM.render( - - - - - , - document.getElementById('root') -) diff --git a/examples/edge-functions/app/src/utils/supabaseClient.js b/examples/edge-functions/app/src/utils/supabaseClient.js deleted file mode 100644 index d369fec80dcb2..0000000000000 --- a/examples/edge-functions/app/src/utils/supabaseClient.js +++ /dev/null @@ -1,7 +0,0 @@ -import { createClient } from '@supabase/supabase-js' - -export const supabase = createClient( - process.env.REACT_APP_SUPABASE_URL ?? 'http://localhost:54321', - process.env.REACT_APP_SUPABASE_ANON_KEY ?? - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24ifQ.625_WdcF3KHqz5amU0x2X5WWHP-OEs_4qj0ssLNHzTs' -) diff --git a/examples/edge-functions/app/tailwind.config.js b/examples/edge-functions/app/tailwind.config.js deleted file mode 100644 index 5259866eb49ad..0000000000000 --- a/examples/edge-functions/app/tailwind.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - content: ['./src/**/*.{js,jsx,ts,tsx}'], - theme: { - extend: {}, - }, - plugins: [], -} diff --git a/examples/edge-functions/edge-functions.code-workspace b/examples/edge-functions/edge-functions.code-workspace deleted file mode 100644 index d3e694fd61c58..0000000000000 --- a/examples/edge-functions/edge-functions.code-workspace +++ /dev/null @@ -1,24 +0,0 @@ -{ - "folders": [ - { - "name": "project-root", - "path": "./" - }, - { - "name": "test-client", - "path": "app" - }, - { - "name": "supabase-functions", - "path": "supabase/functions" - } - ], - "settings": { - "files.exclude": { - "node_modules/": true, - "app/": true, - "supabase/functions/": true - }, - "deno.importMap": "./supabase/functions/import_map.json" - } -} diff --git a/examples/edge-functions/supabase/.env.local.example b/examples/edge-functions/supabase/.env.local.example deleted file mode 100644 index a15cee971a711..0000000000000 --- a/examples/edge-functions/supabase/.env.local.example +++ /dev/null @@ -1,48 +0,0 @@ -# cloudflare-turnstile -CLOUDFLARE_TURNSTILE_SECRET_KEY=your_secret_key - -# discord-bot -DISCORD_PUBLIC_KEY= - -# location -IPINFO_TOKEN="your https://ipinfo.io token" - -# openai -OPENAI_API_KEY="" - -# postgres-on-the-edge & kysely-postgres -DB_HOSTNAME= -DB_PASSWORD= -DB_SSL_CERT="-----BEGIN CERTIFICATE----- -GET YOUR CERT FROM YOUR PROJECT DASHBOARD -https://supabase.com/dashboard/project/_/settings/database ------END CERTIFICATE-----" - -# puppeteer -PUPPETEER_BROWSERLESS_IO_TOKEN= - -# send-email-resend -RESEND_API_KEY= - -# send-email-smtp -SMTP_HOSTNAME="your.hostname.com" -SMTP_PORT="2587" -SMTP_USERNAME="your_username" -SMTP_PASSWORD="your_password" -SMTP_FROM="no-reply@example.com" - -# stripe-webhooks -STRIPE_API_KEY="" -STRIPE_WEBHOOK_SIGNING_SECRET="" - -# telegram-bot -TELEGRAM_BOT_TOKEN="get it from https://t.me/BotFather" -FUNCTION_SECRET="random secret" - -# upstash-redis-counter -UPSTASH_REDIS_REST_URL= -UPSTASH_REDIS_REST_TOKEN= - -# connect-supabase - https://supabase.com/docs/guides/platform/oauth-apps/publish-an-oauth-app -SUPA_CONNECT_CLIENT_ID= -SUPA_CONNECT_CLIENT_SECRET= diff --git a/examples/edge-functions/supabase/config.toml b/examples/edge-functions/supabase/config.toml deleted file mode 100644 index efec0060d276b..0000000000000 --- a/examples/edge-functions/supabase/config.toml +++ /dev/null @@ -1,60 +0,0 @@ -# A string used to distinguish different Supabase projects on the same host. Defaults to the working -# directory name when running `supabase init`. -project_id = "edge-functions" - -[api] -# Port to use for the API URL. -port = 54321 -# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API -# endpoints. public and storage are always included. -schemas = [] -# Extra schemas to add to the search_path of every request. -extra_search_path = ["extensions"] -# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size -# for accidental or malicious requests. -max_rows = 1000 - -[db] -# Port to use for the local database URL. -port = 54322 -# The database major version to use. This has to be the same as your remote database's. Run `SHOW -# server_version;` on the remote database to check. -major_version = 14 - -[studio] -# Port to use for Supabase Studio. -port = 54323 - -# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they -# are monitored, and you can view the emails that would have been sent from the web interface. -[inbucket] -# Port to use for the email testing server web interface. -port = 54324 - -[auth] -# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used -# in emails. -site_url = "http://localhost:3000" -# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. -additional_redirect_urls = ["https://localhost:3000"] -# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one -# week). -jwt_expiry = 3600 -# Allow/disallow new user signups to your project. -enable_signup = true - -[auth.email] -# Allow/disallow new user signups via email to your project. -enable_signup = true -# If enabled, a user will be required to confirm any email change on both the old, and new email -# addresses. If disabled, only the new email is required to confirm. -double_confirm_changes = true -# If enabled, users need to confirm their email address before signing in. -enable_confirmations = false - -# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, -# `discord`, `facebook`, `github`, `gitlab`, `google`, `twitch`, `twitter`, `slack`, `spotify`. -[auth.external.apple] -enabled = false -client_id = "" -secret = "" diff --git a/examples/edge-functions/supabase/functions/.gitignore b/examples/edge-functions/supabase/functions/.gitignore deleted file mode 100644 index f0f1cccf7f156..0000000000000 --- a/examples/edge-functions/supabase/functions/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!.vscode \ No newline at end of file diff --git a/examples/edge-functions/supabase/functions/.vscode/settings.json b/examples/edge-functions/supabase/functions/.vscode/settings.json deleted file mode 100644 index 1d800e858b277..0000000000000 --- a/examples/edge-functions/supabase/functions/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "deno.enable": true, - "deno.unstable": true, - "deno.importMap": "./import_map.json" -} diff --git a/examples/edge-functions/supabase/functions/_shared/cors.ts b/examples/edge-functions/supabase/functions/_shared/cors.ts deleted file mode 100644 index 2ac4d89b14aff..0000000000000 --- a/examples/edge-functions/supabase/functions/_shared/cors.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const corsHeaders = { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type', -} diff --git a/examples/edge-functions/supabase/functions/browser-with-cors/index.ts b/examples/edge-functions/supabase/functions/browser-with-cors/index.ts deleted file mode 100644 index d022ef6035f3a..0000000000000 --- a/examples/edge-functions/supabase/functions/browser-with-cors/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' -import { corsHeaders } from '../_shared/cors.ts' - -console.log(`Function "browser-with-cors" up and running!`) - -serve(async (req) => { - // This is needed if you're planning to invoke your function from a browser. - if (req.method === 'OPTIONS') { - return new Response('ok', { headers: corsHeaders }) - } - - try { - const { name } = await req.json() - const data = { - message: `Hello ${name}!`, - } - - return new Response(JSON.stringify(data), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 200, - }) - } catch (error) { - return new Response(JSON.stringify({ error: error.message }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 400, - }) - } -}) - -// To invoke: -// curl -i --location --request POST 'http://localhost:54321/functions/v1/browser-with-cors' \ -// --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24ifQ.625_WdcF3KHqz5amU0x2X5WWHP-OEs_4qj0ssLNHzTs' \ -// --header 'Content-Type: application/json' \ -// --data '{"name":"Functions"}' diff --git a/examples/edge-functions/supabase/functions/cloudflare-turnstile/README.md b/examples/edge-functions/supabase/functions/cloudflare-turnstile/README.md deleted file mode 100644 index 3ec3bf986bcaf..0000000000000 --- a/examples/edge-functions/supabase/functions/cloudflare-turnstile/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Cloudflare Turnstile - -Turnstile is Cloudflare's CAPTCHA alternative: https://developers.cloudflare.com/turnstile/get-started/ - -## Watch the Video Tutorial - -[![video tutorial](https://img.youtube.com/vi/OwW0znboh60/0.jpg)](https://www.youtube.com/watch?v=OwW0znboh60) - -## Setup - -- Follow these steps to set up a new site: https://developers.cloudflare.com/turnstile/get-started/ -- Add the Cloudflare Turnstile widget to your site: https://developers.cloudflare.com/turnstile/get-started/client-side-rendering/ - -## Deploy the server-side validation Edge Functions - -- https://developers.cloudflare.com/turnstile/get-started/server-side-validation/ - -```bash -supabase functions deploy cloudflare-turnstile -supabase secrets set CLOUDFLARE_TURNSTILE_SECRET_KEY=your_secret_key -``` - -## Invoke the function from your site - -```js -const { data, error } = await supabase.functions.invoke('cloudflare-turnstile', { - body: { token }, -}) -``` diff --git a/examples/edge-functions/supabase/functions/cloudflare-turnstile/index.ts b/examples/edge-functions/supabase/functions/cloudflare-turnstile/index.ts deleted file mode 100644 index 02e440f34600f..0000000000000 --- a/examples/edge-functions/supabase/functions/cloudflare-turnstile/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' -import { corsHeaders } from '../_shared/cors.ts' - -console.log(`Function "cloudflare-turnstile" up and running!`) - -function ips(req: Request) { - return req.headers.get('x-forwarded-for')?.split(/\s*,\s*/) -} - -serve(async (req) => { - // This is needed if you're planning to invoke your function from a browser. - if (req.method === 'OPTIONS') { - return new Response('ok', { headers: corsHeaders }) - } - - try { - const { token } = await req.json() - if (!token) throw new Error('Missing token!') - - const clientIps = ips(req) || [''] - - // Validate the token by calling the - // "/siteverify" API endpoint. - const formData = new FormData() - formData.append('secret', Deno.env.get('CLOUDFLARE_TURNSTILE_SECRET_KEY') ?? '') - formData.append('response', token) - formData.append('remoteip', clientIps[0]) - - const url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify' - const result = await fetch(url, { - body: formData, - method: 'POST', - }) - - const outcome = await result.json() - console.log(outcome) - if (outcome.success) { - return new Response(JSON.stringify(outcome), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 200, - }) - } - - throw new Error('Turnstile validation failed!') - } catch (error) { - return new Response(JSON.stringify({ error: error.message }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 400, - }) - } -}) - -// To invoke: -// curl -i --location --request POST 'http://localhost:54321/functions/v1/cloudflare-turnstile' \ -// --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0' \ -// --header 'Content-Type: application/json' \ -// --data '{"token":"cf-turnstile-response"}' diff --git a/examples/edge-functions/supabase/functions/connect-supabase/README.md b/examples/edge-functions/supabase/functions/connect-supabase/README.md deleted file mode 100644 index f35038192b36a..0000000000000 --- a/examples/edge-functions/supabase/functions/connect-supabase/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# Build a Supabase Marketplace Integration - -Supabase offers an [OAuth2 connection flow](https://supabase.com/docs/guides/platform/oauth-apps/authorize-an-oauth-app) and a [Management API](https://supabase.com/docs/reference/api/introduction) allowing you to build Supabase Marketplace Integrations that connect to our users' hosted Supabase projects, making it more convenient than ever to create scalabale backends programmatically and tap into the extensive pool of Supabase users. - -## Setup - -1. Follow the [steps in the docs](https://supabase.com/docs/guides/platform/oauth-apps/publish-an-oauth-app) to create an OAuth App. -1. Set `SUPA_CONNECT_CLIENT_ID` and `SUPA_CONNECT_CLIENT_SECRET` in your `.env.local` file as shown in the [`.env.local.example` file](../../.env.local.example). - -## Connect to Supabase using OAuth2 - -This example showcases and end-to-end OAuth2 connection flow with [PKCE](https://supabase.com/blog/supabase-auth-sso-pkce#introducing-pkce), with the following steps: - -1. Create authorization URL with PKCE codeVerifier. -1. Redirect user to Supabase to authorize your application to connect to their Supabase account. -1. User gets redirected to the callback route, where we exchange the code in the URL for `access_token` and `refresh_token`. -1. We use the `access_token` to retrieve a list of the user's projects using the [`supabase-management-js` library](https://github.com/supabase-community/supabase-management-js). - -## Run locally - -```bash -supabase functions serve connect-supabase --no-verify-jwt --env-file ./supabase/.env.local -``` - -Navigate to http://localhost:54321/functions/v1/connect-supabase - -## Deploy to Supabase Edge Functions - -```bash -supabase functions deploy connect-supabase --no-verify-jwt -supabase secrets set --env-file ./supabase/.env.local -``` diff --git a/examples/edge-functions/supabase/functions/connect-supabase/index.ts b/examples/edge-functions/supabase/functions/connect-supabase/index.ts deleted file mode 100644 index b126a5906aa88..0000000000000 --- a/examples/edge-functions/supabase/functions/connect-supabase/index.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Application, Router } from 'https://deno.land/x/oak@v11.1.0/mod.ts' -import { Session, CookieStore } from 'https://deno.land/x/oak_sessions@v4.1.9/mod.ts' -import { OAuth2Client } from 'https://deno.land/x/oauth2_client@v1.0.2/mod.ts' -import { SupabaseManagementAPI } from 'https://esm.sh/supabase-management-js@0.1.2' - -const config = { - clientId: Deno.env.get('SUPA_CONNECT_CLIENT_ID')!, - clientSecret: Deno.env.get('SUPA_CONNECT_CLIENT_SECRET')!, - authorizationEndpointUri: 'https://api.supabase.com/v1/oauth/authorize', - tokenUri: 'https://api.supabase.com/v1/oauth/token', - redirectUri: 'http://localhost:54321/functions/v1/connect-supabase/oauth2/callback', - defaults: { - scope: 'all', - }, -} -const oauth2Client = new OAuth2Client(config) - -type AppState = { - session: Session -} - -const router = new Router() -// Note: path should be prefixed with function name. -router.get('/connect-supabase', (ctx) => { - ctx.response.body = - 'This is an example of implementing https://supabase.com/docs/guides/integrations/oauth-apps/authorize-an-oauth-app . Navigate to /login to start the OAuth flow.' -}) -router.get('/connect-supabase/login', async (ctx) => { - // Construct the URL for the authorization redirect and get a PKCE codeVerifier. - const { uri, codeVerifier } = await oauth2Client.code.getAuthorizationUri() - console.log(uri.toString()) - - // Store both the state and codeVerifier in the user session. - ctx.state.session.flash('codeVerifier', codeVerifier) - - // Redirect the user to the authorization endpoint. - ctx.response.redirect(uri) -}) -router.get('/connect-supabase/oauth2/callback', async (ctx) => { - // Make sure the codeVerifier is present for the user's session. - const codeVerifier = ctx.state.session.get('codeVerifier') as string - console.log('codeVerifier', codeVerifier) - if (!codeVerifier) throw new Error('No codeVerifier!') - - // Exchange the authorization code for an access token. - const tokens = await fetch(config.tokenUri, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - Accept: 'application/json', - Authorization: `Basic ${btoa(`${config.clientId}:${config.clientSecret}`)}`, - }, - body: new URLSearchParams({ - grant_type: 'authorization_code', - code: ctx.request.url.searchParams.get('code') || '', - redirect_uri: config.redirectUri, - code_verifier: codeVerifier, - }), - }).then((res) => res.json()) - console.log('tokens', tokens) - // TODO: Make sure to store the tokens in your DB for future use. - - // Use the access token to make an authenticated API request. - const supaManagementClient = new SupabaseManagementAPI({ - accessToken: tokens.accessToken ?? tokens.access_token, - }) - const projects = await supaManagementClient.getProjects() - - ctx.response.body = `Hello, these are your projects: \n ${JSON.stringify( - projects?.map((p) => ({ id: p.id, name: p.name })), - null, - 2 - )}!` -}) - -const app = new Application() -// cookie name for the store is configurable, default is: {sessionDataCookieName: 'session_data'} -const store = new CookieStore('very-secret-key') -// @ts-ignore TODO: open issue at https://github.com/jcs224/oak_sessions -app.use(Session.initMiddleware(store)) -app.use(router.routes()) -app.use(router.allowedMethods()) -await app.listen({ port: 8000 }) diff --git a/examples/edge-functions/supabase/functions/discord-bot/README.md b/examples/edge-functions/supabase/functions/discord-bot/README.md deleted file mode 100644 index 7d66deb798c57..0000000000000 --- a/examples/edge-functions/supabase/functions/discord-bot/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# Discord Slash Command Bot - -## Helpful docs - -- https://deno.com/deploy/docs/tutorial-discord-slash -- https://discord.com/developers/docs/interactions/application-commands#slash-commands - -## Watch the Video Tutorial - -[![video tutorial](https://img.youtube.com/vi/J24Bvo_m7DM/0.jpg)](https://www.youtube.com/watch?v=J24Bvo_m7DM) - -## Create an application on Discord Developer Portal - -1. Go to [https://discord.com/developers/applications](https://discord.com/developers/applications) (login using your discord account if required). -2. Click on **New Application** button available at left side of your profile picture. -3. Name your application and click on **Create**. -4. Go to **Bot** section, click on **Add Bot**, and finally on **Yes, do it!** to confirm. - -That's it. A new application is created which will hold our Slash Command. Don't close the tab as we need information from this application page throughout our development. - -Before we can write some code, we need to curl a discord endpoint to register a Slash Command in our app. - -Fill `DISCORD_BOT_TOKEN` with the token available in the **Bot** section and `CLIENT_ID` with the ID available on the **General Information** section of the page and run the command on your terminal. - -```bash -BOT_TOKEN='replace_me_with_bot_token' -CLIENT_ID='replace_me_with_client_id' -curl -X POST \ --H 'Content-Type: application/json' \ --H "Authorization: Bot $BOT_TOKEN" \ --d '{"name":"hello","description":"Greet a person","options":[{"name":"name","description":"The name of the person","type":3,"required":true}]}' \ -"https://discord.com/api/v8/applications/$CLIENT_ID/commands" -``` - -This will register a Slash Command named `hello` that accepts a parameter named `name` of type string. - -## Deploy the Slash Command Handler - -```bash -supabase functions deploy discord-bot --no-verify-jwt -supabase secrets set DISCORD_PUBLIC_KEY=your_public_key -``` - -Navigate to your Function details in the Supabase Dashboard to get your Endpoint URL. - -### Configure Discord application to use our URL as interactions endpoint URL - -1. Go back to your application (Greeter) page on Discord Developer Portal -2. Fill **INTERACTIONS ENDPOINT URL** field with the URL and click on **Save Changes**. - -The application is now ready. Let's proceed to the next section to install it. - -## Install the Slash Command on your Discord server - -So to use the `hello` Slash Command, we need to install our Greeter application on our Discord server. Here are the steps: - -1. Go to **OAuth2** section of the Discord application page on Discord Developer Portal -2. Select `applications.commands` scope and click on the **Copy** button below. -3. Now paste and visit the URL on your browser. Select your server and click on **Authorize**. - -Open Discord, type `/Promise` and press **Enter**. - -## Run locally - -```bash -supabase functions serve discord-bot --no-verify-jwt --env-file ./supabase/.env.local -ngrok http 54321 -``` diff --git a/examples/edge-functions/supabase/functions/discord-bot/index.ts b/examples/edge-functions/supabase/functions/discord-bot/index.ts deleted file mode 100644 index abbf5985f2d9b..0000000000000 --- a/examples/edge-functions/supabase/functions/discord-bot/index.ts +++ /dev/null @@ -1,98 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -// Sift is a small routing library that abstracts away details like starting a -// listener on a port, and provides a simple function (serve) that has an API -// to invoke a function for a specific path. -import { json, serve, validateRequest } from 'sift' -// TweetNaCl is a cryptography library that we use to verify requests -// from Discord. -import nacl from 'nacl' - -enum DiscordCommandType { - Ping = 1, - ApplicationCommand = 2, -} - -// For all requests to "/" endpoint, we want to invoke home() handler. -serve({ - '/discord-bot': home, -}) - -// The main logic of the Discord Slash Command is defined in this function. -async function home(request: Request) { - // validateRequest() ensures that a request is of POST method and - // has the following headers. - const { error } = await validateRequest(request, { - POST: { - headers: ['X-Signature-Ed25519', 'X-Signature-Timestamp'], - }, - }) - if (error) { - return json({ error: error.message }, { status: error.status }) - } - - // verifySignature() verifies if the request is coming from Discord. - // When the request's signature is not valid, we return a 401 and this is - // important as Discord sends invalid requests to test our verification. - const { valid, body } = await verifySignature(request) - if (!valid) { - return json( - { error: 'Invalid request' }, - { - status: 401, - } - ) - } - - const { type = 0, data = { options: [] } } = JSON.parse(body) - // Discord performs Ping interactions to test our application. - // Type 1 in a request implies a Ping interaction. - if (type === DiscordCommandType.Ping) { - return json({ - type: 1, // Type 1 in a response is a Pong interaction response type. - }) - } - - // Type 2 in a request is an ApplicationCommand interaction. - // It implies that a user has issued a command. - if (type === DiscordCommandType.ApplicationCommand) { - const { value } = data.options.find( - (option: { name: string; value: string }) => option.name === 'name' - ) - return json({ - // Type 4 responds with the below message retaining the user's - // input at the top. - type: 4, - data: { - content: `Hello, ${value}!`, - }, - }) - } - - // We will return a bad request error as a valid Discord request - // shouldn't reach here. - return json({ error: 'bad request' }, { status: 400 }) -} - -/** Verify whether the request is coming from Discord. */ -async function verifySignature(request: Request): Promise<{ valid: boolean; body: string }> { - const PUBLIC_KEY = Deno.env.get('DISCORD_PUBLIC_KEY')! - // Discord sends these headers with every request. - const signature = request.headers.get('X-Signature-Ed25519')! - const timestamp = request.headers.get('X-Signature-Timestamp')! - const body = await request.text() - const valid = nacl.sign.detached.verify( - new TextEncoder().encode(timestamp + body), - hexToUint8Array(signature), - hexToUint8Array(PUBLIC_KEY) - ) - - return { valid, body } -} - -/** Converts a hexadecimal string to Uint8Array. */ -function hexToUint8Array(hex: string) { - return new Uint8Array(hex.match(/.{1,2}/g)!.map((val) => parseInt(val, 16))) -} diff --git a/examples/edge-functions/supabase/functions/file-upload-storage/README.md b/examples/edge-functions/supabase/functions/file-upload-storage/README.md deleted file mode 100644 index 3d061d5d78e5a..0000000000000 --- a/examples/edge-functions/supabase/functions/file-upload-storage/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Upload files to Storage - -This example shows how to process `multipart/form-data` in an Edge Function. Then, upload files in the request to Supabase Storage and insert other fields as a record to a database table. diff --git a/examples/edge-functions/supabase/functions/file-upload-storage/index.ts b/examples/edge-functions/supabase/functions/file-upload-storage/index.ts deleted file mode 100644 index 208619a7b49df..0000000000000 --- a/examples/edge-functions/supabase/functions/file-upload-storage/index.ts +++ /dev/null @@ -1,66 +0,0 @@ -// This example shows how to use Edge Functions to read incoming multipart/form-data request, -// and write files to Supabase Storage and other fields to a database table. - -import { Application } from 'oak' -import { createClient } from '@supabase/supabase-js' - -const MB = 1024 * 1024 - -const app = new Application() - -app.use(async (ctx) => { - const body = ctx.request.body({ type: 'form-data' }) - const formData = await body.value.read({ - // Need to set the maxSize so files will be stored in memory. - // This is necessary as Edge Functions don't have disk write access. - // We are setting the max size as 10MB (an Edge Function has a max memory limit of 150MB) - // For more config options, check: https://deno.land/x/oak@v11.1.0/mod.ts?s=FormDataReadOptions - maxSize: 10 * MB, - }) - if (!formData.files || !formData.files.length) { - ctx.response.status = 400 - ctx.response.body = 'missing file' - return - } - - const supabaseClient = createClient( - // Supabase API URL - env var exported by default. - Deno.env.get('SUPABASE_URL')!, - // Supabase API ANON KEY - env var exported by default. - Deno.env.get('SUPABASE_ANON_KEY')! - ) - - //upload image to Storage - const file = formData.files[0] - const timestamp = +new Date() - const uploadName = `${file.name}-${timestamp}` - const { data: upload, error: uploadError } = await supabaseClient.storage - .from('images') - .upload(uploadName, file.content!.buffer, { - contentType: file.contentType, - cacheControl: '3600', - upsert: false, - }) - if (uploadError) { - console.error(uploadError) - ctx.response.status = 500 - ctx.response.body = 'Failed to upload the file' - return - } - - // insert record to messages table - const { error } = await supabaseClient - .from('comments') - .insert({ message: formData.fields!.message || '', image_path: upload.path }) - if (error) { - console.error(error) - ctx.response.status = 500 - ctx.response.body = 'Fail to add the record' - return - } - - ctx.response.status = 201 - ctx.response.body = 'Success!' -}) - -await app.listen({ port: 8000 }) diff --git a/examples/edge-functions/supabase/functions/get-tshirt-competition/README.md b/examples/edge-functions/supabase/functions/get-tshirt-competition/README.md deleted file mode 100644 index b83a049526c8e..0000000000000 --- a/examples/edge-functions/supabase/functions/get-tshirt-competition/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# GET T-Shirt competition - -To celebrate the support of GET requests in Supabase Edge Functions we're giving away some limited edition Functions Shirts! - -To win a Supabase Edge Functions T-Shirt, make a GET request to https://obuldanrptloktxcffvn.functions.supabase.co/get-tshirt-competition with your email address, your Twitter handle (optional), your t-shirt size (S-2XL) and the correct answer, e.g. - -```text -https://obuldanrptloktxcffvn.functions.supabase.co/get-tshirt-competition?email=testr@test.de&twitter=thorwebdev&size=2XL&answer=20 -``` - -You can read the functions source code to figure out the answer ;) - -Good luck trying to GET a T-Shirt! - -### Serve this function locally - -```bash -supabase functions serve --no-verify-jwt -``` - -Navigate to http://localhost:54321/functions/v1/get-tshirt-competition?email=testr@test.de&twitter=thorwebdev&size=2XL&answer=20 - -### Deploy this function - -```bash -supabase functions deploy --no-verify-jwt get-tshirt-competition -``` diff --git a/examples/edge-functions/supabase/functions/get-tshirt-competition/index.ts b/examples/edge-functions/supabase/functions/get-tshirt-competition/index.ts deleted file mode 100644 index 76b09b974c996..0000000000000 --- a/examples/edge-functions/supabase/functions/get-tshirt-competition/index.ts +++ /dev/null @@ -1,90 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' -import { createClient } from '@supabase/supabase-js' -import { corsHeaders } from '../_shared/cors.ts' - -console.log(`Function "get-tshirt-competition" up and running!`) - -function countEmailSegments(email: string): string { - const [localPart, domain] = email.split('@') - const [hostname, ...countryCodes] = domain.split('.') - return `${localPart.length}${hostname.length}${countryCodes.reduce((a, cc) => a + cc.length, '')}` -} - -function turnEmailToCount(email: string): string { - const [localPart, domain] = email.split('@') - const [hostname, ...countryCodes] = domain.split('.') - return `${localPart.length}@${hostname.length}${countryCodes.reduce( - (a, cc) => a + '.' + cc.length, - '' - )}` -} - -serve(async (req) => { - // This is needed if you're planning to invoke your function from a browser. - if (req.method === 'OPTIONS') { - return new Response('ok', { headers: corsHeaders }) - } - - try { - const url = new URL(req.url) - const email = url.searchParams.get('email') - const twitter = url.searchParams.get('twitter') - const size = url.searchParams.get('size') - const answer = url.searchParams.get('answer') - - if ( - !/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email ?? '') || - !answer || - !twitter || - !size - ) - throw new Error( - `Please provide valid 'email', 'twitter', 'size', and 'answer' params. HINT: https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/get-tshirt-competition/index.ts` - ) - - if (answer !== countEmailSegments(email!)) - throw new Error( - `Sorry, that's wrong, please try again! HINT: https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/get-tshirt-competition/index.ts` - ) - - const supabaseAdminClient = createClient( - // Supabase API URL - env var exported by default when deployed. - Deno.env.get('SUPABASE_URL') ?? '', - // Supabase API SERVICE ROLE KEY - env var exported by default when deployed. - Deno.env.get('SUPABASE_SERVICE_ROLE_KEY') ?? '' - ) - // Submit email to draw - const { error } = await supabaseAdminClient.from('get-tshirt-competition-2').upsert( - { - email, - twitter, - size, - }, - { onConflict: 'email' } - ) - if (error) { - console.log(error) - throw new Error(error.details) - } - - return new Response( - `Thanks for playing! ${turnEmailToCount(email!)} has been added to the draw \\o/`, - { - headers: { ...corsHeaders, 'Content-Type': 'text/plain' }, - status: 200, - } - ) - } catch (error) { - return new Response(JSON.stringify({ error: error.message }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 400, - }) - } -}) - -// To invoke: -// curl -i --location --request GET 'http://localhost:54321/functions/v1/get-tshirt-competition?email=testr@test.de&twitter=thorwebdev&size=2XL&answer=20' diff --git a/examples/edge-functions/supabase/functions/github-action-deploy/README.md b/examples/edge-functions/supabase/functions/github-action-deploy/README.md deleted file mode 100644 index a9d91966077fa..0000000000000 --- a/examples/edge-functions/supabase/functions/github-action-deploy/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# GitHub Actions Deploy - -This example includes a [deploy GitHub Action](./../../../.github/workflows/deploy.yaml) that automatically deploys your Supabase Edge Functions when pushing to or merging into the main branch. - -You can use the [`setup-cli` GitHub Action](https://github.com/marketplace/actions/supabase-cli-action) to run Supabase CLI commands in your GitHub Actions, for example to deploy a Supabase Edge Function: - -```yaml -name: Deploy Function - -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - deploy: - runs-on: ubuntu-latest - - env: - SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} - PROJECT_ID: zdtdtxajzydjqzuktnqx - - steps: - - uses: actions/checkout@v3 - - - uses: supabase/setup-cli@v1 - with: - version: latest - - - run: supabase functions deploy github-action-deploy --project-ref $PROJECT_ID -``` diff --git a/examples/edge-functions/supabase/functions/github-action-deploy/index.ts b/examples/edge-functions/supabase/functions/github-action-deploy/index.ts deleted file mode 100644 index 423445b160812..0000000000000 --- a/examples/edge-functions/supabase/functions/github-action-deploy/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' - -console.log('Hello from Functions!') - -serve((_req) => { - const data = { - message: `I was deployed via GitHub Actions!`, - } - - return new Response(JSON.stringify(data), { - headers: { 'Content-Type': 'application/json' }, - }) -}) - -// To invoke: http://localhost:54321/functions/v1/github-action-deploy diff --git a/examples/edge-functions/supabase/functions/huggingface-image-captioning/README.md b/examples/edge-functions/supabase/functions/huggingface-image-captioning/README.md deleted file mode 100644 index ae9492692b9d8..0000000000000 --- a/examples/edge-functions/supabase/functions/huggingface-image-captioning/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Image Captioning with Supabase Storage and Huggingface.js - -[Hugging Face](https://huggingface.co/) is the collaboration platform for the machine learning community. - -[Huggingface.js](https://huggingface.co/docs/huggingface.js/index) provides a convenient way to make calls to 100,000+ Machine Learning models, making it easy to incorporate AI functionality into your [Supabase Edge Functions](https://supabase.com/edge-functions). - -Putting this together with [Supabase Storage](https://supabase.com/storage) and [Database Webhooks](https://supabase.com/docs/guides/database/webhooks) we can easily put together a service that automatically generates captions for any image we upload to a storage bucket. - -## Setup - -1. Open your Supabase project dashboard or [create a new project](https://supabase.com/dashboard/projects). -2. [Create a new bucket](https://supabase.com/dashboard/project/_/storage/buckets) called `images`. -3. Generate TypeScript types from remote Database. -4. Create a new Database table called `image_caption`. - -- Create `id` column of type `uuid` which references `storage.objects.id`. -- Create a `caption` column of type `text`. - -5. Regenerate TypeScript types to include new `image_caption` table. -6. Deploy the function to Supabase: `supabase functions deploy huggingface-image-captioning`. -7. Create the Database Webhook in the [Supabase Dashboard](https://supabase.com/dashboard/project/_/database/hooks) to trigger the `huggingface-image-captioning` function anytime a record is added to the `storage.objects` table. - -## Generate TypeScript Types - -To generate the types.ts file for the storage and public schemas, run the following command in the terminal: - -```bash -supabase gen types typescript --project-id=your-project-ref --schema=storage,public > supabase/functions/huggingface-image-captioning/types.ts -``` diff --git a/examples/edge-functions/supabase/functions/huggingface-image-captioning/index.ts b/examples/edge-functions/supabase/functions/huggingface-image-captioning/index.ts deleted file mode 100644 index c13121c1f8bdd..0000000000000 --- a/examples/edge-functions/supabase/functions/huggingface-image-captioning/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' -import { HfInference } from 'https://esm.sh/@huggingface/inference@2.3.2' -import { createClient } from '@supabase/supabase-js' -import { Database } from './types.ts' - -console.log('Hello from `huggingface-image-captioning` function!') - -const hf = new HfInference(Deno.env.get('HUGGINGFACE_ACCESS_TOKEN')) - -type SoRecord = Database['storage']['Tables']['objects']['Row'] -interface WebhookPayload { - type: 'INSERT' | 'UPDATE' | 'DELETE' - table: string - record: SoRecord - schema: 'public' - old_record: null | SoRecord -} - -serve(async (req) => { - const payload: WebhookPayload = await req.json() - const soRecord = payload.record - const supabaseAdminClient = createClient( - // Supabase API URL - env var exported by default when deployed. - Deno.env.get('SUPABASE_URL') ?? '', - // Supabase API SERVICE ROLE KEY - env var exported by default when deployed. - Deno.env.get('SUPABASE_SERVICE_ROLE_KEY') ?? '' - ) - - // Construct image url from storage - const { data, error } = await supabaseAdminClient.storage - .from(soRecord.bucket_id!) - .createSignedUrl(soRecord.path_tokens!.join('/'), 60) - if (error) throw error - const { signedUrl } = data - - // Run image captioning with Huggingface - const imgDesc = await hf.imageToText({ - data: await (await fetch(signedUrl)).blob(), - model: 'nlpconnect/vit-gpt2-image-captioning', - }) - - // Store image caption in Database table - await supabaseAdminClient - .from('image_caption') - .insert({ id: soRecord.id!, caption: imgDesc.generated_text }) - .throwOnError() - - return new Response('ok') -}) diff --git a/examples/edge-functions/supabase/functions/huggingface-image-captioning/types.ts b/examples/edge-functions/supabase/functions/huggingface-image-captioning/types.ts deleted file mode 100644 index 1746c5e533555..0000000000000 --- a/examples/edge-functions/supabase/functions/huggingface-image-captioning/types.ts +++ /dev/null @@ -1,202 +0,0 @@ -export type Json = - | string - | number - | boolean - | null - | { [key: string]: Json } - | Json[]; - -export interface Database { - public: { - Tables: { - image_caption: { - Row: { - caption: string; - id: string; - }; - Insert: { - caption: string; - id: string; - }; - Update: { - caption?: string; - id?: string; - }; - }; - }; - Views: { - [_ in never]: never; - }; - Functions: { - [_ in never]: never; - }; - Enums: { - [_ in never]: never; - }; - CompositeTypes: { - [_ in never]: never; - }; - }; - storage: { - Tables: { - buckets: { - Row: { - allowed_mime_types: string[] | null; - avif_autodetection: boolean | null; - created_at: string | null; - file_size_limit: number | null; - id: string; - name: string; - owner: string | null; - public: boolean | null; - updated_at: string | null; - }; - Insert: { - allowed_mime_types?: string[] | null; - avif_autodetection?: boolean | null; - created_at?: string | null; - file_size_limit?: number | null; - id: string; - name: string; - owner?: string | null; - public?: boolean | null; - updated_at?: string | null; - }; - Update: { - allowed_mime_types?: string[] | null; - avif_autodetection?: boolean | null; - created_at?: string | null; - file_size_limit?: number | null; - id?: string; - name?: string; - owner?: string | null; - public?: boolean | null; - updated_at?: string | null; - }; - }; - migrations: { - Row: { - executed_at: string | null; - hash: string; - id: number; - name: string; - }; - Insert: { - executed_at?: string | null; - hash: string; - id: number; - name: string; - }; - Update: { - executed_at?: string | null; - hash?: string; - id?: number; - name?: string; - }; - }; - objects: { - Row: { - bucket_id: string | null; - created_at: string | null; - id: string; - last_accessed_at: string | null; - metadata: Json | null; - name: string | null; - owner: string | null; - path_tokens: string[] | null; - updated_at: string | null; - version: string | null; - }; - Insert: { - bucket_id?: string | null; - created_at?: string | null; - id?: string; - last_accessed_at?: string | null; - metadata?: Json | null; - name?: string | null; - owner?: string | null; - path_tokens?: string[] | null; - updated_at?: string | null; - version?: string | null; - }; - Update: { - bucket_id?: string | null; - created_at?: string | null; - id?: string; - last_accessed_at?: string | null; - metadata?: Json | null; - name?: string | null; - owner?: string | null; - path_tokens?: string[] | null; - updated_at?: string | null; - version?: string | null; - }; - }; - }; - Views: { - [_ in never]: never; - }; - Functions: { - can_insert_object: { - Args: { - bucketid: string; - name: string; - owner: string; - metadata: Json; - }; - Returns: undefined; - }; - extension: { - Args: { - name: string; - }; - Returns: string; - }; - filename: { - Args: { - name: string; - }; - Returns: string; - }; - foldername: { - Args: { - name: string; - }; - Returns: unknown; - }; - get_size_by_bucket: { - Args: Record; - Returns: { - size: number; - bucket_id: string; - }[]; - }; - search: { - Args: { - prefix: string; - bucketname: string; - limits?: number; - levels?: number; - offsets?: number; - search?: string; - sortcolumn?: string; - sortorder?: string; - }; - Returns: { - name: string; - id: string; - updated_at: string; - created_at: string; - last_accessed_at: string; - metadata: Json; - }[]; - }; - }; - Enums: { - [_ in never]: never; - }; - CompositeTypes: { - [_ in never]: never; - }; - }; -} diff --git a/examples/edge-functions/supabase/functions/import_map.json b/examples/edge-functions/supabase/functions/import_map.json deleted file mode 100644 index f703de7b56c39..0000000000000 --- a/examples/edge-functions/supabase/functions/import_map.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "imports": { - "denomailer": "https://deno.land/x/denomailer@0.12.0/mod.ts", - "nacl": "https://cdn.skypack.dev/tweetnacl@v1.0.3?dts", - "oak": "https://deno.land/x/oak@v11.1.0/mod.ts", - "og_edge": "https://deno.land/x/og_edge@0.0.4/mod.ts", - "openai": "https://esm.sh/openai@3.1.0", - "grammy": "https://deno.land/x/grammy@v1.8.3/mod.ts", - "react": "https://esm.sh/react@18.2.0", - "std/server": "https://deno.land/std@0.177.0/http/server.ts", - "stripe": "https://esm.sh/stripe@11.1.0?target=deno", - "sift": "https://deno.land/x/sift@0.6.0/mod.ts", - "@supabase/supabase-js": "https://esm.sh/@supabase/supabase-js@2.7.1", - "postgres": "https://deno.land/x/postgres@v0.17.0/mod.ts", - "puppeteer": "https://deno.land/x/puppeteer@16.2.0/mod.ts", - "React": "https://esm.sh/react@18.2.0?deno-std=0.177.0", - "upstash_redis": "https://deno.land/x/upstash_redis@v1.19.3/mod.ts", - "xhr_polyfill": "https://deno.land/x/xhr@0.3.0/mod.ts", - "kysely": "https://esm.sh/kysely@0.23.4" - } -} diff --git a/examples/edge-functions/supabase/functions/kysely-postgres/DenoPostgresDriver.ts b/examples/edge-functions/supabase/functions/kysely-postgres/DenoPostgresDriver.ts deleted file mode 100644 index 970e2f2f625a5..0000000000000 --- a/examples/edge-functions/supabase/functions/kysely-postgres/DenoPostgresDriver.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { - CompiledQuery, - DatabaseConnection, - Driver, - PostgresCursorConstructor, - QueryResult, - TransactionSettings, -} from 'https://esm.sh/kysely@0.23.4' -import { freeze, isFunction } from 'https://esm.sh/kysely@0.23.4/dist/esm/util/object-utils.js' -import { extendStackTrace } from 'https://esm.sh/kysely@0.23.4/dist/esm/util/stack-trace-utils.js' -import { Pool, PoolClient } from 'https://deno.land/x/postgres@v0.17.0/mod.ts' - -export interface PostgresDialectConfig { - pool: Pool | (() => Promise) - cursor?: PostgresCursorConstructor - onCreateConnection?: (connection: DatabaseConnection) => Promise -} - -const PRIVATE_RELEASE_METHOD = Symbol() - -export class PostgresDriver implements Driver { - readonly #config: PostgresDialectConfig - readonly #connections = new WeakMap() - #pool?: Pool - - constructor(config: PostgresDialectConfig) { - this.#config = freeze({ ...config }) - } - - async init(): Promise { - this.#pool = isFunction(this.#config.pool) ? await this.#config.pool() : this.#config.pool - } - - async acquireConnection(): Promise { - const client = await this.#pool!.connect() - let connection = this.#connections.get(client) - - if (!connection) { - connection = new PostgresConnection(client, { - cursor: this.#config.cursor ?? null, - }) - this.#connections.set(client, connection) - - // The driver must take care of calling `onCreateConnection` when a new - // connection is created. The `pg` module doesn't provide an async hook - // for the connection creation. We need to call the method explicitly. - if (this.#config?.onCreateConnection) { - await this.#config.onCreateConnection(connection) - } - } - - return connection - } - - async beginTransaction( - connection: DatabaseConnection, - settings: TransactionSettings - ): Promise { - if (settings.isolationLevel) { - await connection.executeQuery( - CompiledQuery.raw(`start transaction isolation level ${settings.isolationLevel}`) - ) - } else { - await connection.executeQuery(CompiledQuery.raw('begin')) - } - } - - async commitTransaction(connection: DatabaseConnection): Promise { - await connection.executeQuery(CompiledQuery.raw('commit')) - } - - async rollbackTransaction(connection: DatabaseConnection): Promise { - await connection.executeQuery(CompiledQuery.raw('rollback')) - } - - async releaseConnection(connection: PostgresConnection): Promise { - connection[PRIVATE_RELEASE_METHOD]() - } - - async destroy(): Promise { - if (this.#pool) { - const pool = this.#pool - this.#pool = undefined - await pool.end() - } - } -} - -interface PostgresConnectionOptions { - cursor: PostgresCursorConstructor | null -} - -class PostgresConnection implements DatabaseConnection { - #client: PoolClient - #options: PostgresConnectionOptions - - constructor(client: PoolClient, options: PostgresConnectionOptions) { - this.#client = client - this.#options = options - } - - async executeQuery(compiledQuery: CompiledQuery): Promise> { - try { - const result = await this.#client.queryObject(compiledQuery.sql, [ - ...compiledQuery.parameters, - ]) - - if ( - result.command === 'INSERT' || - result.command === 'UPDATE' || - result.command === 'DELETE' - ) { - const numAffectedRows = BigInt(result.rowCount || 0) - - return { - // TODO: remove. - numUpdatedOrDeletedRows: numAffectedRows, - numAffectedRows, - rows: result.rows ?? [], - } as any - } - - return { - rows: result.rows ?? [], - } - } catch (err) { - throw extendStackTrace(err, new Error()) - } - } - - async *streamQuery( - _compiledQuery: CompiledQuery, - chunkSize: number - ): AsyncIterableIterator> { - if (!this.#options.cursor) { - throw new Error( - "'cursor' is not present in your postgres dialect config. It's required to make streaming work in postgres." - ) - } - - if (!Number.isInteger(chunkSize) || chunkSize <= 0) { - throw new Error('chunkSize must be a positive integer') - } - - // stream not available - return null - } - - [PRIVATE_RELEASE_METHOD](): void { - this.#client.release() - } -} diff --git a/examples/edge-functions/supabase/functions/kysely-postgres/index.ts b/examples/edge-functions/supabase/functions/kysely-postgres/index.ts deleted file mode 100644 index 4ce01728ddba3..0000000000000 --- a/examples/edge-functions/supabase/functions/kysely-postgres/index.ts +++ /dev/null @@ -1,90 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' -import { Pool } from 'postgres' -import { - Kysely, - Generated, - PostgresAdapter, - PostgresIntrospector, - PostgresQueryCompiler, -} from 'kysely' -import { PostgresDriver } from './DenoPostgresDriver.ts' - -console.log(`Function "kysely-postgres" up and running!`) - -interface AnimalTable { - id: Generated - animal: string - created_at: Date -} - -// Keys of this interface are table names. -interface Database { - animals: AnimalTable -} - -// Create a database pool with one connection. -const pool = new Pool( - { - tls: { caCertificates: [Deno.env.get('DB_SSL_CERT')!] }, - database: 'postgres', - hostname: Deno.env.get('DB_HOSTNAME'), - user: 'postgres', - port: 5432, - password: Deno.env.get('DB_PASSWORD'), - }, - 1 -) - -// You'd create one of these when you start your app. -const db = new Kysely({ - dialect: { - createAdapter() { - return new PostgresAdapter() - }, - createDriver() { - // You need a driver to be able to execute queries. In this example - // we use the dummy driver that never does anything. - return new PostgresDriver({ pool }) - }, - createIntrospector(db: Kysely) { - return new PostgresIntrospector(db) - }, - createQueryCompiler() { - return new PostgresQueryCompiler() - }, - }, -}) - -serve(async (_req) => { - try { - // Run a query - const animals = await db.selectFrom('animals').select(['id', 'animal', 'created_at']).execute() - - // Neat, it's properly typed \o/ - console.log(animals[0].created_at.getFullYear()) - - // Encode the result as pretty printed JSON - const body = JSON.stringify( - animals, - (key, value) => (typeof value === 'bigint' ? value.toString() : value), - 2 - ) - - // Return the response with the correct content type header - return new Response(body, { - status: 200, - headers: { - 'Content-Type': 'application/json; charset=utf-8', - }, - }) - } catch (err) { - console.error(err) - return new Response(String(err?.message ?? err), { status: 500 }) - } -}) - -// To invoke: navigate to http://localhost:54321/functions/v1/kysely-postgres diff --git a/examples/edge-functions/supabase/functions/location/README.md b/examples/edge-functions/supabase/functions/location/README.md deleted file mode 100644 index de3010f4440bb..0000000000000 --- a/examples/edge-functions/supabase/functions/location/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Get User Location - -This example shows how you can get user location based on the IP provided in X-Forwarded-For header in a request. - -You will need to signup for an account in https://ipinfo.io and provide it as `IPINFO_TOKEN` environment variable ([learn how to set environment variables to your functions](https://supabase.com/docs/guides/functions#secrets-and-environment-variables)). - -## Develop locally - -```bash -supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt -``` - -Navigate to http://localhost:54321/functions/v1/location - -## Deploy - -```bash -supabase functions deploy location --no-verify-jwt -``` diff --git a/examples/edge-functions/supabase/functions/location/index.ts b/examples/edge-functions/supabase/functions/location/index.ts deleted file mode 100644 index cda85ab78370c..0000000000000 --- a/examples/edge-functions/supabase/functions/location/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' - -function ips(req: Request) { - return req.headers.get('x-forwarded-for')?.split(/\s*,\s*/) -} - -serve(async (req) => { - const clientIps = ips(req) || [''] - const res = await fetch( - `https://ipinfo.io/${clientIps[0]}?token=${Deno.env.get('IPINFO_TOKEN')}`, - { - headers: { 'Content-Type': 'application/json' }, - } - ) - if (res.ok) { - const { city, country } = await res.json() - - return new Response(JSON.stringify(`You're accessing from ${city}, ${country}`), { - headers: { 'Content-Type': 'application/json' }, - }) - } else { - return new Response(await res.text(), { - status: 400, - }) - } -}) diff --git a/examples/edge-functions/supabase/functions/oak-server/README.md b/examples/edge-functions/supabase/functions/oak-server/README.md deleted file mode 100644 index ed2795cfc71f8..0000000000000 --- a/examples/edge-functions/supabase/functions/oak-server/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Writing functions using Oak Server Middleware - -This example shows how you can write functions using Oak server middleware (https://oakserver.github.io/oak/) - -## Run locally - -```bash -supabase functions serve --no-verify-jwt -``` - -Use cURL or Postman to make a POST request to http://localhost:54321/functions/v1/oak-server. - -``` - curl --location --request POST 'http://localhost:54321/functions/v1/oak-server' \ ---header 'Authorization: Bearer YOUR_TOKEN' \ ---header 'Content-Type: application/json' \ ---data-raw '{ "name": "John Doe" }' -``` - -## Deploy - -```bash -supabase functions deploy oak-server --no-verify-jwt -``` diff --git a/examples/edge-functions/supabase/functions/oak-server/index.ts b/examples/edge-functions/supabase/functions/oak-server/index.ts deleted file mode 100644 index 965da32e4a06a..0000000000000 --- a/examples/edge-functions/supabase/functions/oak-server/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Application, Router } from 'oak' - -const router = new Router() -router - // Note: path should be prefixed with function name - .get('/oak-server', (context) => { - context.response.body = 'This is an example Oak server running on Edge Functions!' - }) - .post('/oak-server/greet', async (context) => { - // Note: request body will be streamed to the function as chunks, set limit to 0 to fully read it. - const result = context.request.body({ type: 'json', limit: 0 }) - const body = await result.value - const name = body.name || 'you' - - context.response.body = { msg: `Hey ${name}!` } - }) - .get('/oak-server/redirect', (context) => { - context.response.redirect('https://www.example.com') - }) - -const app = new Application() -app.use(router.routes()) -app.use(router.allowedMethods()) - -await app.listen({ port: 8000 }) diff --git a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/README.md b/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/README.md deleted file mode 100644 index 05158fd957eb4..0000000000000 --- a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Open Graph (OG) Image Generation with Supabase Storage CDN Caching - -Generate Open Graph images with Deno and Supabase Edge Functions and cache the generated image with Supabase Storage CDN. - -- Docs: https://deno.land/x/og_edge@0.0.2 -- Examples: https://vercel.com/docs/concepts/functions/edge-functions/og-image-examples -- Demo: https://obuldanrptloktxcffvn.functions.supabase.co/launchweek-ticket-og?ticketNumber=1234&username=thorwebdev&name=Thor%20%E9%9B%B7%E7%A5%9E%20Schaeff - -## Run locally - -```bash -supabase functions serve --no-verify-jwt -``` - -Navigate to http://localhost:54321/functions/v1/og-image-with-storage-cdn?ticketNumber=3524&username=thorwebdev&name=Thor%20%E9%9B%B7%E7%A5%9E%20Schaeff - -## Deploy - -```bash -supabase functions deploy og-image-with-storage-cdn --no-verify-jwt -``` diff --git a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/handler.tsx b/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/handler.tsx deleted file mode 100644 index 202684370ea75..0000000000000 --- a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/handler.tsx +++ /dev/null @@ -1,223 +0,0 @@ -import React from 'React' -import { ImageResponse } from 'og_edge' -import { createClient } from '@supabase/supabase-js' -import { corsHeaders } from '../_shared/cors.ts' - -const STORAGE_URL = 'https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/lw6' -const BACKGROUND_IMAGE_STD = `${STORAGE_URL}/lw6_ticket_regular.png` -const BACKGROUND_IMAGE_GOLDEN = `${STORAGE_URL}/lw6_ticket_gold.png` -const SUPA_CHECKMARK = `${STORAGE_URL}/supaverified.png` -const SUPA_CHECKMARK_GOLD = `${STORAGE_URL}/supaverified_gold.png?v=3` - -// Load custom font -const FONT_URL = `${STORAGE_URL}/CircularStd-Book.otf` -const font = fetch(new URL(FONT_URL, import.meta.url)).then((res) => res.arrayBuffer()) - -export async function handler(req: Request) { - const url = new URL(req.url) - const ticketNumber = url.searchParams.get('ticketNumber') - const username = url.searchParams.get('username') ?? url.searchParams.get('amp;username') - const name = url.searchParams.get('name') ?? url.searchParams.get('amp;name') - const golden = url.searchParams.get('golden') ?? url.searchParams.get('amp;golden') - - if (!username || !ticketNumber || !name) - return new Response(JSON.stringify({ error: 'missing params' }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 400, - }) - - try { - // Try to get image from Supabase Storage CDN. - const storageResponse = await fetch(`${STORAGE_URL}/tickets/${username}.png?v=3`) - if (storageResponse.ok) return storageResponse - - // Else, generate image ad upload to storage. - const fontData = await font - const numDigits = `${Number(ticketNumber)}`.length - const prefix = `00000000`.slice(numDigits) - - const generatedImage = new ImageResponse( - ( - <> -
    - {/* Background image */} - - {/* GitHub Avatar image */} - - {/* Name & username */} -
    -
    -

    - {name} -

    -
    - {/* Username and supaverified checkmark */} -
    - {`@${username}`} - - - -
    -
    - {/* Date */} -

    - December 12th 2022 -

    - {/* URL */} -

    - supabase.com/launch-week -

    -
    - {/* Ticket No */} -
    -

    - {`No ${prefix}${ticketNumber}`} -

    -
    - - ), - { - width: 1200, - height: 630, - fonts: [ - { - name: 'Circular', - data: fontData, - style: 'normal', - }, - ], - headers: { - 'content-type': 'image/png', - 'cache-control': 'public, max-age=31536000, s-maxage=31536000, no-transform, immutable', - 'cdn-cache-control': 'max-age=31536000', - }, - } - ) - - const supabaseAdminClient = createClient( - // Supabase API URL - env var exported by default when deployed. - Deno.env.get('SUPABASE_URL') ?? '', - // Supabase API SERVICE ROLE KEY - env var exported by default when deployed. - Deno.env.get('SUPABASE_SERVICE_ROLE_KEY') ?? '' - ) - - // Upload image to storage. - const { error } = await supabaseAdminClient.storage - .from('images') - .upload(`lw6/tickets/${username}.png`, generatedImage.body!, { - contentType: 'image/png', - cacheControl: '31536000', - upsert: false, - }) - if (error) throw error - - return await fetch(`${STORAGE_URL}/tickets/${username}.png?v=3`) - } catch (error) { - return new Response(JSON.stringify({ error: error.message }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 400, - }) - } -} diff --git a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/index.ts b/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/index.ts deleted file mode 100644 index 0cf64b6e5524a..0000000000000 --- a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' - -import { handler } from './handler.tsx' - -console.log(`Function "og-image-with-storage-cdn" up and running!`) - -serve(handler) diff --git a/examples/edge-functions/supabase/functions/openai/README.md b/examples/edge-functions/supabase/functions/openai/README.md deleted file mode 100644 index 33894bacb4fe7..0000000000000 --- a/examples/edge-functions/supabase/functions/openai/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# openai - -## Setup env vars - -```bash -cp supabase/.env.local.example supabase/.env.local -``` - -## Run locally - -```bash -supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt -``` - -Use cURL or Postman to make a POST request to http://localhost:54321/functions/v1/openai. - -```bash -curl -i --location --request POST http://localhost:54321/functions/v1/openai \ - --header 'Content-Type: application/json' \ - --data '{"query":"What is Supabase?"}' -``` - -## Deploy - -```bash -supabase functions deploy --no-verify-jwt openai -supabase secrets set --env-file ./supabase/.env.local -``` diff --git a/examples/edge-functions/supabase/functions/openai/index.ts b/examples/edge-functions/supabase/functions/openai/index.ts deleted file mode 100644 index a7418d73e19d6..0000000000000 --- a/examples/edge-functions/supabase/functions/openai/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import 'xhr_polyfill' -import { serve } from 'std/server' -import { CreateCompletionRequest } from 'openai' - -serve(async (req) => { - const { query } = await req.json() - - const completionConfig: CreateCompletionRequest = { - model: 'text-davinci-003', - prompt: query, - max_tokens: 256, - temperature: 0, - stream: true, - } - - return fetch('https://api.openai.com/v1/completions', { - method: 'POST', - headers: { - Authorization: `Bearer ${Deno.env.get('OPENAI_API_KEY')}`, - 'Content-Type': 'application/json', - }, - body: JSON.stringify(completionConfig), - }) -}) diff --git a/examples/edge-functions/supabase/functions/opengraph/README.md b/examples/edge-functions/supabase/functions/opengraph/README.md deleted file mode 100644 index c5112bd75037f..0000000000000 --- a/examples/edge-functions/supabase/functions/opengraph/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Open Graph Image Generation - -Generate Open Graph images with Deno and Supabase Edge Functions, no framework needed. This is a fork of the awesome [@vercel/og](https://www.npmjs.com/package/@vercel/og), ported to run on Deno. - -- Docs: https://deno.land/x/og_edge@0.0.2 - -## Run locally - -```bash -supabase functions serve --no-verify-jwt -``` - -Navigate to http://localhost:54321/functions/v1/opengraph - -## Deploy - -```bash -supabase functions deploy opengraph --no-verify-jwt -``` diff --git a/examples/edge-functions/supabase/functions/opengraph/handler.tsx b/examples/edge-functions/supabase/functions/opengraph/handler.tsx deleted file mode 100644 index d1bbcd5b2c23e..0000000000000 --- a/examples/edge-functions/supabase/functions/opengraph/handler.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'React' -import { ImageResponse } from 'og_edge' - -export function handler(req: Request) { - return new ImageResponse( - ( -
    - NICE! 🔥 -
    - ), - { - width: 1200, - height: 630, - // Supported options: 'twemoji', 'blobmoji', 'noto', 'openmoji', 'fluent', 'fluentFlat' - // Default to 'twemoji' - emoji: 'twemoji', - } - ) -} diff --git a/examples/edge-functions/supabase/functions/opengraph/index.ts b/examples/edge-functions/supabase/functions/opengraph/index.ts deleted file mode 100644 index 0a928de50a7f0..0000000000000 --- a/examples/edge-functions/supabase/functions/opengraph/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' - -import { handler } from './handler.tsx' - -console.log(`Function "opengraph" up and running!`) - -serve(handler) diff --git a/examples/edge-functions/supabase/functions/postgres-on-the-edge/.env.example b/examples/edge-functions/supabase/functions/postgres-on-the-edge/.env.example deleted file mode 100644 index 638351bc2c8da..0000000000000 --- a/examples/edge-functions/supabase/functions/postgres-on-the-edge/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -#Use PolyScale connection string with application_name parameter to get code-free database caching -DATABASE_URL="postgresql:/DB_USERNAME:DB_PASSWORD@psedge.global:5432/postgres?application_name=POLYSCALE_CACHE_ID" \ No newline at end of file diff --git a/examples/edge-functions/supabase/functions/postgres-on-the-edge/README.md b/examples/edge-functions/supabase/functions/postgres-on-the-edge/README.md deleted file mode 100644 index d2c0e1ce8ada6..0000000000000 --- a/examples/edge-functions/supabase/functions/postgres-on-the-edge/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# postgres-on-the-edge - -This function allows you to access your Supabase database directly via TCP from an edge function. - -You can add a global cache to your database for fast access to your data, globally by simply connecting your Supabase database to [PolyScale](https://polyscale.ai). - -## Setup -1. Rename `.env.example` to `.env` -2. Insert Supabase database connection string for `DATABASE_URL` in `.env` file -3. (Optional) Create PolyScale cache - see [instructions](https://supabase.com/partners/integrations/polyscale) for adding a PolyScale cache. -4. Replace `DATABASE_URL` with PolyScale connection string. - -## Deploy - -1. Run `supabase functions deploy --no-verify-jwt postgres-on-the-edge` -2. Run `supabase secrets set --env-file supabase/functions/postgres-on-the-edge/.env` - -Learn more about creating this function [here](https://www.youtube.com/watch?v=cl7EuF1-RsY). \ No newline at end of file diff --git a/examples/edge-functions/supabase/functions/postgres-on-the-edge/index.ts b/examples/edge-functions/supabase/functions/postgres-on-the-edge/index.ts deleted file mode 100644 index 2c950dfef4a2d..0000000000000 --- a/examples/edge-functions/supabase/functions/postgres-on-the-edge/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Pool } from 'postgres' -import { serve } from 'std/server' - -// Create a database pool with one connection. -const pool = new Pool( - { - tls: { enabled: false }, - database: 'postgres', - hostname: Deno.env.get('DB_HOSTNAME'), - user: 'postgres', - port: 5432, - password: Deno.env.get('DB_PASSWORD'), - }, - 1 -) - -serve(async (_req) => { - try { - // Grab a connection from the pool - const connection = await pool.connect() - - try { - // Run a query - const result = await connection.queryObject`SELECT * FROM animals` - const animals = result.rows // [{ id: 1, name: "Lion" }, ...] - - // Encode the result as pretty printed JSON - const body = JSON.stringify( - animals, - (_key, value) => (typeof value === 'bigint' ? value.toString() : value), - 2 - ) - - // Return the response with the correct content type header - return new Response(body, { - status: 200, - headers: { - 'Content-Type': 'application/json; charset=utf-8', - }, - }) - } finally { - // Release the connection back into the pool - connection.release() - } - } catch (err) { - console.error(err) - return new Response(String(err?.message ?? err), { status: 500 }) - } -}) diff --git a/examples/edge-functions/supabase/functions/puppeteer/README.md b/examples/edge-functions/supabase/functions/puppeteer/README.md deleted file mode 100644 index 57e99a7478193..0000000000000 --- a/examples/edge-functions/supabase/functions/puppeteer/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Using Puppeteer - -This example shows how you can use Puppeteer and a headless-browser to generate screenshots of a web page. Pass the `url` of the web page as a query string. - -Since Edge Functions cannot run a Headless Browser instance due to resource constraints, you will need to use a hosted browser service like https://browserless.io. - -## Develop locally - -```bash -supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt -``` - -Navigate to http://localhost:54321/functions/v1/puppeteer - -## Deploy - -```bash -supabase functions deploy puppeteer --no-verify-jwt -``` diff --git a/examples/edge-functions/supabase/functions/puppeteer/index.ts b/examples/edge-functions/supabase/functions/puppeteer/index.ts deleted file mode 100644 index 72efb56a723f0..0000000000000 --- a/examples/edge-functions/supabase/functions/puppeteer/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { serve } from 'std/server' -import puppeteer from 'puppeteer' - -serve(async (req) => { - try { - console.log(`wss://chrome.browserless.io?token=${Deno.env.get('PUPPETEER_BROWSERLESS_IO_KEY')}`) - // Visit browserless.io to get your free API token - const browser = await puppeteer.connect({ - browserWSEndpoint: `wss://chrome.browserless.io?token=${Deno.env.get( - 'PUPPETEER_BROWSERLESS_IO_KEY' - )}`, - }) - const page = await browser.newPage() - - const url = new URL(req.url).searchParams.get('url') || 'http://www.example.com' - - await page.goto(url) - const screenshot = await page.screenshot() - - return new Response(screenshot, { headers: { 'Content-Type': 'image/png' } }) - } catch (e) { - console.error(e) - return new Response(JSON.stringify({ error: e.message }), { - headers: { 'Content-Type': 'application/json' }, - status: 500, - }) - } -}) diff --git a/examples/edge-functions/supabase/functions/read-storage/index.ts b/examples/edge-functions/supabase/functions/read-storage/index.ts deleted file mode 100644 index c32ccfd91bc4e..0000000000000 --- a/examples/edge-functions/supabase/functions/read-storage/index.ts +++ /dev/null @@ -1,53 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' -import { createClient } from '@supabase/supabase-js' - -const corsHeaders = { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey', -} - -serve(async (req) => { - // read a text file from storage and print its contents - // This is needed if you're planning to invoke your function from a browser. - if (req.method === 'OPTIONS') { - return new Response('ok', { headers: corsHeaders }) - } - - try { - // Create a Supabase client with the Auth context of the logged in user. - const supabaseClient = createClient( - // Supabase API URL - env var exported by default. - Deno.env.get('SUPABASE_URL') ?? '', - // Supabase API ANON KEY - env var exported by default. - Deno.env.get('SUPABASE_ANON_KEY') ?? '', - // Create client with Auth context of the user that called the function. - // This way your row-level-security (RLS) policies are applied. - { global: { headers: { Authorization: req.headers.get('Authorization')! } } } - ) - - const { data, error } = await supabaseClient.storage.from('my-bucket').download('sample.txt') - if (error) throw error - - // file contents are returned as a blob, we can convert it to utf-8 text by calling text() method. - const contents = await data.text() - - // prints out the contents of the file - console.log(contents) - - return new Response(JSON.stringify({ contents }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 200, - }) - } catch (error) { - console.error(error) - - return new Response(JSON.stringify({ error: error.message }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 400, - }) - } -}) diff --git a/examples/edge-functions/supabase/functions/restful-tasks/index.ts b/examples/edge-functions/supabase/functions/restful-tasks/index.ts deleted file mode 100644 index eea5219a07423..0000000000000 --- a/examples/edge-functions/supabase/functions/restful-tasks/index.ts +++ /dev/null @@ -1,122 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' -import { createClient, SupabaseClient } from '@supabase/supabase-js' - -const corsHeaders = { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey', -} - -interface Task { - name: string - status: number -} - -async function getTask(supabaseClient: SupabaseClient, id: string) { - const { data: task, error } = await supabaseClient.from('tasks').select('*').eq('id', id) - if (error) throw error - - return new Response(JSON.stringify({ task }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 200, - }) -} - -async function getAllTasks(supabaseClient: SupabaseClient) { - const { data: tasks, error } = await supabaseClient.from('tasks').select('*') - if (error) throw error - - return new Response(JSON.stringify({ tasks }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 200, - }) -} - -async function deleteTask(supabaseClient: SupabaseClient, id: string) { - const { error } = await supabaseClient.from('tasks').delete().eq('id', id) - if (error) throw error - - return new Response(JSON.stringify({}), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 200, - }) -} - -async function updateTask(supabaseClient: SupabaseClient, id: string, task: Task) { - const { error } = await supabaseClient.from('tasks').update(task).eq('id', id) - if (error) throw error - - return new Response(JSON.stringify({ task }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 200, - }) -} - -async function createTask(supabaseClient: SupabaseClient, task: Task) { - const { error } = await supabaseClient.from('tasks').insert(task) - if (error) throw error - - return new Response(JSON.stringify({ task }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 200, - }) -} - -serve(async (req) => { - const { url, method } = req - - // This is needed if you're planning to invoke your function from a browser. - if (method === 'OPTIONS') { - return new Response('ok', { headers: corsHeaders }) - } - - try { - // Create a Supabase client with the Auth context of the logged in user. - const supabaseClient = createClient( - // Supabase API URL - env var exported by default. - Deno.env.get('SUPABASE_URL') ?? '', - // Supabase API ANON KEY - env var exported by default. - Deno.env.get('SUPABASE_ANON_KEY') ?? '', - // Create client with Auth context of the user that called the function. - // This way your row-level-security (RLS) policies are applied. - { global: { headers: { Authorization: req.headers.get('Authorization')! } } } - ) - - // For more details on URLPattern, check https://developer.mozilla.org/en-US/docs/Web/API/URL_Pattern_API - const taskPattern = new URLPattern({ pathname: '/restful-tasks/:id' }) - const matchingPath = taskPattern.exec(url) - const id = matchingPath ? matchingPath.pathname.groups.id : null - - let task = null - if (method === 'POST' || method === 'PUT') { - const body = await req.json() - task = body.task - } - - // call relevant method based on method and id - switch (true) { - case id && method === 'GET': - return getTask(supabaseClient, id as string) - case id && method === 'PUT': - return updateTask(supabaseClient, id as string, task) - case id && method === 'DELETE': - return deleteTask(supabaseClient, id as string) - case method === 'POST': - return createTask(supabaseClient, task) - case method === 'GET': - return getAllTasks(supabaseClient) - default: - return getAllTasks(supabaseClient) - } - } catch (error) { - console.error(error) - - return new Response(JSON.stringify({ error: error.message }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 400, - }) - } -}) diff --git a/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts b/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts deleted file mode 100644 index 72b95575cb9ec..0000000000000 --- a/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts +++ /dev/null @@ -1,53 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' -import { createClient } from '@supabase/supabase-js' -import { corsHeaders } from '../_shared/cors.ts' - -console.log(`Function "select-from-table-with-auth-rls" up and running!`) - -serve(async (req: Request) => { - // This is needed if you're planning to invoke your function from a browser. - if (req.method === 'OPTIONS') { - return new Response('ok', { headers: corsHeaders }) - } - - try { - // Create a Supabase client with the Auth context of the logged in user. - const supabaseClient = createClient( - // Supabase API URL - env var exported by default. - Deno.env.get('SUPABASE_URL') ?? '', - // Supabase API ANON KEY - env var exported by default. - Deno.env.get('SUPABASE_ANON_KEY') ?? '', - // Create client with Auth context of the user that called the function. - // This way your row-level-security (RLS) policies are applied. - { global: { headers: { Authorization: req.headers.get('Authorization')! } } } - ) - // Now we can get the session or user object - const { - data: { user }, - } = await supabaseClient.auth.getUser() - - // And we can run queries in the context of our authenticated user - const { data, error } = await supabaseClient.from('users').select('*') - if (error) throw error - - return new Response(JSON.stringify({ user, data }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 200, - }) - } catch (error) { - return new Response(JSON.stringify({ error: error.message }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 400, - }) - } -}) - -// To invoke: -// curl -i --location --request POST 'http://localhost:54321/functions/v1/select-from-table-with-auth-rls' \ -// --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24ifQ.625_WdcF3KHqz5amU0x2X5WWHP-OEs_4qj0ssLNHzTs' \ -// --header 'Content-Type: application/json' \ -// --data '{"name":"Functions"}' diff --git a/examples/edge-functions/supabase/functions/send-email-resend/README.md b/examples/edge-functions/supabase/functions/send-email-resend/README.md deleted file mode 100644 index 1dc7d0f850411..0000000000000 --- a/examples/edge-functions/supabase/functions/send-email-resend/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Resend with Supabase Edge Functions - -This example shows how to use Resend with [Supabase Edge Functions](https://supabase.com/docs/guides/functions). - -## Prerequisites - -To get the most out of this example, you’ll need to: - -- [Create an API key](https://resend.com/api-keys) -- [Verify your domain](https://resend.com/domains) -- Create your `.env` file and set your `RESEND_API_KEY` - -```bash -cp .env.example .env -``` - -## Instructions - -1. Make sure you have the latest version of the [Supabase CLI](https://supabase.com/docs/guides/cli#installation) installed. - -2. Run function locally: - -```sh -supabase start -supabase functions serve --no-verify-jwt --env-file ./supabase/.env.local -``` - -GET http://localhost:54321/functions/v1/send-email-resend - -3. Deploy function to Supabase: - -```sh -supabase functions deploy resend --no-verify-jwt -``` - -## License - -MIT License diff --git a/examples/edge-functions/supabase/functions/send-email-resend/index.ts b/examples/edge-functions/supabase/functions/send-email-resend/index.ts deleted file mode 100644 index 05dbb337ecbf1..0000000000000 --- a/examples/edge-functions/supabase/functions/send-email-resend/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' - -const RESEND_API_KEY = Deno.env.get('RESEND_API_KEY') - -const handler = async (_request: Request): Promise => { - const res = await fetch('https://api.resend.com/emails', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${RESEND_API_KEY}`, - }, - body: JSON.stringify({ - from: 'onboarding@resend.dev', - to: 'delivered@resend.dev', - subject: 'hello world', - html: 'it works!', - }), - }) - - const data = await res.json() - - return new Response(JSON.stringify(data), { - status: 200, - headers: { - 'Content-Type': 'application/json', - }, - }) -} - -serve(handler) diff --git a/examples/edge-functions/supabase/functions/send-email-smtp/README.md b/examples/edge-functions/supabase/functions/send-email-smtp/README.md deleted file mode 100644 index 68b7dbad82b31..0000000000000 --- a/examples/edge-functions/supabase/functions/send-email-smtp/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# send-email-smtp - -## Deploy - -``` -supabase link --project-ref your-project-ref -supabase secrets set SMTP_HOSTNAME="your.hostname.com" SMTP_PORT="2587" SMTP_USERNAME="your_username" SMTP_PASSWORD="your_password" SMTP_FROM="no-reply@example.com" -supabase functions deploy send-email-smtp -``` - -Note: `SMTP_PORT` must be a port other than `25`, `465`, and `587` as Deno Deploy does not support outgoing connections to ports. AWS SES (port 2587) is recommended. - -## Test locally - -- `cp ./supabase/.env.local.example ./supabase/.env.local` -- `supabase functions serve --env-file ./supabase/.env.local` diff --git a/examples/edge-functions/supabase/functions/send-email-smtp/index.ts b/examples/edge-functions/supabase/functions/send-email-smtp/index.ts deleted file mode 100644 index d0abf11712969..0000000000000 --- a/examples/edge-functions/supabase/functions/send-email-smtp/index.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' -import { SmtpClient } from 'denomailer' - -const smtp = new SmtpClient() - -console.log(`Function "send-email-smtp" up and running!`) - -serve(async (_req) => { - await smtp.connect({ - hostname: Deno.env.get('SMTP_HOSTNAME')!, - port: Number(Deno.env.get('SMTP_PORT')!), - username: Deno.env.get('SMTP_USERNAME')!, - password: Deno.env.get('SMTP_PASSWORD')!, - }) - - try { - await smtp.send({ - from: Deno.env.get('SMTP_FROM')!, - to: 'testr@test.de', - subject: `Hello from Supabase Edge Functions`, - content: `Hello Functions \o/`, - }) - } catch (error) { - return new Response(error.message, { status: 500 }) - } - - await smtp.close() - - return new Response( - JSON.stringify({ - done: true, - }), - { - headers: { 'Content-Type': 'application/json' }, - } - ) -}) - -// To invoke: -// curl -i --location --request POST 'http://localhost:54321/functions/v1/send-email-smtp' \ -// --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24ifQ.625_WdcF3KHqz5amU0x2X5WWHP-OEs_4qj0ssLNHzTs' \ -// --header 'Content-Type: application/json' \ -// --data '{"name":"Functions"}' diff --git a/examples/edge-functions/supabase/functions/streams/README.md b/examples/edge-functions/supabase/functions/streams/README.md deleted file mode 100644 index 1be0ec27b247a..0000000000000 --- a/examples/edge-functions/supabase/functions/streams/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# streams - -## Run locally - -```bash -supabase functions serve --no-verify-jwt -``` - -Use cURL or Postman to make a GET request to http://localhost:54321/functions/v1/streams. - -```bash -curl http://localhost:54321/functions/v1/streams -``` - -## Deploy - -```bash -supabase functions deploy --no-verify-jwt streams -``` diff --git a/examples/edge-functions/supabase/functions/streams/index.ts b/examples/edge-functions/supabase/functions/streams/index.ts deleted file mode 100644 index dafbf83c7d7d5..0000000000000 --- a/examples/edge-functions/supabase/functions/streams/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { serve } from 'std/server' - -const msg = new TextEncoder().encode('data: hello\r\n\r\n') - -serve((_) => { - let timerId: number | undefined - - const body = new ReadableStream({ - start(controller) { - timerId = setInterval(() => { - controller.enqueue(msg) - }, 1000) - }, - cancel() { - if (typeof timerId === 'number') { - clearInterval(timerId) - } - }, - }) - - return new Response(body, { - headers: { - 'Content-Type': 'text/event-stream', - }, - }) -}) diff --git a/examples/edge-functions/supabase/functions/stripe-webhooks/README.md b/examples/edge-functions/supabase/functions/stripe-webhooks/README.md deleted file mode 100644 index 337352277fb5c..0000000000000 --- a/examples/edge-functions/supabase/functions/stripe-webhooks/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# stripe-webhooks - -Also check out our full Stripe Payments examples for [React Native (Expo)](https://github.com/supabase-community/expo-stripe-payments-with-supabase-functions) and [Flutter](https://github.com/supabase-community/flutter-stripe-payments-with-supabase-functions). - -## Setup env vars - -- `cp supabase/.env.local.example supabase/.env.local` - -## Test locally - -- Terminal 1: - - `supabase functions serve --no-verify-jwt --env-file ./supabase/.env.local` -- Terminal 2: - - `stripe listen --forward-to localhost:54321/functions/v1/` -- Terminal 3 (optional): - - `stripe trigger payment_intent.succeeded` - -## Deploy - -- `supabase functions deploy --no-verify-jwt stripe-webhooks` -- `supabase secrets set --env-file ./supabase/.env.local` diff --git a/examples/edge-functions/supabase/functions/stripe-webhooks/index.ts b/examples/edge-functions/supabase/functions/stripe-webhooks/index.ts deleted file mode 100644 index a0bbb7dc9585d..0000000000000 --- a/examples/edge-functions/supabase/functions/stripe-webhooks/index.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' - -// Import via bare specifier thanks to the import_map.json file. -import Stripe from 'stripe' - -const stripe = new Stripe(Deno.env.get('STRIPE_API_KEY') as string, { - // This is needed to use the Fetch API rather than relying on the Node http - // package. - apiVersion: '2022-11-15', - httpClient: Stripe.createFetchHttpClient(), -}) -// This is needed in order to use the Web Crypto API in Deno. -const cryptoProvider = Stripe.createSubtleCryptoProvider() - -console.log('Hello from Stripe Webhook!') - -serve(async (request) => { - const signature = request.headers.get('Stripe-Signature') - - // First step is to verify the event. The .text() method must be used as the - // verification relies on the raw request body rather than the parsed JSON. - const body = await request.text() - let receivedEvent - try { - receivedEvent = await stripe.webhooks.constructEventAsync( - body, - signature!, - Deno.env.get('STRIPE_WEBHOOK_SIGNING_SECRET')!, - undefined, - cryptoProvider - ) - } catch (err) { - return new Response(err.message, { status: 400 }) - } - console.log(`🔔 Event received: ${receivedEvent.id}`) - return new Response(JSON.stringify({ ok: true }), { status: 200 }) -}) diff --git a/examples/edge-functions/supabase/functions/telegram-bot/README.md b/examples/edge-functions/supabase/functions/telegram-bot/README.md deleted file mode 100644 index 6abc07c5ba35f..0000000000000 --- a/examples/edge-functions/supabase/functions/telegram-bot/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# telegram-bot - -Try it out: https://t.me/supabase_example_bot - -![demo](./demo.gif) - -## Deploy - -1. Run `supabase functions deploy --no-verify-jwt telegram-bot` -2. Get your Telegram token from https://t.me/BotFather -3. Run `supabase secrets set TELEGRAM_BOT_TOKEN=your_token FUNCTION_SECRET=random_secret` -4. Set your bot's webhook url to `https://.functions.supabase.co/telegram-bot` (Replacing `<...>` with respective values). In order to do that, run this url (in your browser, for example): `https://api.telegram.org/bot/setWebhook?url=https://.functions.supabase.co/telegram-bot?secret=` -5. That's it, go ahead and chat with your bot 🤖💬 \ No newline at end of file diff --git a/examples/edge-functions/supabase/functions/telegram-bot/demo.gif b/examples/edge-functions/supabase/functions/telegram-bot/demo.gif deleted file mode 100644 index 76dafea74decf..0000000000000 Binary files a/examples/edge-functions/supabase/functions/telegram-bot/demo.gif and /dev/null differ diff --git a/examples/edge-functions/supabase/functions/telegram-bot/index.ts b/examples/edge-functions/supabase/functions/telegram-bot/index.ts deleted file mode 100644 index ecaa9916327f2..0000000000000 --- a/examples/edge-functions/supabase/functions/telegram-bot/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' - -console.log(`Function "telegram-bot" up and running!`) - -import { Bot, webhookCallback } from 'grammy' - -const bot = new Bot(Deno.env.get('TELEGRAM_BOT_TOKEN') || '') - -bot.command('start', (ctx) => ctx.reply('Welcome! Up and running.')) - -bot.command('ping', (ctx) => ctx.reply(`Pong! ${new Date()} ${Date.now()}`)) - -const handleUpdate = webhookCallback(bot, 'std/http') - -serve(async (req) => { - try { - const url = new URL(req.url) - if (url.searchParams.get('secret') !== Deno.env.get('FUNCTION_SECRET')) - return new Response('not allowed', { status: 405 }) - - return await handleUpdate(req) - } catch (err) { - console.error(err) - } -}) diff --git a/examples/edge-functions/supabase/functions/tweet-to-image/Tweet.tsx b/examples/edge-functions/supabase/functions/tweet-to-image/Tweet.tsx deleted file mode 100644 index 969a2353e2126..0000000000000 --- a/examples/edge-functions/supabase/functions/tweet-to-image/Tweet.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'https://esm.sh/react@18.2.0?deno-std=0.140.0' -import type { FormattedTweet } from './types.ts' - -/** - * Supports plain text, images, quote tweets. - * - * Needs support for images, GIFs, and replies maybe? - * Styles use !important to override Tailwind .prose inside MDX. - */ -export default function Tweet({ - id, - text, - author, - media, - created_at, - public_metrics, - referenced_tweets, -}: FormattedTweet) { - const authorUrl = `https://twitter.com/${author.username}` - const likeUrl = `https://twitter.com/intent/like?tweet_id=${id}` - const retweetUrl = `https://twitter.com/intent/retweet?tweet_id=${id}` - const replyUrl = `https://twitter.com/intent/tweet?in_reply_to=${id}` - const tweetUrl = `https://twitter.com/${author.username}/status/${id}` - const createdAt = new Date(created_at) - - const formattedText = text.replace(/https:\/\/[\n\S]+/g, '').replace('&', '&') - const quoteTweet = referenced_tweets && referenced_tweets.find((t) => t.type === 'quoted') - - return ( -
    -
    -

    - {formattedText} - {`- @${author.username}`} -

    -
    -
    - ) -} diff --git a/examples/edge-functions/supabase/functions/tweet-to-image/getTweet.ts b/examples/edge-functions/supabase/functions/tweet-to-image/getTweet.ts deleted file mode 100644 index 00930cf31d5ae..0000000000000 --- a/examples/edge-functions/supabase/functions/tweet-to-image/getTweet.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type { TwitterApiResponse, Tweet, FormattedTweet } from './types.ts' - -export const getTweets: (ids: string[]) => Promise = async (ids: string[]) => { - if (ids.length === 0) { - return [] - } - - const queryParams = new URLSearchParams({ - ids: ids.join(','), - expansions: - 'author_id,attachments.media_keys,referenced_tweets.id,referenced_tweets.id.author_id', - 'tweet.fields': - 'attachments,author_id,public_metrics,created_at,id,in_reply_to_user_id,referenced_tweets,text', - 'user.fields': 'id,name,profile_image_url,protected,url,username,verified', - 'media.fields': 'duration_ms,height,media_key,preview_image_url,type,url,width,public_metrics', - }) - - const response = await fetch(`https://api.twitter.com/2/tweets?${queryParams}`, { - headers: { - Authorization: `Bearer ${Deno.env.get('TWITTER_API_TOKEN')}`, - }, - }) - - const tweets: TwitterApiResponse = await response.json() - - const getAuthorInfo = (author_id: string) => { - return tweets.includes.users.find((user) => user.id === author_id) - } - - const getReferencedTweets = (mainTweet: Tweet) => { - return ( - mainTweet?.referenced_tweets?.map((referencedTweet) => { - const fullReferencedTweet = tweets.includes.tweets.find( - (tweet) => tweet.id === referencedTweet.id - ) - - return { - type: referencedTweet.type, - author: getAuthorInfo(fullReferencedTweet!.author_id), - ...fullReferencedTweet, - } - }) || [] - ) - } - - return ( - tweets.data.reduce((allTweets, tweet) => { - const tweetWithAuthor = { - ...tweet, - media: - tweet?.attachments?.media_keys.map((key: string) => - tweets.includes.media.find((media) => media.media_key === key) - ) || [], - referenced_tweets: getReferencedTweets(tweet), - author: getAuthorInfo(tweet.author_id), - } - - return [tweetWithAuthor, ...allTweets] - }, []) || [] // If the Twitter API key isn't set, don't break the build - ) -} diff --git a/examples/edge-functions/supabase/functions/tweet-to-image/handler.tsx b/examples/edge-functions/supabase/functions/tweet-to-image/handler.tsx deleted file mode 100644 index c55060c77ec4c..0000000000000 --- a/examples/edge-functions/supabase/functions/tweet-to-image/handler.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import React from 'https://esm.sh/react@18.2.0?deno-std=0.140.0' -import { ImageResponse } from 'https://deno.land/x/og_edge@0.0.4/mod.ts' -import { createClient } from 'https://esm.sh/@supabase/supabase-js@2.5.0' -import { corsHeaders } from '../_shared/cors.ts' -import { getTweets } from './getTweet.ts' -import Tweet from './Tweet.tsx' - -const STORAGE_URL = - 'https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/tweet-to-image' - -// Load custom font -const FONT_URL = `${STORAGE_URL}/CircularStd-Book.otf` -const font = fetch(new URL(FONT_URL, import.meta.url)).then((res) => res.arrayBuffer()) - -export async function handler(req: Request) { - const url = new URL(req.url) - const tweetId = url.searchParams.get('tweetId') - - if (!tweetId) - return new Response(JSON.stringify({ error: 'missing tweetId param' }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 400, - }) - - try { - // Try to get image from Supabase Storage CDN. - const storageResponse = await fetch(`${STORAGE_URL}/${tweetId}.png`) - if (storageResponse.ok) return storageResponse - - // Else, generate image and upload to storage. - const fontData = await font - - const tweets = await getTweets([tweetId]) - const tweet = tweets[0] - console.log('formattedTweets', JSON.stringify(tweets, null, 2)) - const generatedImage = new ImageResponse( - ( -
    - -
    - ), - { - width: 1200, - height: 630, - // Supported options: 'twemoji', 'blobmoji', 'noto', 'openmoji', 'fluent', 'fluentFlat' - // Default to 'twemoji' - emoji: 'twemoji', - fonts: [ - { - name: 'Circular', - data: fontData, - style: 'normal', - }, - ], - } - ) - - const supabaseAdminClient = createClient( - // Supabase API URL - env var exported by default when deployed. - Deno.env.get('SUPABASE_URL') ?? '', - // Supabase API SERVICE ROLE KEY - env var exported by default when deployed. - Deno.env.get('SUPABASE_SERVICE_ROLE_KEY') ?? '' - ) - - // Upload image to storage. - const { error } = await supabaseAdminClient.storage - .from('images') - .upload(`tweet-to-image/${tweetId}.png`, generatedImage.body!, { - contentType: 'image/png', - cacheControl: '31536000', - upsert: false, - }) - if (error) throw error - - return generatedImage - } catch (error) { - return new Response(JSON.stringify({ error: error.message }), { - headers: { ...corsHeaders, 'Content-Type': 'application/json' }, - status: 400, - }) - } -} diff --git a/examples/edge-functions/supabase/functions/tweet-to-image/index.ts b/examples/edge-functions/supabase/functions/tweet-to-image/index.ts deleted file mode 100644 index fe187018a898f..0000000000000 --- a/examples/edge-functions/supabase/functions/tweet-to-image/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'https://deno.land/std@0.140.0/http/server.ts' - -import { handler } from './handler.tsx' - -console.log(`Function "tweet-to-image" up and running!`) - -serve(handler) diff --git a/examples/edge-functions/supabase/functions/tweet-to-image/types.ts b/examples/edge-functions/supabase/functions/tweet-to-image/types.ts deleted file mode 100644 index c1ab36294edba..0000000000000 --- a/examples/edge-functions/supabase/functions/tweet-to-image/types.ts +++ /dev/null @@ -1,74 +0,0 @@ -export type Tweet = { - edit_history_tweet_ids: string[] - text: string - referenced_tweets: - | Array<{ - type: string - id: string - }> - | undefined - attachments: { - media_keys: string[] - } - id: string - created_at: string - public_metrics: { - retweet_count: number - reply_count: number - like_count: number - quote_count: number - impression_count: number - } - author_id: string - author?: User -} - -export type Media = { - width: number - media_key: string - type: string - url: string - height: number -} - -export type User = { - name: string - url: string - verified: boolean - profile_image_url: string - id: string - username: string - protected: boolean -} - -// raw -export type TwitterApiResponse = { - data: Tweet[] - includes: { - media: Media[] - users: User[] - tweets: Tweet[] - } -} - -export type FormattedTweet = { - type: string - edit_history_tweet_ids: string[] - text: string - referenced_tweets: FormattedTweet[] - attachments: { - media_keys: string[] - } - id: string - created_at: string - public_metrics: { - retweet_count: number - reply_count: number - like_count: number - quote_count: number - impression_count: number - } - author_id: string - media: Media[] - author: User -} diff --git a/examples/edge-functions/supabase/functions/upstash-redis-counter/README.md b/examples/edge-functions/supabase/functions/upstash-redis-counter/README.md deleted file mode 100644 index dd854b5a07bb4..0000000000000 --- a/examples/edge-functions/supabase/functions/upstash-redis-counter/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Upstash Redis in Supabase Edge Functions - -A Redis counter example that stores a [hash](https://redis.io/commands/hincrby/) of function invocation count per region. - -## Redis database setup - -Create a Redis database using the [Upstash Console](https://console.upstash.com/) or [Upstash CLI](https://github.com/upstash/cli). - -Select the `Global` type to minimize the latency from all edge locations. Copy the `UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN` to your .env file. You'll find them under **Details > REST API > .env**. - -```bash -cp supabase/.env.local.example supabase/.env.local -``` - -## Run locally - -Make sure you have the latest version of the [Supabase CLI installed](https://supabase.com/docs/guides/cli#installation). - -```bash -supabase start -supabase functions serve --no-verify-jwt --env-file supabase/.env.local -``` - -Navigate to http://localhost:54321/functions/v1/upstash-redis-counter. - -## Deploy - -```bash -supabase functions deploy upstash-redis-counter --no-verify-jwt -supabase secrets set --env-file supabase/.env.local -``` diff --git a/examples/edge-functions/supabase/functions/upstash-redis-counter/index.ts b/examples/edge-functions/supabase/functions/upstash-redis-counter/index.ts deleted file mode 100644 index bf630d0287f68..0000000000000 --- a/examples/edge-functions/supabase/functions/upstash-redis-counter/index.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from 'std/server' -import { Redis } from 'upstash_redis' - -console.log(`Function "upstash-redis-counter" up and running!`) - -serve(async (_req) => { - try { - const redis = new Redis({ - url: Deno.env.get('UPSTASH_REDIS_REST_URL')!, - token: Deno.env.get('UPSTASH_REDIS_REST_TOKEN')!, - }) - - const deno_region = Deno.env.get('DENO_REGION') - if (deno_region) { - // Increment region counter - await redis.hincrby('supa-edge-counter', deno_region, 1) - } else { - // Increment localhost counter - await redis.hincrby('supa-edge-counter', 'localhost', 1) - } - - // Get all values - const counterHash: Record | null = await redis.hgetall('supa-edge-counter') - const counters = Object.entries(counterHash!) - .sort(([, a], [, b]) => b - a) // sort desc - .reduce((r, [k, v]) => ({ total: r.total + v, regions: { ...r.regions, [k]: v } }), { - total: 0, - regions: {}, - }) - - return new Response(JSON.stringify({ counters }), { status: 200 }) - } catch (error) { - return new Response(JSON.stringify({ error: error.message }), { status: 200 }) - } -}) - -// To invoke, navigate to 'http://localhost:54321/functions/v1/upstash-redis-counter'. diff --git a/examples/edge-functions/supabase/functions/upstash-redis-ratelimit/README.md b/examples/edge-functions/supabase/functions/upstash-redis-ratelimit/README.md deleted file mode 100644 index 86fe57b638771..0000000000000 --- a/examples/edge-functions/supabase/functions/upstash-redis-ratelimit/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Rate limiting with Upstash Redis in Supabase Edge Functions - -[Redis](https://redis.io/docs/about/) is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine. It is optimized for atomic operations like incrementing a value, for example for a view counter or rate limiting. We can even rate limit based on the user ID from Supabase Auth! - -[Upstash](https://upstash.com/) provides an HTTP/REST based Redis client which is ideal for serverless use-cases and therefore works well with Supabase Edge Functions. - -## Redis database setup - -Create a Redis database using the [Upstash Console](https://console.upstash.com/) or [Upstash CLI](https://github.com/upstash/cli). - -Select the `Global` type to minimize the latency from all edge locations. Copy the `UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN` to your .env file. You'll find them under **Details > REST API > .env**. - -```bash -cp supabase/.env.local.example supabase/.env.local -``` - -## Run locally - -Make sure you have the latest version of the [Supabase CLI installed](https://supabase.com/docs/guides/cli#installation). - -```bash -supabase start -supabase functions serve --env-file supabase/.env.local -``` - -Navigate to http://localhost:54321/functions/v1/upstash-redis-ratelimit. - -## Deploy - -```bash -supabase functions deploy upstash-redis-ratelimit -supabase secrets set --env-file supabase/.env.local -``` diff --git a/examples/edge-functions/supabase/functions/upstash-redis-ratelimit/index.ts b/examples/edge-functions/supabase/functions/upstash-redis-ratelimit/index.ts deleted file mode 100644 index 0f934d1864ac9..0000000000000 --- a/examples/edge-functions/supabase/functions/upstash-redis-ratelimit/index.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { serve } from "std/server"; -import { Redis } from "@upstash/redis"; -import { Ratelimit } from "@upstash/ratelimit"; -import { createClient } from "@supabase/supabase-js"; - -console.log(`Function "upstash-redis-counter" up and running!`); - -serve(async (req) => { - try { - // Create a Supabase client with the Auth context of the logged in user. - const supabaseClient = createClient( - // Supabase API URL - env var exported by default. - Deno.env.get("SUPABASE_URL") ?? "", - // Supabase API ANON KEY - env var exported by default. - Deno.env.get("SUPABASE_ANON_KEY") ?? "", - // Create client with Auth context of the user that called the function. - // This way your row-level-security (RLS) policies are applied. - { - global: { - headers: { Authorization: req.headers.get("Authorization")! }, - }, - } - ); - // Now we can get the session or user object - const { - data: { user }, - } = await supabaseClient.auth.getUser(); - if (!user) throw new Error("no user"); - console.log(user.id); - - const redis = new Redis({ - url: Deno.env.get("UPSTASH_REDIS_REST_URL")!, - token: Deno.env.get("UPSTASH_REDIS_REST_TOKEN")!, - }); - - // Create a new ratelimiter, that allows 10 requests per 10 seconds - const ratelimit = new Ratelimit({ - redis, - limiter: Ratelimit.slidingWindow(2, "10 s"), - analytics: true, - }); - - // Use a constant string to limit all requests with a single ratelimit - // Or use a userID, apiKey or ip address for individual limits. - const identifier = user.id; - const { success } = await ratelimit.limit(identifier); - - if (!success) { - throw new Error("limit exceeded"); - } - - return new Response(JSON.stringify({ success }), { status: 200 }); - } catch (error) { - return new Response(JSON.stringify({ error: error.message }), { - status: 200, - }); - } -}); - -// curl -i --location --request POST 'http://localhost:54321/functions/v1/upstash-redis-ratelimit' \ -// --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjc4MDA4Mjk2LCJzdWIiOiJkZjQ3ZDU5My0zMjY1LTQ2OWEtOWI5OS1mZDk1OTdhOGU4YzciLCJlbWFpbCI6InRlc3RyQHRlc3Quc2ciLCJwaG9uZSI6IiIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6ImVtYWlsIiwicHJvdmlkZXJzIjpbImVtYWlsIl19LCJ1c2VyX21ldGFkYXRhIjp7fSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJwYXNzd29yZCIsInRpbWVzdGFtcCI6MTY3ODAwNDY5Nn1dLCJzZXNzaW9uX2lkIjoiMDNjMmFlYjUtMjk5MC00ZWU0LWIxYTYtZmU1Y2IwMGFhMjU3In0.WwqggrX34j0NINiulC9rsj-cd6HzV55ySxJkJlVsU4o' \ -// --header 'Content-Type: application/json' \ -// --data '{"name":"Functions"}' diff --git a/examples/edge-functions/supabase/migrations/20220331105910_init.sql b/examples/edge-functions/supabase/migrations/20220331105910_init.sql deleted file mode 100644 index 1c1fd93305575..0000000000000 --- a/examples/edge-functions/supabase/migrations/20220331105910_init.sql +++ /dev/null @@ -1,28 +0,0 @@ -/** -* USERS -* Note: This table contains user data. Users should only be able to view and update their own data. -*/ -create table users ( - -- UUID from auth.users - id uuid references auth.users not null primary key, - full_name text, - avatar_url text -); -alter table users enable row level security; -create policy "Can view own user data." on users for select using (auth.uid() = id); -create policy "Can update own user data." on users for update using (auth.uid() = id); - -/** -* This trigger automatically creates a user entry when a new user signs up via Supabase Auth. -*/ -create function public.handle_new_user() -returns trigger as $$ -begin - insert into public.users (id, full_name, avatar_url) - values (new.id, new.raw_user_meta_data->>'full_name', new.raw_user_meta_data->>'avatar_url'); - return new; -end; -$$ language plpgsql security definer; -create trigger on_auth_user_created - after insert on auth.users - for each row execute procedure public.handle_new_user(); \ No newline at end of file diff --git a/examples/edge-functions/supabase/migrations/20221208080410_discord-bot.sql b/examples/edge-functions/supabase/migrations/20221208080410_discord-bot.sql deleted file mode 100644 index fb842a2388315..0000000000000 --- a/examples/edge-functions/supabase/migrations/20221208080410_discord-bot.sql +++ /dev/null @@ -1,12 +0,0 @@ -create table discord_promise_challenge ( - id bigint generated by default as identity primary key, - inserted_at timestamp with time zone default timezone('utc'::text, now()) not null, - updated_at timestamp with time zone default timezone('utc'::text, now()) not null, - user_id text not null, - username text not null, - promise text not null, - email text, - submission text, - resolved boolean default false -); -alter table discord_promise_challenge enable row level security; \ No newline at end of file diff --git a/examples/enterprise-patterns/partitions/supabase/.gitignore b/examples/enterprise-patterns/partitions/supabase/.gitignore deleted file mode 100644 index 773c7c3e0a15a..0000000000000 --- a/examples/enterprise-patterns/partitions/supabase/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Supabase -.branches -.temp diff --git a/examples/enterprise-patterns/partitions/supabase/config.toml b/examples/enterprise-patterns/partitions/supabase/config.toml deleted file mode 100644 index 1f53e6ac273c1..0000000000000 --- a/examples/enterprise-patterns/partitions/supabase/config.toml +++ /dev/null @@ -1,82 +0,0 @@ -# A string used to distinguish different Supabase projects on the same host. Defaults to the working -# directory name when running `supabase init`. -project_id = "partitions" - -[api] -# Port to use for the API URL. -port = 54321 -# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API -# endpoints. public and storage are always included. -schemas = ["public", "storage", "graphql_public"] -# Extra schemas to add to the search_path of every request. public is always included. -extra_search_path = ["public", "extensions"] -# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size -# for accidental or malicious requests. -max_rows = 1000 - -[db] -# Port to use for the local database URL. -port = 54322 -# The database major version to use. This has to be the same as your remote database's. Run `SHOW -# server_version;` on the remote database to check. -major_version = 15 - -[studio] -# Port to use for Supabase Studio. -port = 54323 - -# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they -# are monitored, and you can view the emails that would have been sent from the web interface. -[inbucket] -# Port to use for the email testing server web interface. -port = 54324 -smtp_port = 54325 -pop3_port = 54326 - -[storage] -# The maximum file size allowed (e.g. "5MB", "500KB"). -file_size_limit = "50MiB" - -[auth] -# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used -# in emails. -site_url = "http://localhost:3000" -# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. -additional_redirect_urls = ["https://localhost:3000"] -# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one -# week). -jwt_expiry = 3600 -# Allow/disallow new user signups to your project. -enable_signup = true - -[auth.email] -# Allow/disallow new user signups via email to your project. -enable_signup = true -# If enabled, a user will be required to confirm any email change on both the old, and new email -# addresses. If disabled, only the new email is required to confirm. -double_confirm_changes = true -# If enabled, users need to confirm their email address before signing in. -enable_confirmations = false - -# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, -# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, `twitch`, -# `twitter`, `slack`, `spotify`, `workos`, `zoom`. -[auth.external.apple] -enabled = false -client_id = "" -secret = "" -# Overrides the default auth redirectUrl. -redirect_uri = "" -# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, -# or any other third-party OIDC providers. -url = "" - -[analytics] -enabled = false -port = 54327 -vector_port = 54328 -# Setup BigQuery project to enable log viewer on local development stack. -# See: https://supabase.com/docs/guides/getting-started/local-development#enabling-local-logging -gcp_project_id = "" -gcp_project_number = "" -gcp_jwt_path = "supabase/gcloud.json" diff --git a/examples/enterprise-patterns/partitions/supabase/migrations/20000101003625_sales.sql b/examples/enterprise-patterns/partitions/supabase/migrations/20000101003625_sales.sql deleted file mode 100644 index 6735210ab3c10..0000000000000 --- a/examples/enterprise-patterns/partitions/supabase/migrations/20000101003625_sales.sql +++ /dev/null @@ -1,20 +0,0 @@ - -create table sales ( - id bigint generated by default as identity, - order_date date not null, - customer_id bigint, - amount bigint, - - -- We need to include all the - -- partitioning columns in constraints: - primary key (order_date, id) -) -partition by range (order_date); - -create table sales_2000_01 - partition of sales - for values from ('2000-01-01') to ('2000-02-01'); - -create table sales_2000_02 - partition of sales - for values from ('2000-02-01') to ('2000-03-01'); \ No newline at end of file diff --git a/examples/enterprise-patterns/partitions/supabase/migrations/20000101003626_customers.sql b/examples/enterprise-patterns/partitions/supabase/migrations/20000101003626_customers.sql deleted file mode 100644 index dba097e502680..0000000000000 --- a/examples/enterprise-patterns/partitions/supabase/migrations/20000101003626_customers.sql +++ /dev/null @@ -1,20 +0,0 @@ --- Create the partitioned table -create table customers ( - id bigint generated by default as identity, - name text, - country text, - - -- We need to include all the - -- partitioning columns in constraints: - primary key (country, id) -) -partition by list(country); - - -create table customers_americas - partition of customers - for values in ('US', 'CANADA') - -create table customers_asia - partition of customers - for values in ('INDIA', 'CHINA', 'JAPAN'); diff --git a/examples/enterprise-patterns/partitions/supabase/migrations/20000101003627_products.sql b/examples/enterprise-patterns/partitions/supabase/migrations/20000101003627_products.sql deleted file mode 100644 index 51dd1ad181736..0000000000000 --- a/examples/enterprise-patterns/partitions/supabase/migrations/20000101003627_products.sql +++ /dev/null @@ -1,15 +0,0 @@ -create table products ( - id bigint generated by default as identity primary key, - name text, - category text, - price bigint -) -partition by hash (id); - -create table products_one - partition of products - for values with (modulus 2, remainder 1); - -create table products_two - partition of products - for values with (modulus 2, remainder 0); \ No newline at end of file diff --git a/examples/enterprise-patterns/partitions/supabase/seed.sql b/examples/enterprise-patterns/partitions/supabase/seed.sql deleted file mode 100644 index 1f5de4f6f12ca..0000000000000 --- a/examples/enterprise-patterns/partitions/supabase/seed.sql +++ /dev/null @@ -1,78 +0,0 @@ -insert into sales (order_date, amount, customer_id) -values - ('2000-01-01', 100, 1), - ('2000-01-02', 200, 2), - ('2000-01-03', 300, 1), - ('2000-01-04', 400, 2), - ('2000-01-05', 500, 1), - ('2000-01-06', 600, 2), - ('2000-01-07', 700, 1), - ('2000-01-08', 800, 2), - ('2000-01-09', 900, 1), - ('2000-01-10', 1000, 2), - ('2000-01-11', 1100, 1), - ('2000-01-12', 1200, 2), - ('2000-01-13', 1300, 1), - ('2000-01-14', 1400, 2), - ('2000-01-15', 1500, 1), - ('2000-01-16', 1600, 2), - ('2000-01-17', 1700, 1), - ('2000-01-18', 1800, 2), - ('2000-01-19', 1900, 1), - ('2000-01-20', 2000, 2), - ('2000-02-01', 100, 1), - ('2000-02-02', 200, 2), - ('2000-02-03', 300, 1), - ('2000-02-04', 400, 2), - ('2000-02-05', 500, 1), - ('2000-02-06', 600, 2), - ('2000-02-07', 700, 1), - ('2000-02-08', 800, 2), - ('2000-02-09', 900, 1), - ('2000-02-10', 1000, 2), - ('2000-02-11', 1100, 1), - ('2000-02-12', 1200, 2), - ('2000-02-13', 1300, 1), - ('2000-02-14', 1400, 2), - ('2000-02-15', 1500, 1), - ('2000-02-16', 1600, 2), - ('2000-02-17', 1700, 1), - ('2000-02-18', 1800, 2), - ('2000-02-19', 1900, 1), - ('2000-02-20', 2000, 2); - -insert into customers (name, country) -values - ('John Smith', 'US'), - ('Alice Johnson', 'US'), - ('Michael Brown', 'US'), - ('Emily Davis', 'US'), - ('Robert Johnson', 'US'), - ('Sarah Wilson', 'US'), - ('David Thompson', 'CANADA'), - ('Jennifer Lee', 'CANADA'), - ('Christopher Martin', 'CANADA'), - ('Emma Rodriguez', 'CANADA'), - ('Li Wei', 'CHINA'), - ('Aarav Patel', 'INDIA'), - ('Yuki Tanaka', 'JAPAN'), - ('Ravi Kumar', 'INDIA'), - ('Zhang Wei', 'CHINA'), - ('Hiroshi Yamamoto', 'JAPAN'), - ('Mei Chen', 'CHINA'), - ('Ananya Gupta', 'INDIA'), - ('Shinji Kimura', 'JAPAN'), - ('Sanjay Singh', 'INDIA'); - -insert into products (name, category, price) -values - ('Product 1', 'Category A', 100), - ('Product 2', 'Category B', 200), - ('Product 3', 'Category A', 150), - ('Product 4', 'Category C', 300), - ('Product 5', 'Category B', 250), - ('Product 6', 'Category C', 350), - ('Product 7', 'Category A', 120), - ('Product 8', 'Category B', 180), - ('Product 9', 'Category C', 270), - ('Product 10', 'Category A', 220); diff --git a/examples/product-sample-supabase-kt/app/build.gradle b/examples/product-sample-supabase-kt/app/build.gradle deleted file mode 100644 index 124dca673ac26..0000000000000 --- a/examples/product-sample-supabase-kt/app/build.gradle +++ /dev/null @@ -1,97 +0,0 @@ -plugins { - id 'com.android.application' - id 'org.jetbrains.kotlin.android' - id 'com.google.dagger.hilt.android' - id 'kotlin-kapt' - id 'dagger.hilt.android.plugin' - id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.0' -} - -android { - namespace 'com.example.manageproducts' - compileSdk 33 - - defaultConfig { - applicationId "com.example.manageproducts" - minSdk 28 - targetSdk 33 - versionCode 1 - versionName "1.0" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - vectorDrawables { - useSupportLibrary true - } - Properties properties = new Properties() - properties.load(project.rootProject.file("local.properties").newDataInputStream()) - buildConfigField("String", "API_KEY", "\"${properties.getProperty("API_KEY")}\"") - buildConfigField("String", "SECRET", "\"${properties.getProperty("SECRET")}\"") - buildConfigField("String", "SUPABASE_URL", "\"${properties.getProperty("SUPABASE_URL")}\"") - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - kotlinOptions { - jvmTarget = '1.8' - } - buildFeatures { - compose true - } - composeOptions { - kotlinCompilerExtensionVersion '1.2.0' - } - packagingOptions { - resources { - excludes += '/META-INF/{AL2.0,LGPL2.1}' - } - } -} - -dependencies { - - implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' - implementation 'androidx.activity:activity-compose:1.3.1' - implementation "androidx.compose.ui:ui:$compose_version" - implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" - implementation 'androidx.compose.material3:material3:1.0.0-alpha11' - testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.5' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' - androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" - debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" - debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version" - - implementation 'androidx.compose.material3:material3:1.0.0-alpha02' - implementation "androidx.compose.material:material:1.1.1" - - // Supabase setup - implementation "io.github.jan-tennert.supabase:gotrue-kt:1.0.0" - implementation "io.github.jan-tennert.supabase:postgrest-kt:1.0.0" - implementation "io.github.jan-tennert.supabase:storage-kt:1.0.0" - implementation "io.ktor:ktor-client-android:2.3.0" - implementation "io.ktor:ktor-utils:2.3.0" - implementation "io.ktor:ktor-client-core:2.3.0" - implementation "io.coil-kt:coil-compose:1.3.2" - - - implementation "com.google.dagger:hilt-android:$hilt_version" - annotationProcessor "com.google.dagger:hilt-compiler:$hilt_version" - implementation "androidx.hilt:hilt-navigation-compose:1.0.0" - - // For instrumentation tests - androidTestImplementation "com.google.dagger:hilt-android-testing:$hilt_version" - androidTestAnnotationProcessor "com.google.dagger:hilt-compiler:$hilt_version" - kapt "com.google.dagger:hilt-android-compiler:$hilt_version" - - implementation 'androidx.navigation:navigation-compose:2.5.3' - implementation 'com.google.accompanist:accompanist-swiperefresh:0.24.13-rc' -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/proguard-rules.pro b/examples/product-sample-supabase-kt/app/proguard-rules.pro deleted file mode 100644 index 481bb43481410..0000000000000 --- a/examples/product-sample-supabase-kt/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/androidTest/java/com/example/manageproducts/ExampleInstrumentedTest.kt b/examples/product-sample-supabase-kt/app/src/androidTest/java/com/example/manageproducts/ExampleInstrumentedTest.kt deleted file mode 100644 index 8bafdae8a69e5..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/androidTest/java/com/example/manageproducts/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.example.manageproducts - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.example.manageproducts", appContext.packageName) - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/AndroidManifest.xml b/examples/product-sample-supabase-kt/app/src/main/AndroidManifest.xml deleted file mode 100644 index 60d13ac1a0496..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/DeepLinkHandlerActivity.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/DeepLinkHandlerActivity.kt deleted file mode 100644 index a82112c252b69..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/DeepLinkHandlerActivity.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.example.manageproducts - -import android.content.Intent -import android.os.Bundle -import android.util.Log -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import androidx.navigation.compose.rememberNavController -import com.example.manageproducts.presentation.feature.signin.SignInSuccessScreen -import com.example.manageproducts.ui.theme.ManageProductsTheme -import dagger.hilt.android.AndroidEntryPoint -import io.github.jan.supabase.SupabaseClient -import io.github.jan.supabase.gotrue.handleDeeplinks -import javax.inject.Inject - -@AndroidEntryPoint -class DeepLinkHandlerActivity : ComponentActivity() { - - @Inject - lateinit var supabaseClient: SupabaseClient - - private lateinit var callback: (String, String) -> Unit - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - supabaseClient.handleDeeplinks(intent = intent, - onSessionSuccess = { userSession -> - Log.d("LOGIN", "Log in successfully with user info: ${userSession.user}") - userSession.user?.apply { - callback(email ?: "", createdAt.toString()) - } - }) - setContent { - val navController = rememberNavController() - val emailState = remember { mutableStateOf("") } - val createdAtState = remember { mutableStateOf("") } - LaunchedEffect(Unit) { - callback = { email, created -> - emailState.value = email - createdAtState.value = created - } - } - ManageProductsTheme { - Surface( - modifier = Modifier.fillMaxSize(), - color = MaterialTheme.colorScheme.background - ) { - SignInSuccessScreen( - modifier = Modifier.padding(20.dp), - navController = navController, - email = emailState.value, - createdAt = createdAtState.value, - onClick = { navigateToMainApp() } - ) - } - } - } - } - - private fun navigateToMainApp() { - val intent = Intent(this, MainActivity::class.java).apply { - flags = Intent.FLAG_ACTIVITY_CLEAR_TOP - } - startActivity(intent) - } -} - diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/MainActivity.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/MainActivity.kt deleted file mode 100644 index da28bf02ef979..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/MainActivity.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.example.manageproducts - -import android.os.Bundle -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.currentBackStackEntryAsState -import androidx.navigation.compose.rememberNavController -import com.example.manageproducts.presentation.navigation.ProductListDestination -import com.example.manageproducts.presentation.navigation.navRegistration -import com.example.manageproducts.ui.theme.ManageProductsTheme -import dagger.hilt.android.AndroidEntryPoint - -@AndroidEntryPoint -class MainActivity : ComponentActivity() { - @OptIn(ExperimentalMaterial3Api::class) - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContent { - ManageProductsTheme { - // A surface container using the 'background' color from the theme - val navController = rememberNavController() - val currentBackStack by navController.currentBackStackEntryAsState() - val currentDestination = currentBackStack?.destination - Scaffold { innerPadding -> - NavHost( - navController, - startDestination = ProductListDestination.route, - Modifier.padding(innerPadding) - ) { - navRegistration(navController) - } - } - } - } - } -} - -@Composable -fun Greeting(name: String) { - Text(text = "Hello $name!") -} - -@Preview(showBackground = true) -@Composable -fun DefaultPreview() { - ManageProductsTheme { - Greeting("Android") - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ManageProductApplication.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ManageProductApplication.kt deleted file mode 100644 index 664636731ebe4..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ManageProductApplication.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.manageproducts - -import android.app.Application -import dagger.hilt.android.HiltAndroidApp - -@HiltAndroidApp -class ManageProductApplication: Application() \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/network/dto/ProductDto.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/network/dto/ProductDto.kt deleted file mode 100644 index 3fcf772d9b7bf..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/network/dto/ProductDto.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.example.manageproducts.data.network.dto - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class ProductDto( - - @SerialName("name") - val name: String, - - @SerialName("price") - val price: Double, - - @SerialName("image") - val image: String? = "", - - @SerialName("id") - val id: String? = "", -) diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/AuthenticationRepository.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/AuthenticationRepository.kt deleted file mode 100644 index 3727734607ef3..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/AuthenticationRepository.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.manageproducts.data.repository - -interface AuthenticationRepository { - suspend fun signIn(email: String, password: String): Boolean - suspend fun signUp(email: String, password: String): Boolean - suspend fun signInWithGoogle(): Boolean -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/ProductRepository.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/ProductRepository.kt deleted file mode 100644 index 9a431cbfcfdf4..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/ProductRepository.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.manageproducts.data.repository - -import com.example.manageproducts.data.network.dto.ProductDto -import com.example.manageproducts.domain.model.Product - -interface ProductRepository { - suspend fun createProduct(product: Product): Boolean - suspend fun getProducts(): List? - suspend fun getProduct(id: String): ProductDto - suspend fun deleteProduct(id: String) - suspend fun updateProduct( - id: String, name: String, price: Double, imageName: String, imageFile: ByteArray - ) -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/impl/AuthenticationRepositoryImpl.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/impl/AuthenticationRepositoryImpl.kt deleted file mode 100644 index 4decea8877e84..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/impl/AuthenticationRepositoryImpl.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.example.manageproducts.data.repository.impl - -import com.example.manageproducts.data.repository.AuthenticationRepository -import io.github.jan.supabase.gotrue.GoTrue -import io.github.jan.supabase.gotrue.providers.builtin.Email -import javax.inject.Inject - -class AuthenticationRepositoryImpl @Inject constructor( - private val goTrue: GoTrue -) : AuthenticationRepository { - override suspend fun signIn(email: String, password: String): Boolean { - return try { - goTrue.loginWith(Email) { - this.email = email - this.password = password - } - true - } catch (e: Exception) { - false - } - } - - override suspend fun signUp(email: String, password: String): Boolean { - return try { - goTrue.signUpWith(Email) { - this.email = email - this.password = password - } - true - } catch (e: Exception) { - false - } - } - - override suspend fun signInWithGoogle(): Boolean { - return try { - goTrue.loginWith(Google) - true - } catch (e: Exception) { - false - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/impl/ProductRepositoryImpl.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/impl/ProductRepositoryImpl.kt deleted file mode 100644 index 7e0525070574d..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/data/repository/impl/ProductRepositoryImpl.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.example.manageproducts.data.repository.impl - -import com.example.manageproducts.BuildConfig -import com.example.manageproducts.data.network.dto.ProductDto -import com.example.manageproducts.data.repository.ProductRepository -import com.example.manageproducts.domain.model.Product -import io.github.jan.supabase.postgrest.Postgrest -import io.github.jan.supabase.storage.Storage -import javax.inject.Inject - -class ProductRepositoryImpl @Inject constructor( - private val postgrest: Postgrest, - private val storage: Storage, -) : ProductRepository { - override suspend fun createProduct(product: Product): Boolean { - return try { - val productDto = ProductDto( - name = product.name, - price = product.price, - ) - postgrest["products"].insert(productDto) - true - } catch (e: java.lang.Exception) { - throw e - } - } - - override suspend fun getProducts(): List? { - val result = postgrest["products"] - .select().decodeList() - return result - } - - - override suspend fun getProduct(id: String): ProductDto { - return postgrest["products"].select { - eq("id", id) - }.decodeSingle() - } - - override suspend fun deleteProduct(id: String) { - postgrest["products"].delete { - eq("id", id) - } - } - - override suspend fun updateProduct( - id: String, - name: String, - price: Double, - imageName: String, - imageFile: ByteArray - ) { - if (imageFile.isNotEmpty()) { - val imageUrl = - storage["Product%20Image"].upload( - path = "$imageName.png", - data = imageFile, - upsert = true - ) - postgrest["products"].update({ - set("name", name) - set("price", price) - set("image", buildImageUrl(imageFileName = imageUrl)) - }) { - eq("id", id) - } - } else { - postgrest["products"].update({ - set("name", name) - set("price", price) - }) { - eq("id", id) - } - } - } - - private fun buildImageUrl(imageFileName: String) = - "${BuildConfig.SUPABASE_URL}/storage/v1/object/public/${imageFileName}".replace(" ", "%20") -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/di/RepositoryModule.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/di/RepositoryModule.kt deleted file mode 100644 index 4988621fa08ad..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/di/RepositoryModule.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.manageproducts.di - -import com.example.manageproducts.data.repository.AuthenticationRepository -import com.example.manageproducts.data.repository.ProductRepository -import com.example.manageproducts.data.repository.impl.AuthenticationRepositoryImpl -import com.example.manageproducts.data.repository.impl.ProductRepositoryImpl -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent - -@InstallIn(SingletonComponent::class) -@Module -abstract class RepositoryModule { - - @Binds - abstract fun bindProductRepository(impl: ProductRepositoryImpl): ProductRepository - - @Binds - abstract fun bindAuthenticateRepository(impl: AuthenticationRepositoryImpl): AuthenticationRepository - -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/di/SupabaseModule.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/di/SupabaseModule.kt deleted file mode 100644 index c3a5eec2b3417..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/di/SupabaseModule.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.example.manageproducts.di - -import com.example.manageproducts.BuildConfig -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import io.github.jan.supabase.annotiations.SupabaseExperimental -import dagger.hilt.components.SingletonComponent -import io.github.jan.supabase.SupabaseClient -import io.github.jan.supabase.gotrue.FlowType -import io.github.jan.supabase.createSupabaseClient -import io.github.jan.supabase.gotrue.GoTrue -import io.github.jan.supabase.gotrue.gotrue -import io.github.jan.supabase.postgrest.Postgrest -import io.github.jan.supabase.postgrest.postgrest -import io.github.jan.supabase.storage.Storage -import io.github.jan.supabase.storage.storage -import javax.inject.Singleton - - -@InstallIn(SingletonComponent::class) -@Module -object SupabaseModule { - - @OptIn(SupabaseExperimental::class) - @Provides - @Singleton - fun provideSupabaseClient(): SupabaseClient { - return createSupabaseClient( - supabaseUrl = BuildConfig.SUPABASE_URL, - supabaseKey = BuildConfig.API_KEY - ) { - install(Postgrest) - install(GoTrue) { - flowType = FlowType.PKCE - scheme = "app" - host = "supabase.com" - } - install(Storage) - } - } - - @Provides - @Singleton - fun provideSupabaseDatabase(client: SupabaseClient): Postgrest { - return client.postgrest - } - - @Provides - @Singleton - fun provideSupabaseGoTrue(client: SupabaseClient): GoTrue { - return client.gotrue - } - - - @Provides - @Singleton - fun provideSupabaseStorage(client: SupabaseClient): Storage { - return client.storage - } - -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/di/UseCaseModule.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/di/UseCaseModule.kt deleted file mode 100644 index 20f6f92ad6cc7..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/di/UseCaseModule.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.example.manageproducts.di - -import com.example.manageproducts.domain.usecase.* -import com.example.manageproducts.domain.usecase.impl.* -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent - -@InstallIn(SingletonComponent::class) -@Module -abstract class UseCaseModule { - - @Binds - abstract fun bindGetProductsUseCase(impl: GetProductsUseCaseImpl): GetProductsUseCase - - @Binds - abstract fun bindCreateProductUseCase(impl: CreateProductUseCaseImpl): CreateProductUseCase - - @Binds - abstract fun bindGetProductDetailsUseCase(impl: GetProductDetailsUseCaseImpl): GetProductDetailsUseCase - - @Binds - abstract fun bindDeleteProductUseCase(impl: DeleteProductUseCaseImpl): DeleteProductUseCase - - @Binds - abstract fun bindUpdateProductUseCase(impl: UpdateProductUseCaseImpl): UpdateProductUseCase - - @Binds - abstract fun bindAuthenticateUseCase(impl: SignInUseCaseImpl): SignInUseCase - - @Binds - abstract fun bindSignUpUseCase(impl: SignUpUseCaseImpl): SignUpUseCase - - @Binds - abstract fun bindSignInWithGoogleUseCase(impl: SignInWithGoogleUseCaseImpl): SignInWithGoogleUseCase -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/model/Product.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/model/Product.kt deleted file mode 100644 index 2072b55b9a604..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/model/Product.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.manageproducts.domain.model - -data class Product( - val id: String, - val name: String, - val price: Double, - val image: String = "" -) diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/CreateProductUseCase.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/CreateProductUseCase.kt deleted file mode 100644 index 768ed01e1950f..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/CreateProductUseCase.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.manageproducts.domain.usecase - -import com.example.manageproducts.domain.model.Product - -interface CreateProductUseCase : UseCase { - class Input(val product: Product) - sealed class Output { - class Success(val result: Boolean) : Output() - open class Failure : Output() { - object Conflict : Failure() - object Unauthorized : Failure() - object BadRequest : Failure() - object InternalError : Failure() - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/DeleteProductUseCase.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/DeleteProductUseCase.kt deleted file mode 100644 index b9fe9bf9535c2..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/DeleteProductUseCase.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.example.manageproducts.domain.usecase - -interface DeleteProductUseCase: UseCase { - class Input(val productId: String) - - sealed class Output { - object Success: Output() - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/GetProductDetailsUseCase.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/GetProductDetailsUseCase.kt deleted file mode 100644 index f012e15e5f8fd..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/GetProductDetailsUseCase.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.manageproducts.domain.usecase - -import com.example.manageproducts.domain.model.Product - -interface GetProductDetailsUseCase : - UseCase { - class Input(val id: String) - sealed class Output { - class Success(val data: Product): Output() - object Failure : Output() - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/GetProductsUseCase.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/GetProductsUseCase.kt deleted file mode 100644 index 36fc89e1ed38a..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/GetProductsUseCase.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.manageproducts.domain.usecase - -import com.example.manageproducts.domain.model.Product - -interface GetProductsUseCase : UseCase { - sealed class Output { - class Success(val data: List): Output() - object Failure : Output() - } - -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/SignInUseCase.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/SignInUseCase.kt deleted file mode 100644 index aab4986f40562..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/SignInUseCase.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.example.manageproducts.domain.usecase - -interface SignInUseCase : UseCase { - class Input(val email: String, val password: String) - sealed class Output() { - object Success : Output() - object Failure : Output() - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/SignInWithGoogleUseCase.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/SignInWithGoogleUseCase.kt deleted file mode 100644 index 09c0aa651a6a3..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/SignInWithGoogleUseCase.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.manageproducts.domain.usecase - -interface SignInWithGoogleUseCase: UseCase { - class Input - - class Output -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/SignUpUseCase.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/SignUpUseCase.kt deleted file mode 100644 index 05d89b4e15a63..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/SignUpUseCase.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.example.manageproducts.domain.usecase - -interface SignUpUseCase: UseCase { - class Input(val email: String, val password: String) - sealed class Output { - object Success: Output() - object Failure: Output() - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/UpdateProductUseCase.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/UpdateProductUseCase.kt deleted file mode 100644 index e62781ac45145..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/UpdateProductUseCase.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.manageproducts.domain.usecase - -interface UpdateProductUseCase : UseCase { - class Input( - val id: String, - val name: String, - val price: Double, - val imageName: String, - val imageFile: ByteArray, - ) - - sealed class Output() { - object Success : Output() - object Failure : Output() - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/UseCase.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/UseCase.kt deleted file mode 100644 index 90c37002815e9..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/UseCase.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.example.manageproducts.domain.usecase - -interface UseCase { - suspend fun execute(input: InputT): OutputT -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/CreateProductUseCaseImpl.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/CreateProductUseCaseImpl.kt deleted file mode 100644 index 806a386b1db8f..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/CreateProductUseCaseImpl.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.example.manageproducts.domain.usecase.impl - -import com.example.manageproducts.data.repository.ProductRepository -import com.example.manageproducts.domain.usecase.CreateProductUseCase -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import java.net.HttpURLConnection -import javax.inject.Inject - -class CreateProductUseCaseImpl @Inject constructor( - private val productRepository: ProductRepository, -) : CreateProductUseCase { - override suspend fun execute(input: CreateProductUseCase.Input): CreateProductUseCase.Output { - return try { - withContext(Dispatchers.IO) { - val result = productRepository.createProduct(product = input.product) - if (result) { - CreateProductUseCase.Output.Success(result = result) - } else { - CreateProductUseCase.Output.Failure() - } - } - } catch (e: Exception) { - return CreateProductUseCase.Output.Failure.Conflict - - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/DeleteProductUseCaseImpl.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/DeleteProductUseCaseImpl.kt deleted file mode 100644 index ce454c3d73af5..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/DeleteProductUseCaseImpl.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.manageproducts.domain.usecase.impl - -import com.example.manageproducts.data.repository.ProductRepository -import com.example.manageproducts.domain.usecase.DeleteProductUseCase -import javax.inject.Inject - -class DeleteProductUseCaseImpl @Inject constructor( - private val productRepository: ProductRepository -) : DeleteProductUseCase { - override suspend fun execute(input: DeleteProductUseCase.Input): DeleteProductUseCase.Output { - productRepository.deleteProduct(input.productId) - return DeleteProductUseCase.Output.Success - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/GetProductDetailsUseCaseImpl.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/GetProductDetailsUseCaseImpl.kt deleted file mode 100644 index 2fa94333d9b33..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/GetProductDetailsUseCaseImpl.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.manageproducts.domain.usecase.impl - -import com.example.manageproducts.data.repository.ProductRepository -import com.example.manageproducts.domain.model.Product -import com.example.manageproducts.domain.usecase.GetProductDetailsUseCase -import javax.inject.Inject - -class GetProductDetailsUseCaseImpl @Inject constructor( - private val productRepository: ProductRepository, -) : GetProductDetailsUseCase { - override suspend fun execute(input: GetProductDetailsUseCase.Input): GetProductDetailsUseCase.Output { - val result = productRepository.getProduct(input.id) - return GetProductDetailsUseCase.Output.Success( - data = Product( - id = result.id ?: "", - name = result.name, - price = result.price, - image = result.image ?: "", - ) - ) - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/GetProductsUseCaseImpl.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/GetProductsUseCaseImpl.kt deleted file mode 100644 index bea6ea0d52fc1..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/GetProductsUseCaseImpl.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.example.manageproducts.domain.usecase.impl - -import com.example.manageproducts.data.repository.ProductRepository -import com.example.manageproducts.domain.model.Product -import com.example.manageproducts.domain.usecase.GetProductsUseCase -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import javax.inject.Inject - -class GetProductsUseCaseImpl @Inject constructor( - private val productRepository: ProductRepository, -) : GetProductsUseCase { - override suspend fun execute(input: Unit): GetProductsUseCase.Output = - withContext(Dispatchers.IO) { - val result = productRepository.getProducts() - return@withContext result?.let { it -> - GetProductsUseCase.Output.Success(data = it.map { - Product( - id = it.id ?: "", - name = it.name, - price = it.price, - image = it.image ?: "" - ) - }) - } ?: GetProductsUseCase.Output.Failure - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/SignInUseCaseImpl.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/SignInUseCaseImpl.kt deleted file mode 100644 index ac94b37200d16..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/SignInUseCaseImpl.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.manageproducts.domain.usecase.impl - -import com.example.manageproducts.data.repository.AuthenticationRepository -import com.example.manageproducts.domain.usecase.SignInUseCase -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import javax.inject.Inject - -class SignInUseCaseImpl @Inject constructor( - private val authenticationRepository: AuthenticationRepository -) : SignInUseCase { - override suspend fun execute(input: SignInUseCase.Input): SignInUseCase.Output { - return withContext(Dispatchers.IO) { - val result = authenticationRepository.signIn(input.email, input.password) - if (result) { - SignInUseCase.Output.Success - } else { - SignInUseCase.Output.Failure - } - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/SignInWithGoogleUseCaseImpl.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/SignInWithGoogleUseCaseImpl.kt deleted file mode 100644 index 57998fbb6fd30..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/SignInWithGoogleUseCaseImpl.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.example.manageproducts.domain.usecase.impl - -import com.example.manageproducts.data.repository.AuthenticationRepository -import com.example.manageproducts.domain.usecase.SignInWithGoogleUseCase -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import javax.inject.Inject - -class SignInWithGoogleUseCaseImpl @Inject constructor( - private val authenticationRepository: AuthenticationRepository, -): SignInWithGoogleUseCase { - override suspend fun execute(input: SignInWithGoogleUseCase.Input): SignInWithGoogleUseCase.Output { - return withContext(Dispatchers.IO) { - authenticationRepository.signInWithGoogle() - SignInWithGoogleUseCase.Output() - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/SignUpUseCaseImpl.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/SignUpUseCaseImpl.kt deleted file mode 100644 index fc60fcb91955a..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/SignUpUseCaseImpl.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.example.manageproducts.domain.usecase.impl - -import com.example.manageproducts.data.repository.AuthenticationRepository -import com.example.manageproducts.domain.usecase.SignUpUseCase -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import javax.inject.Inject - -class SignUpUseCaseImpl @Inject constructor( - private val authenticationRepository: AuthenticationRepository -) : SignUpUseCase { - override suspend fun execute(input: SignUpUseCase.Input): SignUpUseCase.Output = - withContext(Dispatchers.IO) { - val result = authenticationRepository.signUp(input.email, input.password) - if (result) { - SignUpUseCase.Output.Success - } else { - SignUpUseCase.Output.Failure - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/UpdateProductUseCaseImpl.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/UpdateProductUseCaseImpl.kt deleted file mode 100644 index 60fac7586f388..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/domain/usecase/impl/UpdateProductUseCaseImpl.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.example.manageproducts.domain.usecase.impl - -import com.example.manageproducts.data.repository.ProductRepository -import com.example.manageproducts.domain.usecase.UpdateProductUseCase -import javax.inject.Inject - -class UpdateProductUseCaseImpl @Inject constructor( - private val productRepository: ProductRepository -) : UpdateProductUseCase { - override suspend fun execute(input: UpdateProductUseCase.Input): UpdateProductUseCase.Output { - productRepository.updateProduct( - id = input.id, name = input.name, price = input.price, - imageName = input.imageName, imageFile = input.imageFile - ) - return UpdateProductUseCase.Output.Success - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/AddProductContract.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/AddProductContract.kt deleted file mode 100644 index d34d0d0acfc79..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/AddProductContract.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.manageproducts.presentation.feature.addproduct - -import com.example.manageproducts.domain.usecase.CreateProductUseCase -import kotlinx.coroutines.flow.Flow - -interface AddProductContract { - - val navigateAddProductSuccess: Flow - val isLoading: Flow - val showSuccessMessage: Flow - fun onCreateProduct(name: String, price: Double) - fun onAddMoreProductSelected() - fun onRetrySelected() -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/AddProductScreen.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/AddProductScreen.kt deleted file mode 100644 index 68b6abdd10b5d..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/AddProductScreen.kt +++ /dev/null @@ -1,189 +0,0 @@ -package com.example.manageproducts.presentation.feature.addproduct - -import android.annotation.SuppressLint -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.TopAppBar -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material3.* -import androidx.compose.material3.Button -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.OutlinedButton -import androidx.compose.material3.Text -import androidx.compose.runtime.* -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.input.KeyboardType -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.navigation.NavController -import com.example.manageproducts.R -import com.example.manageproducts.domain.usecase.CreateProductUseCase -import com.example.manageproducts.presentation.feature.addproduct.composables.FailScreen -import com.example.manageproducts.presentation.feature.addproduct.composables.LoadingScreen -import com.example.manageproducts.presentation.feature.addproduct.composables.SuccessScreen - -@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun AddProductScreen( - modifier: Modifier = Modifier, - navController: NavController, - viewModel: AddProductViewModel = hiltViewModel(), -) { - Scaffold( - topBar = { - TopAppBar( - navigationIcon = { - IconButton(onClick = { - navController.navigateUp() - }) { - Icon( - imageVector = Icons.Filled.ArrowBack, - contentDescription = null, - tint = MaterialTheme.colorScheme.onPrimary - ) - } - }, - backgroundColor = MaterialTheme.colorScheme.primary, - title = { - Text( - text = stringResource(R.string.add_product_text_screen_title), - color = MaterialTheme.colorScheme.onPrimary, - ) - }, - ) - } - ) { padding -> - val navigateAddProductSuccess = - viewModel.navigateAddProductSuccess.collectAsState(initial = null).value - val isLoading = - viewModel.isLoading.collectAsState(initial = null).value - if (isLoading == true) { - LoadingScreen(message = "Adding Product", - onCancelSelected = { - navController.navigateUp() - }) - } else { - when (navigateAddProductSuccess) { - null -> { - Column( - modifier = modifier - .padding(padding) - .padding(16.dp) - .fillMaxSize() - ) { - val name = rememberSaveable { mutableStateOf("") } - val price = rememberSaveable { mutableStateOf("") } - OutlinedTextField( - label = { - Text( - text = "Product name", - color = MaterialTheme.colorScheme.primary, - style = MaterialTheme.typography.titleMedium - ) - }, - maxLines = 2, - shape = RoundedCornerShape(32), - modifier = modifier.fillMaxWidth(), - value = name.value, - onValueChange = { - name.value = it - }, - ) - Spacer(modifier = modifier.height(12.dp)) - OutlinedTextField( - label = { - Text( - text = "Product price", - color = MaterialTheme.colorScheme.primary, - style = MaterialTheme.typography.titleMedium - ) - }, - maxLines = 2, - shape = RoundedCornerShape(32), - modifier = modifier.fillMaxWidth(), - value = price.value, - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), - onValueChange = { - price.value = it - }, - ) - Spacer(modifier = modifier.height(12.dp)) - Spacer(modifier = modifier.weight(1f)) - OutlinedButton( - modifier = modifier - .fillMaxWidth(), - onClick = { - navController.navigateUp() - }) { - Text(text = "Cancel") - } - Spacer(modifier = modifier.height(12.dp)) - Button( - modifier = modifier.fillMaxWidth(), - onClick = { - viewModel.onCreateProduct( - name = name.value, - price = if (price.value.isEmpty()) 0.0 else price.value.trim() - .toDouble(), - ) - }) { - Text(text = "Add Product") - } - } - } - is CreateProductUseCase.Output.Success -> { - SuccessScreen( - message = "Product added", - onMoreAction = { - viewModel.onAddMoreProductSelected() - }, - onNavigateBack = { - navController.navigateUp() - }) - } - is CreateProductUseCase.Output.Failure -> { - val resonMessage = rememberSaveable { - mutableStateOf(handleError(navigateAddProductSuccess)) - } - FailScreen(modifier = modifier.padding(16.dp), - message = "Fail to Add Product", - reason = resonMessage.value, - onRetrySelected = { - viewModel.onRetrySelected() - }, - onNavigateBack = { navController.navigateUp() } - ) - } - - } - } - - } -} - -private fun handleError(failResult: CreateProductUseCase.Output.Failure): String { - return when (failResult) { - is CreateProductUseCase.Output.Failure.InternalError -> { - "Internal Error" - } - is CreateProductUseCase.Output.Failure.BadRequest -> { - "Bad request" - } - is CreateProductUseCase.Output.Failure.Conflict -> { - "Conflict" - } - is CreateProductUseCase.Output.Failure.Unauthorized -> { - "Unauthorized" - } - else -> { - "Internal Error" - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/AddProductViewModel.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/AddProductViewModel.kt deleted file mode 100644 index e78d57fb38c7e..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/AddProductViewModel.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.example.manageproducts.presentation.feature.addproduct - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.example.manageproducts.domain.model.Product -import com.example.manageproducts.domain.usecase.CreateProductUseCase -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.launch -import java.util.UUID -import javax.inject.Inject - -@HiltViewModel -class AddProductViewModel @Inject constructor( - private val createProductUseCase: CreateProductUseCase, -) : ViewModel(), AddProductContract { - - private val _navigateAddProductSuccess = MutableStateFlow(null) - override val navigateAddProductSuccess: Flow = - _navigateAddProductSuccess - - private val _isLoading = MutableStateFlow(false) - override val isLoading: Flow = _isLoading - - private val _showSuccessMessage = MutableStateFlow(false) - override val showSuccessMessage: Flow = _showSuccessMessage - override fun onCreateProduct(name: String, price: Double) { - if (name.isEmpty() || price <= 0) return - viewModelScope.launch { - _isLoading.value = true - val product = Product( - id = UUID.randomUUID().toString(), - name = name, - price = price, - ) - when (val result = - createProductUseCase.execute(CreateProductUseCase.Input(product = product))) { - is CreateProductUseCase.Output.Success -> { - _isLoading.value = false - _showSuccessMessage.emit(true) - _navigateAddProductSuccess.value = result - } - is CreateProductUseCase.Output.Failure -> { - _isLoading.value = false - _navigateAddProductSuccess.value = result - } - } - - } - } - - override fun onAddMoreProductSelected() { - _navigateAddProductSuccess.value = null - } - - override fun onRetrySelected() { - _navigateAddProductSuccess.value = null - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/composables/FailScreen.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/composables/FailScreen.kt deleted file mode 100644 index a5e40791880b4..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/composables/FailScreen.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.example.manageproducts.presentation.feature.addproduct.composables - -import androidx.compose.foundation.layout.* -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.OutlinedButton -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp - -@Composable -fun FailScreen( - modifier: Modifier = Modifier, - message: String, - reason: String, - onRetrySelected: () -> Unit, - onNavigateBack: () -> Unit, -) { - - Column( - modifier = modifier - .padding(16.dp), - horizontalAlignment = Alignment.CenterHorizontally) { - Icon(imageVector = Icons.Filled.Close, contentDescription = null, - modifier = modifier.size(128.dp), - tint = Color.Red) - Text(text = message, - style = MaterialTheme.typography.titleLarge) - Spacer(modifier = modifier.height(24.dp)) - Text(text = reason) - Spacer(modifier = modifier.height(24.dp)) - OutlinedButton( - modifier = modifier - .fillMaxWidth(), - onClick = onRetrySelected) { - Text(text = "Retry") - } - Spacer(modifier = modifier.height(12.dp)) - OutlinedButton( - modifier = modifier - .fillMaxWidth(), - onClick = onNavigateBack) { - Text(text = "Cancel") - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/composables/LoadingScreen.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/composables/LoadingScreen.kt deleted file mode 100644 index 7a861d554940e..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/composables/LoadingScreen.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.example.manageproducts.presentation.feature.addproduct.composables - -import androidx.compose.foundation.layout.* -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.OutlinedButton -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp - -@Composable -fun LoadingScreen( - modifier: Modifier = Modifier, - message: String, - onCancelSelected: () -> Unit, -) { - Column( - modifier = modifier - .padding(16.dp), - horizontalAlignment = Alignment.CenterHorizontally) { - CircularProgressIndicator(modifier = modifier.size(64.dp)) - Text(text = message, - style = MaterialTheme.typography.titleLarge) - Spacer(modifier = modifier.weight(1f)) - OutlinedButton( - modifier = modifier - .fillMaxWidth(), - onClick = onCancelSelected - ) { - Text(text = "Cancel") - } - } - -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/composables/SuccessScreen.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/composables/SuccessScreen.kt deleted file mode 100644 index 780ac68a50c2f..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/addproduct/composables/SuccessScreen.kt +++ /dev/null @@ -1,53 +0,0 @@ -package com.example.manageproducts.presentation.feature.addproduct.composables - -import androidx.compose.foundation.layout.* -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.CheckCircle -import androidx.compose.material3.* -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp - -@Composable -fun SuccessScreen( - modifier: Modifier = Modifier, - message: String, - onMoreAction: () -> Unit, - onNavigateBack: () -> Unit, -) { - Column( - modifier = modifier - .padding(24.dp) - .fillMaxHeight(), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Icon( - imageVector = Icons.Filled.CheckCircle, contentDescription = null, - modifier = modifier.size(128.dp), - tint = Color.Green - ) - Text( - text = message, - style = MaterialTheme.typography.titleLarge - ) - Spacer(modifier = modifier.weight(1.0f)) - OutlinedButton( - modifier = modifier - .fillMaxWidth(), - onClick = onMoreAction - ) { - Text(text = "Add More Product") - } - Spacer(modifier = modifier.height(12.dp)) - Spacer(modifier = modifier.height(12.dp)) - Button( - modifier = modifier - .fillMaxWidth(), - onClick = onNavigateBack - ) { - Text(text = "Done") - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productdetails/ProductDetailsContract.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productdetails/ProductDetailsContract.kt deleted file mode 100644 index 94c66684571f4..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productdetails/ProductDetailsContract.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.manageproducts.presentation.feature.productdetails - -import com.example.manageproducts.domain.model.Product -import kotlinx.coroutines.flow.Flow - -interface ProductDetailsContract { - val product: Flow - val name: Flow - val price: Flow - val imageUrl: Flow - - fun onSaveProduct(image: ByteArray) - fun onImageChange(url: String) -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productdetails/ProductDetailsScreen.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productdetails/ProductDetailsScreen.kt deleted file mode 100644 index 578d93865ed06..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productdetails/ProductDetailsScreen.kt +++ /dev/null @@ -1,205 +0,0 @@ -package com.example.manageproducts.presentation.feature.productdetails - -import android.annotation.SuppressLint -import android.content.ContentResolver -import android.net.Uri -import androidx.activity.compose.rememberLauncherForActivityResult -import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.* -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Edit -import androidx.compose.material3.Button -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.OutlinedButton -import androidx.compose.material3.Text -import androidx.compose.runtime.* -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.input.KeyboardType -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.navigation.NavController -import coil.annotation.ExperimentalCoilApi -import coil.compose.rememberImagePainter -import com.example.manageproducts.R -import kotlinx.coroutines.launch -import java.io.ByteArrayOutputStream -import java.io.InputStream - -@OptIn(ExperimentalCoilApi::class) -@SuppressLint("UnusedMaterialScaffoldPaddingParameter") -@Composable -fun ProductDetailsScreen( - modifier: Modifier = Modifier, - viewModel: ProductDetailsViewModel = hiltViewModel(), - navController: NavController, - productId: String?, -) { - val snackBarHostState = remember { SnackbarHostState() } - val coroutineScope = rememberCoroutineScope() - - Scaffold( - snackbarHost = { SnackbarHost(snackBarHostState) }, - topBar = { - TopAppBar( - navigationIcon = { - IconButton(onClick = { - navController.navigateUp() - }) { - Icon( - imageVector = Icons.Filled.ArrowBack, - contentDescription = null, - tint = MaterialTheme.colorScheme.onPrimary - ) - } - }, - backgroundColor = MaterialTheme.colorScheme.primary, - title = { - Text( - text = stringResource(R.string.product_details_text_screen_title), - color = MaterialTheme.colorScheme.onPrimary, - ) - }, - ) - } - ) { - val name = viewModel.name.collectAsState(initial = "") - val price = viewModel.price.collectAsState(initial = 0.0) - var imageUrl = Uri.parse(viewModel.imageUrl.collectAsState(initial = "").value) - val contentResolver = LocalContext.current.contentResolver - - Column( - modifier = modifier - .padding(16.dp) - .fillMaxSize() - ) { - val galleryLauncher = - rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) - { uri -> - uri?.let { - if (it.toString() != imageUrl.toString()) { - viewModel.onImageChange(it.toString()) - } - } - } - - Image( - painter = rememberImagePainter(imageUrl), - contentScale = ContentScale.Fit, - contentDescription = null, - modifier = Modifier - .padding(16.dp, 8.dp) - .size(100.dp) - .align(Alignment.CenterHorizontally) - ) - IconButton(modifier = modifier.align(alignment = Alignment.CenterHorizontally), - onClick = { - galleryLauncher.launch("image/*") - }) { - Icon( - imageVector = Icons.Filled.Edit, - contentDescription = null, - tint = MaterialTheme.colorScheme.primary - ) - } - OutlinedTextField( - label = { - Text( - text = "Product name", - color = MaterialTheme.colorScheme.primary, - style = MaterialTheme.typography.titleMedium - ) - }, - maxLines = 2, - shape = RoundedCornerShape(32), - modifier = modifier.fillMaxWidth(), - value = name.value, - onValueChange = { - viewModel.onNameChange(it) - }, - ) - Spacer(modifier = modifier.height(12.dp)) - OutlinedTextField( - label = { - Text( - text = "Product price", - color = MaterialTheme.colorScheme.primary, - style = MaterialTheme.typography.titleMedium - ) - }, - maxLines = 2, - shape = RoundedCornerShape(32), - modifier = modifier.fillMaxWidth(), - value = price.value.toString(), - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), - onValueChange = { - viewModel.onPriceChange(it.toDouble()) - }, - ) - Spacer(modifier = modifier.weight(1f)) - Button( - modifier = modifier.fillMaxWidth(), - onClick = { - if (imageUrl.host?.contains("supabase") == true) { - viewModel.onSaveProduct(image = byteArrayOf()) - } else { - val image = uriToByteArray(contentResolver, imageUrl) - viewModel.onSaveProduct(image = image) - } - coroutineScope.launch { - snackBarHostState.showSnackbar( - message = "Product updated successfully !", - duration = SnackbarDuration.Short - ) - } - }) { - Text(text = "Save changes") - } - Spacer(modifier = modifier.height(12.dp)) - OutlinedButton( - modifier = modifier - .fillMaxWidth(), - onClick = { - navController.navigateUp() - }) { - Text(text = "Cancel") - } - - } - - } -} - - -private fun getBytes(inputStream: InputStream): ByteArray { - val byteBuffer = ByteArrayOutputStream() - val bufferSize = 1024 - val buffer = ByteArray(bufferSize) - var len = 0 - while (inputStream.read(buffer).also { len = it } != -1) { - byteBuffer.write(buffer, 0, len) - } - return byteBuffer.toByteArray() -} - - -private fun uriToByteArray(contentResolver: ContentResolver, uri: Uri): ByteArray { - if (uri == Uri.EMPTY) { - return byteArrayOf() - } - val inputStream = contentResolver.openInputStream(uri) - if (inputStream != null) { - return getBytes(inputStream) - } - return byteArrayOf() -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productdetails/ProductDetailsViewModel.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productdetails/ProductDetailsViewModel.kt deleted file mode 100644 index 4e25ec8fe6253..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productdetails/ProductDetailsViewModel.kt +++ /dev/null @@ -1,87 +0,0 @@ -package com.example.manageproducts.presentation.feature.productdetails - -import androidx.lifecycle.SavedStateHandle -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.example.manageproducts.domain.model.Product -import com.example.manageproducts.domain.usecase.GetProductDetailsUseCase -import com.example.manageproducts.domain.usecase.UpdateProductUseCase -import com.example.manageproducts.presentation.navigation.ProductDetailsDestination -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.launch -import javax.inject.Inject - -@HiltViewModel -class ProductDetailsViewModel @Inject constructor( - private val getProductDetailsUseCase: GetProductDetailsUseCase, - private val updateProductUseCase: UpdateProductUseCase, - savedStateHandle: SavedStateHandle, - ) : ViewModel(), ProductDetailsContract { - private val _product = MutableStateFlow(null) - override val product: Flow = _product - - private val _name = MutableStateFlow("") - override val name: Flow = _name - - private val _price = MutableStateFlow(0.0) - override val price: Flow = _price - - private val _imageUrl = MutableStateFlow("") - override val imageUrl: Flow = _imageUrl - - init { - val productId = savedStateHandle.get(ProductDetailsDestination.productId) - productId?.let { - getProduct(productId = it) - } - } - - private fun getProduct(productId: String) { - viewModelScope.launch { - val result = getProductDetailsUseCase.execute( - GetProductDetailsUseCase.Input( - id = productId - ) - ) - when (result) { - is GetProductDetailsUseCase.Output.Success -> { - _product.emit(result.data) - _name.emit(result.data.name) - _price.emit(result.data.price) - _imageUrl.emit(result.data.image) - } - is GetProductDetailsUseCase.Output.Failure -> { - - } - } - } - } - - fun onNameChange(name: String) { - _name.value = name - } - - fun onPriceChange(price: Double) { - _price.value = price - } - - override fun onSaveProduct(image: ByteArray) { - viewModelScope.launch { - updateProductUseCase.execute( - UpdateProductUseCase.Input( - id = _product.value?.id ?: "", - price = _price.value, - name = _name.value, - imageFile = image, - imageName = "image_${_product.value?.id}", - ) - ) - } - } - - override fun onImageChange(url: String) { - _imageUrl.value = url - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListContract.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListContract.kt deleted file mode 100644 index 881c345babf50..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListContract.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.manageproducts.presentation.feature.productlist - -import com.example.manageproducts.domain.model.Product -import kotlinx.coroutines.flow.Flow - -interface ProductListContract { - val productList: Flow?> - fun removeItem(product: Product) - fun getProducts() -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListItem.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListItem.kt deleted file mode 100644 index 39e9c9632d51a..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListItem.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.example.manageproducts.presentation.feature.productlist - -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Card -import androidx.compose.material.ExperimentalMaterialApi -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.unit.dp -import coil.annotation.ExperimentalCoilApi -import coil.compose.rememberImagePainter -import com.example.manageproducts.domain.model.Product - -@OptIn(ExperimentalMaterialApi::class, ExperimentalCoilApi::class) -@Composable -fun ProductListItem( - modifier: Modifier = Modifier, - product: Product, - onClick: () -> Unit -) { - Card( - modifier = modifier - .padding(4.dp) - .fillMaxWidth(), - elevation = 8.dp, - shape = RoundedCornerShape(12.dp), - onClick = onClick - ) { - Row( - modifier = modifier.padding(10.dp), - horizontalArrangement = Arrangement.SpaceBetween - ) { - Image( - contentDescription = null, - painter = rememberImagePainter(product.image), - contentScale = ContentScale.Fit, - modifier = Modifier - .padding(16.dp, 8.dp) - .size(64.dp) - ) - Text( - text = product.name, - modifier = modifier.weight(1.0f) - ) - Text( - text = "$${product.price}", - style = MaterialTheme.typography.titleMedium, - color = MaterialTheme.colorScheme.primary - ) - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListScreen.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListScreen.kt deleted file mode 100644 index aab33646ed239..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListScreen.kt +++ /dev/null @@ -1,178 +0,0 @@ -package com.example.manageproducts.presentation.feature.productlist - -import android.annotation.SuppressLint -import androidx.compose.animation.animateColorAsState -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.material.* -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add -import androidx.compose.material.icons.filled.Delete -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.FloatingActionButton -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.* -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalLifecycleOwner -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleEventObserver -import androidx.lifecycle.LifecycleOwner -import androidx.navigation.NavController -import com.example.manageproducts.R -import com.example.manageproducts.presentation.navigation.AddProductDestination -import com.example.manageproducts.presentation.navigation.AuthenticationDestination -import com.example.manageproducts.presentation.navigation.ProductDetailsDestination -import com.google.accompanist.swiperefresh.SwipeRefresh -import com.google.accompanist.swiperefresh.rememberSwipeRefreshState - -@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") -@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterialApi::class) -@Composable -fun ProductListScreen( - modifier: Modifier = Modifier, - navController: NavController, - viewModel: ProductListViewModel = hiltViewModel(), -) { - val isLoading by viewModel.isLoading.collectAsState(initial = false) - val swipeRefreshState = rememberSwipeRefreshState(isRefreshing = isLoading) - val lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current - // If `lifecycleOwner` changes, dispose and reset the effect - DisposableEffect(lifecycleOwner) { - // Create an observer that triggers our remembered callbacks - // for sending analytics events - val observer = LifecycleEventObserver { _, event -> - if (event == Lifecycle.Event.ON_START) { - viewModel.getProducts() - } - } - // Add the observer to the lifecycle - lifecycleOwner.lifecycle.addObserver(observer) - - // When the effect leaves the Composition, remove the observer - onDispose { - lifecycleOwner.lifecycle.removeObserver(observer) - } - } - SwipeRefresh(state = swipeRefreshState, onRefresh = { viewModel.getProducts() }) { - Scaffold( - topBar = { - TopAppBar( - backgroundColor = MaterialTheme.colorScheme.primary, - title = { - Text( - text = stringResource(R.string.product_list_text_screen_title), - color = MaterialTheme.colorScheme.onPrimary, - ) - }, - ) - }, - floatingActionButton = { - AddProductButton(onClick = { navController.navigate(AddProductDestination.route) }) - } - ) { padding -> - Column(modifier = modifier.padding(paddingValues = padding)) { - androidx.compose.material3.Button(modifier = modifier.fillMaxWidth().padding(20.dp), onClick = { - navController.navigate(AuthenticationDestination.route) - }) { - Text("Authentication feature") - } - - val productList = viewModel.productList.collectAsState(initial = listOf()).value - if (!productList.isNullOrEmpty()) { - LazyColumn( - modifier = modifier.padding(padding), - contentPadding = PaddingValues(5.dp) - ) { - itemsIndexed( - items = productList, - key = { _, product -> product.name }) { _, item -> - val state = rememberDismissState( - confirmStateChange = { - if (it == DismissValue.DismissedToStart) { - // Handle item removed - viewModel.removeItem(item) - } - true - } - ) - SwipeToDismiss( - state = state, - background = { - val color by animateColorAsState( - targetValue = when (state.dismissDirection) { - DismissDirection.StartToEnd -> MaterialTheme.colorScheme.primary - DismissDirection.EndToStart -> MaterialTheme.colorScheme.primary.copy( - alpha = 0.2f - ) - null -> Color.Transparent - } - ) - Box( - modifier = modifier - .fillMaxSize() - .background(color = color) - .padding(16.dp), - ) { - Icon( - imageVector = Icons.Filled.Delete, - contentDescription = null, - tint = MaterialTheme.colorScheme.primary, - modifier = modifier.align(Alignment.CenterEnd) - ) - } - - }, - dismissContent = { - ProductListItem( - product = item, - modifier = modifier, - onClick = { - navController.navigate( - ProductDetailsDestination.createRouteWithParam( - item.id - ) - ) - }, - ) - }, - directions = setOf(DismissDirection.EndToStart), - ) - } - } - } else { - Text("Product list is empty!") - } - } - - - } - } -} - -@Composable -private fun AddProductButton( - modifier: Modifier = Modifier, - onClick: () -> Unit, -) { - FloatingActionButton( - modifier = modifier, - onClick = onClick, - containerColor = MaterialTheme.colorScheme.primary, - contentColor = MaterialTheme.colorScheme.onPrimary - ) { - Icon( - imageVector = Icons.Filled.Add, - contentDescription = null, - ) - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListViewModel.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListViewModel.kt deleted file mode 100644 index a360fe811c57e..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/productlist/ProductListViewModel.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.example.manageproducts.presentation.feature.productlist - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.example.manageproducts.domain.model.Product -import com.example.manageproducts.domain.usecase.DeleteProductUseCase -import com.example.manageproducts.domain.usecase.GetProductsUseCase -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.launch -import javax.inject.Inject - -@HiltViewModel -class ProductListViewModel @Inject constructor( - private val getProductsUseCase: GetProductsUseCase, - private val deleteProductUseCase: DeleteProductUseCase, -) : ViewModel(), ProductListContract { - - private val _productList = MutableStateFlow?>(listOf()) - override val productList: Flow?> = _productList - - - private val _isLoading = MutableStateFlow(false) - val isLoading: Flow = _isLoading - - init { - getProducts() - } - - override fun getProducts() { - viewModelScope.launch { - when (val result = getProductsUseCase.execute(input = Unit)) { - is GetProductsUseCase.Output.Success -> { - _productList.emit(result.data) - } - is GetProductsUseCase.Output.Failure -> { - - } - } - } - } - - override fun removeItem(product: Product) { - viewModelScope.launch { - val newList = mutableListOf().apply { _productList.value?.let { addAll(it) } } - newList.remove(product) - _productList.emit(newList.toList()) - - // Call api to remove - deleteProductUseCase.execute(DeleteProductUseCase.Input(productId = product.id)) - // Then fetch again - getProducts() - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signin/SignInScreen.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signin/SignInScreen.kt deleted file mode 100644 index 08599c509a30e..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signin/SignInScreen.kt +++ /dev/null @@ -1,132 +0,0 @@ -package com.example.manageproducts.presentation.feature.signin - -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.SnackbarDuration -import androidx.compose.material.SnackbarHostState -import androidx.compose.material.TopAppBar -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material3.* -import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.ui.ExperimentalComposeUiApi -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalSoftwareKeyboardController -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.navigation.NavController -import com.example.manageproducts.presentation.navigation.SignUpDestination -import kotlinx.coroutines.launch - -@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class) -@Composable -fun SignInScreen( - modifier: Modifier = Modifier, - navController: NavController, - viewModel: SignInViewModel = hiltViewModel() -) { - val snackBarHostState = remember { SnackbarHostState() } - val coroutineScope = rememberCoroutineScope() - Scaffold( - snackbarHost = { androidx.compose.material.SnackbarHost(snackBarHostState) }, - topBar = { - TopAppBar( - navigationIcon = { - IconButton(onClick = { - navController.navigateUp() - }) { - Icon( - imageVector = Icons.Filled.ArrowBack, - contentDescription = null, - tint = MaterialTheme.colorScheme.onPrimary - ) - } - }, - backgroundColor = MaterialTheme.colorScheme.primary, - title = { - Text( - text = "Login", - color = MaterialTheme.colorScheme.onPrimary, - ) - }, - ) - } - ) { paddingValues -> - Column( - modifier = modifier - .padding(paddingValues) - .padding(20.dp) - ) { - val email = viewModel.email.collectAsState(initial = "") - val password = viewModel.password.collectAsState() - androidx.compose.material.OutlinedTextField( - label = { - Text( - text = "Email", - color = MaterialTheme.colorScheme.primary, - style = MaterialTheme.typography.titleMedium - ) - }, - maxLines = 1, - shape = RoundedCornerShape(32), - modifier = modifier.fillMaxWidth(), - value = email.value, - onValueChange = { - viewModel.onEmailChange(it) - }, - ) - androidx.compose.material.OutlinedTextField( - label = { - Text( - text = "Password", - color = MaterialTheme.colorScheme.primary, - style = MaterialTheme.typography.titleMedium - ) - }, - maxLines = 1, - shape = RoundedCornerShape(32), - modifier = modifier - .fillMaxWidth() - .padding(top = 12.dp), - value = password.value, - onValueChange = { - viewModel.onPasswordChange(it) - }, - ) - val localSoftwareKeyboardController = LocalSoftwareKeyboardController.current - Button(modifier = modifier - .fillMaxWidth() - .padding(top = 12.dp), - onClick = { - localSoftwareKeyboardController?.hide() - viewModel.onGoogleSignIn() - }) { - Text("Sign in with Google") - } - Button(modifier = modifier - .fillMaxWidth() - .padding(top = 12.dp), - onClick = { - viewModel.onSignIn() - coroutineScope.launch { - snackBarHostState.showSnackbar( - message = "Sign in successfully !", - duration = SnackbarDuration.Long - ) - } - }) { - Text("Sign in") - } - OutlinedButton(modifier = modifier - .fillMaxWidth() - .padding(top = 12.dp), onClick = { - navController.navigate(SignUpDestination.route) - }) { - Text("Sign up") - } - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signin/SignInSuccessScreen.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signin/SignInSuccessScreen.kt deleted file mode 100644 index 36f71e6f9da32..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signin/SignInSuccessScreen.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.example.manageproducts.presentation.feature.signin - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import androidx.navigation.NavController -import androidx.compose.material3.Text -import androidx.compose.material3.Button - -@Composable -fun SignInSuccessScreen( - navController: NavController, - modifier: Modifier = Modifier, - email: String, - createdAt: String, - onClick: () -> Unit = {}, -) { - Column(modifier = modifier.fillMaxWidth()) { - Text(text = "Sign in successfully!") - Text(text = "Email $email") - Text(text = "Created at $createdAt") - Button( - modifier = modifier - .fillMaxWidth() - .padding(top = 12.dp), - onClick = onClick - ) { - Text("Continue") - } - } -} diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signin/SignInViewModel.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signin/SignInViewModel.kt deleted file mode 100644 index 66f2bc9647e0b..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signin/SignInViewModel.kt +++ /dev/null @@ -1,59 +0,0 @@ -package com.example.manageproducts.presentation.feature.signin - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.example.manageproducts.domain.usecase.SignInUseCase -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.launch -import javax.inject.Inject - -@HiltViewModel -class SignInViewModel @Inject constructor( - private val signInUseCase: SignInUseCase, - private val signInWithGoogleUseCase: SignInWithGoogleUseCase, -) : ViewModel() { - - private val _email = MutableStateFlow("") - val email: Flow = _email - - private val _password = MutableStateFlow("") - val password = _password - - private val _message = MutableStateFlow("") - val message = _message - - fun onEmailChange(email: String) { - _email.value = email - } - - fun onPasswordChange(password: String) { - _password.value = password - } - - fun onSignIn() { - viewModelScope.launch { - val result = signInUseCase.execute( - SignInUseCase.Input( - email = _email.value, - password = _password.value - ) - ) - when (result) { - is SignInUseCase.Output.Success -> { - message.emit("Login successfully !") - } - else -> { - message.emit("Login failed !") - } - } - } - } - - fun onGoogleSignIn() { - viewModelScope.launch { - signInWithGoogleUseCase.execute(SignInWithGoogleUseCase.Input()) - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signup/SignUpScreen.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signup/SignUpScreen.kt deleted file mode 100644 index 9790c9bad96f2..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signup/SignUpScreen.kt +++ /dev/null @@ -1,119 +0,0 @@ -package com.example.manageproducts.presentation.feature.signup - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.OutlinedTextField -import androidx.compose.material.SnackbarDuration -import androidx.compose.material.SnackbarHostState -import androidx.compose.material.TopAppBar -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material3.* -import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.ui.ExperimentalComposeUiApi -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalSoftwareKeyboardController -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.navigation.NavController -import kotlinx.coroutines.launch - -@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class) -@Composable -fun SignUpScreen( - modifier: Modifier = Modifier, - navController: NavController, - viewModel: SignUpViewModel = hiltViewModel() -) { - val snackBarHostState = remember { SnackbarHostState() } - val coroutineScope = rememberCoroutineScope() - Scaffold( - snackbarHost = { androidx.compose.material.SnackbarHost(snackBarHostState) }, - topBar = { - TopAppBar( - navigationIcon = { - IconButton(onClick = { - navController.navigateUp() - }) { - Icon( - imageVector = Icons.Filled.ArrowBack, - contentDescription = null, - tint = MaterialTheme.colorScheme.onPrimary - ) - } - }, - backgroundColor = MaterialTheme.colorScheme.primary, - title = { - Text( - text = "Sign Up", - color = MaterialTheme.colorScheme.onPrimary, - ) - }, - ) - } - ) { paddingValues -> - Column( - modifier = modifier - .padding(paddingValues) - .padding(20.dp) - ) { - val email = viewModel.email.collectAsState(initial = "") - val password = viewModel.password.collectAsState() - OutlinedTextField( - label = { - Text( - text = "Email", - color = MaterialTheme.colorScheme.primary, - style = MaterialTheme.typography.titleMedium - ) - }, - maxLines = 1, - shape = RoundedCornerShape(32), - modifier = modifier.fillMaxWidth(), - value = email.value, - onValueChange = { - viewModel.onEmailChange(it) - }, - ) - OutlinedTextField( - label = { - Text( - text = "Password", - color = MaterialTheme.colorScheme.primary, - style = MaterialTheme.typography.titleMedium - ) - }, - maxLines = 1, - shape = RoundedCornerShape(32), - modifier = modifier - .fillMaxWidth() - .padding(top = 12.dp), - value = password.value, - onValueChange = { - viewModel.onPasswordChange(it) - }, - ) - val localSoftwareKeyboardController = LocalSoftwareKeyboardController.current - Button(modifier = modifier - .fillMaxWidth() - .padding(top = 12.dp), - onClick = { - localSoftwareKeyboardController?.hide() - viewModel.onSignUp() - coroutineScope.launch { - snackBarHostState.showSnackbar( - message = "Create account successfully. Sign in now!", - duration = SnackbarDuration.Long - ) - } - }) { - Text("Sign up") - } - } - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signup/SignUpViewModel.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signup/SignUpViewModel.kt deleted file mode 100644 index b845c5d75accb..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/feature/signup/SignUpViewModel.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.example.manageproducts.presentation.feature.signup - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.example.manageproducts.domain.usecase.SignUpUseCase -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.launch -import javax.inject.Inject - -@HiltViewModel -class SignUpViewModel @Inject constructor( - private val signUpUseCase: SignUpUseCase -) : ViewModel() { - - private val _email = MutableStateFlow("") - val email: Flow = _email - - private val _password = MutableStateFlow("") - val password = _password - - private val _message = MutableStateFlow("") - val message = _message - - fun onEmailChange(email: String) { - _email.value = email - } - - fun onPasswordChange(password: String) { - _password.value = password - } - - fun onSignUp() { - viewModelScope.launch { - val result = signUpUseCase.execute( - SignUpUseCase.Input( - email = _email.value, - password = _password.value - ) - ) - when (result) { - is SignUpUseCase.Output.Success -> { - _message.emit("Account created successfully!") - } - else -> { - _message.emit("Create account failed !") - - } - } - } - - } -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/navigation/Destination.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/navigation/Destination.kt deleted file mode 100644 index 8b15ed02d1dc4..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/navigation/Destination.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.example.manageproducts.presentation.navigation - -import androidx.navigation.NavType -import androidx.navigation.navArgument - - -interface Destination { - val route: String - val title: String -} - - -object ProductListDestination : Destination { - override val route = "product_list" - override val title = "Product List" -} - -object ProductDetailsDestination : Destination { - override val route = "product_details" - override val title = "Product Details" - const val productId = "product_id" - val arguments = listOf(navArgument(name = productId) { - type = NavType.StringType - }) - fun createRouteWithParam(productId: String) = "$route/${productId}" -} - -object AddProductDestination : Destination { - override val route = "add_product" - override val title = "Add Product" -} - -object AuthenticationDestination: Destination { - override val route = "authentication" - override val title = "Authentication" -} - -object SignUpDestination: Destination { - override val route = "signup" - override val title = "Sign Up" -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/navigation/NavRegister.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/navigation/NavRegister.kt deleted file mode 100644 index 69f937374e3fa..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/presentation/navigation/NavRegister.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.example.manageproducts.presentation.navigation - -import androidx.navigation.NavController -import androidx.navigation.NavGraphBuilder -import androidx.navigation.compose.composable -import com.example.manageproducts.presentation.feature.addproduct.AddProductScreen -import com.example.manageproducts.presentation.feature.signin.SignInScreen -import com.example.manageproducts.presentation.feature.productdetails.ProductDetailsScreen -import com.example.manageproducts.presentation.feature.productlist.ProductListScreen -import com.example.manageproducts.presentation.feature.signup.SignUpScreen - -fun NavGraphBuilder.navRegistration(navController: NavController) { - composable(ProductListDestination.route) { - ProductListScreen( - navController = navController - ) - } - - composable(AuthenticationDestination.route) { - SignInScreen( - navController = navController - ) - } - - composable(SignUpDestination.route) { - SignUpScreen( - navController = navController - ) - } - - composable(AddProductDestination.route) { - AddProductScreen( - navController = navController - ) - } - - - composable(route = "${ProductDetailsDestination.route}/{${ProductDetailsDestination.productId}}", - arguments = ProductDetailsDestination.arguments) { navBackStackEntry -> - val productName = - navBackStackEntry.arguments?.getString(ProductDetailsDestination.productId) - ProductDetailsScreen( - productId = productName, - navController = navController, - ) - } - -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ui/theme/Color.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ui/theme/Color.kt deleted file mode 100644 index ee8610408d368..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ui/theme/Color.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.manageproducts.ui.theme - -import androidx.compose.ui.graphics.Color - -val Purple80 = Color(0xFFD0BCFF) -val PurpleGrey80 = Color(0xFFCCC2DC) -val Pink80 = Color(0xFFEFB8C8) - -val Purple40 = Color(0xFF6650a4) -val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ui/theme/Theme.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ui/theme/Theme.kt deleted file mode 100644 index 7f6befdc86ef0..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ui/theme/Theme.kt +++ /dev/null @@ -1,68 +0,0 @@ -package com.example.manageproducts.ui.theme - -import android.app.Activity -import android.os.Build -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.dynamicDarkColorScheme -import androidx.compose.material3.dynamicLightColorScheme -import androidx.compose.material3.lightColorScheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView -import androidx.core.view.ViewCompat - -private val DarkColorScheme = darkColorScheme( - primary = Purple80, - secondary = PurpleGrey80, - tertiary = Pink80 -) - -private val LightColorScheme = lightColorScheme( - primary = Purple40, - secondary = PurpleGrey40, - tertiary = Pink40 - - /* Other default colors to override - background = Color(0xFFFFFBFE), - surface = Color(0xFFFFFBFE), - onPrimary = Color.White, - onSecondary = Color.White, - onTertiary = Color.White, - onBackground = Color(0xFF1C1B1F), - onSurface = Color(0xFF1C1B1F), - */ -) - -@Composable -fun ManageProductsTheme( - darkTheme: Boolean = isSystemInDarkTheme(), - // Dynamic color is available on Android 12+ - dynamicColor: Boolean = true, - content: @Composable () -> Unit -) { - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } - darkTheme -> DarkColorScheme - else -> LightColorScheme - } - val view = LocalView.current - if (!view.isInEditMode) { - SideEffect { - (view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb() - ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme - } - } - - MaterialTheme( - colorScheme = colorScheme, - typography = Typography, - content = content - ) -} \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ui/theme/Type.kt b/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ui/theme/Type.kt deleted file mode 100644 index a121b1a25e10b..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/java/com/example/manageproducts/ui/theme/Type.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.example.manageproducts.ui.theme - -import androidx.compose.material3.Typography -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp - -// Set of Material typography styles to start with -val Typography = Typography( - bodyLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.5.sp - ) - /* Other default text styles to override - titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), - labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) - */ -) \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/examples/product-sample-supabase-kt/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d11462a4..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/res/drawable/ic_launcher_background.xml b/examples/product-sample-supabase-kt/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9cbf141..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index eca70cfe52eac..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index eca70cfe52eac..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml deleted file mode 100644 index 6f3b755bf50c6..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index c209e78ecd372..0000000000000 Binary files a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index b2dfe3d1ba5cf..0000000000000 Binary files a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-mdpi/ic_launcher.webp deleted file mode 100644 index 4f0f1d64e58ba..0000000000000 Binary files a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp deleted file mode 100644 index 62b611da08167..0000000000000 Binary files a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 948a3070fe34c..0000000000000 Binary files a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 1b9a6956b3acd..0000000000000 Binary files a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 28d4b77f9f036..0000000000000 Binary files a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index 9287f5083623b..0000000000000 Binary files a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index aa7d6427e6fa1..0000000000000 Binary files a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ diff --git a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index 9126ae37cbc35..0000000000000 Binary files a/examples/product-sample-supabase-kt/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/examples/product-sample-supabase-kt/app/src/main/res/values/colors.xml b/examples/product-sample-supabase-kt/app/src/main/res/values/colors.xml deleted file mode 100644 index f8c6127d32762..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF000000 - #FFFFFFFF - \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/res/values/strings.xml b/examples/product-sample-supabase-kt/app/src/main/res/values/strings.xml deleted file mode 100644 index bf4e9fe7d7b76..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - ManageProducts - Product List - Product Details - Add Product - \ No newline at end of file diff --git a/examples/product-sample-supabase-kt/app/src/main/res/values/themes.xml b/examples/product-sample-supabase-kt/app/src/main/res/values/themes.xml deleted file mode 100644 index 2c9a78d5a472d..0000000000000 --- a/examples/product-sample-supabase-kt/app/src/main/res/values/themes.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/android/app/src/main/res/values/styles.xml b/examples/realtime/flutter-multiplayer-shooting-game/android/app/src/main/res/values/styles.xml deleted file mode 100644 index cb1ef88056edd..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/android/app/src/profile/AndroidManifest.xml b/examples/realtime/flutter-multiplayer-shooting-game/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index c1a90c7a8527e..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/android/build.gradle b/examples/realtime/flutter-multiplayer-shooting-game/android/build.gradle deleted file mode 100644 index 58a8c74b14743..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.7.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.2.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/examples/realtime/flutter-multiplayer-shooting-game/android/gradle.properties b/examples/realtime/flutter-multiplayer-shooting-game/android/gradle.properties deleted file mode 100644 index 94adc3a3f97aa..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true diff --git a/examples/realtime/flutter-multiplayer-shooting-game/android/gradle/wrapper/gradle-wrapper.properties b/examples/realtime/flutter-multiplayer-shooting-game/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 3c472b99c6f35..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/examples/realtime/flutter-multiplayer-shooting-game/android/settings.gradle b/examples/realtime/flutter-multiplayer-shooting-game/android/settings.gradle deleted file mode 100644 index 44e62bcf06ae6..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/android/settings.gradle +++ /dev/null @@ -1,11 +0,0 @@ -include ':app' - -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() - -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } - -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/examples/realtime/flutter-multiplayer-shooting-game/assets/images/background.jpg b/examples/realtime/flutter-multiplayer-shooting-game/assets/images/background.jpg deleted file mode 100644 index c101bbf4a6dac..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/assets/images/background.jpg and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/assets/images/opponent-bullet.png b/examples/realtime/flutter-multiplayer-shooting-game/assets/images/opponent-bullet.png deleted file mode 100644 index b48a3a845d28f..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/assets/images/opponent-bullet.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/assets/images/opponent.png b/examples/realtime/flutter-multiplayer-shooting-game/assets/images/opponent.png deleted file mode 100644 index 483d370942c55..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/assets/images/opponent.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/assets/images/player-bullet.png b/examples/realtime/flutter-multiplayer-shooting-game/assets/images/player-bullet.png deleted file mode 100644 index b688f8b04ac19..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/assets/images/player-bullet.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/assets/images/player.png b/examples/realtime/flutter-multiplayer-shooting-game/assets/images/player.png deleted file mode 100644 index 15548733bd8bf..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/assets/images/player.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/.gitignore b/examples/realtime/flutter-multiplayer-shooting-game/ios/.gitignore deleted file mode 100644 index 7a7f9873ad7dc..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Flutter/AppFrameworkInfo.plist b/examples/realtime/flutter-multiplayer-shooting-game/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 9625e105df39e..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 11.0 - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Flutter/Debug.xcconfig b/examples/realtime/flutter-multiplayer-shooting-game/ios/Flutter/Debug.xcconfig deleted file mode 100644 index ec97fc6f30212..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Flutter/Release.xcconfig b/examples/realtime/flutter-multiplayer-shooting-game/ios/Flutter/Release.xcconfig deleted file mode 100644 index c4855bfe2000b..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Podfile b/examples/realtime/flutter-multiplayer-shooting-game/ios/Podfile deleted file mode 100644 index 88359b225fa12..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Podfile +++ /dev/null @@ -1,41 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '11.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Podfile.lock b/examples/realtime/flutter-multiplayer-shooting-game/ios/Podfile.lock deleted file mode 100644 index f439848ae60bb..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Podfile.lock +++ /dev/null @@ -1,35 +0,0 @@ -PODS: - - app_links (0.0.1): - - Flutter - - Flutter (1.0.0) - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - url_launcher_ios (0.0.1): - - Flutter - -DEPENDENCIES: - - app_links (from `.symlinks/plugins/app_links/ios`) - - Flutter (from `Flutter`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - -EXTERNAL SOURCES: - app_links: - :path: ".symlinks/plugins/app_links/ios" - Flutter: - :path: Flutter - path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/ios" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - -SPEC CHECKSUMS: - app_links: ab4ba54d10a13d45825336bc9707b5eadee81191 - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852 - url_launcher_ios: ae1517e5e344f5544fb090b079e11f399dfbe4d2 - -PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 - -COCOAPODS: 1.11.3 diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.pbxproj b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 1246743553c54..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,551 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BE23484369E0A627E72B448C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B449CD597D82C8759DF3E2B7 /* Pods_Runner.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 704E3DD2DB644C18A6649B8B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A5EAF25F523BC10830465093 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - B449CD597D82C8759DF3E2B7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4C86A4EFA7674C82FEAA392 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BE23484369E0A627E72B448C /* Pods_Runner.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 27852139F92CD9F990CE4A71 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B449CD597D82C8759DF3E2B7 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 35EBDD9546014B9099FCEC6A /* Pods */ = { - isa = PBXGroup; - children = ( - C4C86A4EFA7674C82FEAA392 /* Pods-Runner.debug.xcconfig */, - A5EAF25F523BC10830465093 /* Pods-Runner.release.xcconfig */, - 704E3DD2DB644C18A6649B8B /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - 35EBDD9546014B9099FCEC6A /* Pods */, - 27852139F92CD9F990CE4A71 /* Frameworks */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 547CCC55113E27B88A271312 /* [CP] Check Pods Manifest.lock */, - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 80DF38846FB2DB612DDD07ED /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1300; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 547CCC55113E27B88A271312 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 80DF38846FB2DB612DDD07ED /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.flameRealtimeShooting; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.flameRealtimeShooting; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.flameRealtimeShooting; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6254f0..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d68d..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea15f..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index c87d15a335208..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcworkspace/contents.xcworkspacedata b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 21a3cc14c74e9..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d68d..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea15f..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/AppDelegate.swift b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a8c128..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index e882ab98894a4..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images": [ - { - "size": "20x20", - "idiom": "iphone", - "filename": "Icon-App-20x20@2x.png", - "scale": "2x" - }, - { - "size": "20x20", - "idiom": "iphone", - "filename": "Icon-App-20x20@3x.png", - "scale": "3x" - }, - { - "size": "29x29", - "idiom": "iphone", - "filename": "Icon-App-29x29@1x.png", - "scale": "1x" - }, - { - "size": "29x29", - "idiom": "iphone", - "filename": "Icon-App-29x29@2x.png", - "scale": "2x" - }, - { - "size": "29x29", - "idiom": "iphone", - "filename": "Icon-App-29x29@3x.png", - "scale": "3x" - }, - { - "size": "40x40", - "idiom": "iphone", - "filename": "Icon-App-40x40@2x.png", - "scale": "2x" - }, - { - "size": "40x40", - "idiom": "iphone", - "filename": "Icon-App-40x40@3x.png", - "scale": "3x" - }, - { - "size": "60x60", - "idiom": "iphone", - "filename": "Icon-App-60x60@2x.png", - "scale": "2x" - }, - { - "size": "60x60", - "idiom": "iphone", - "filename": "Icon-App-60x60@3x.png", - "scale": "3x" - }, - { - "size": "20x20", - "idiom": "ipad", - "filename": "Icon-App-20x20@1x.png", - "scale": "1x" - }, - { - "size": "20x20", - "idiom": "ipad", - "filename": "Icon-App-20x20@2x.png", - "scale": "2x" - }, - { - "size": "29x29", - "idiom": "ipad", - "filename": "Icon-App-29x29@1x.png", - "scale": "1x" - }, - { - "size": "29x29", - "idiom": "ipad", - "filename": "Icon-App-29x29@2x.png", - "scale": "2x" - }, - { - "size": "40x40", - "idiom": "ipad", - "filename": "Icon-App-40x40@1x.png", - "scale": "1x" - }, - { - "size": "40x40", - "idiom": "ipad", - "filename": "Icon-App-40x40@2x.png", - "scale": "2x" - }, - { - "size": "76x76", - "idiom": "ipad", - "filename": "Icon-App-76x76@1x.png", - "scale": "1x" - }, - { - "size": "76x76", - "idiom": "ipad", - "filename": "Icon-App-76x76@2x.png", - "scale": "2x" - }, - { - "size": "83.5x83.5", - "idiom": "ipad", - "filename": "Icon-App-83.5x83.5@2x.png", - "scale": "2x" - }, - { - "size": "1024x1024", - "idiom": "ios-marketing", - "filename": "Icon-App-1024x1024@1x.png", - "scale": "1x" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -} diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725e9b..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 7353c41ecf9ca..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 797d452e45897..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 6ed2d933e1120..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cd7b0099ca80..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index fe730945a01f6..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index 321773cd857a8..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 797d452e45897..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 502f463a9bc88..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index 0ec303439225b..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 0ec303439225b..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index e9f5fea27c705..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 84ac32ae7d989..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 8953cba090649..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 0467bf12aa4d2..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 781d7cdcac0f2..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "LaunchImage.png", - "scale": "1x" - }, - { - "idiom": "universal", - "filename": "LaunchImage@2x.png", - "scale": "2x" - }, - { - "idiom": "universal", - "filename": "LaunchImage@3x.png", - "scale": "3x" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -} diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad3b0..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b0..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b0..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index b5b843ad3b855..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Base.lproj/LaunchScreen.storyboard b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7c9390..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Base.lproj/Main.storyboard b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516fb38e..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Info.plist b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Info.plist deleted file mode 100644 index 463bc7fd16a59..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Info.plist +++ /dev/null @@ -1,51 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Flame Realtime Shooting - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - flame_realtime_shooting - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Runner-Bridging-Header.h b/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a560b42f..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/examples/realtime/flutter-multiplayer-shooting-game/lib/game/bullet.dart b/examples/realtime/flutter-multiplayer-shooting-game/lib/game/bullet.dart deleted file mode 100644 index a668c0f3c6097..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/lib/game/bullet.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'dart:async'; - -import 'package:flame/collisions.dart'; -import 'package:flame/components.dart'; -import 'package:flame/image_composition.dart' as flame_image; - -class Bullet extends PositionComponent with CollisionCallbacks, HasGameRef { - final Vector2 velocity; - - final flame_image.Image image; - - static const radius = 5.0; - - bool hasBeenHit = false; - - final bool isMine; - - /// Damage that it deals when it hits the player - final int damage = 5; - - Bullet({ - required this.isMine, - required this.velocity, - required this.image, - required Vector2 initialPosition, - }) : super(position: initialPosition); - - @override - Future? onLoad() async { - anchor = Anchor.center; - - width = radius * 2; - height = radius * 2; - - add(CircleHitbox() - ..collisionType = CollisionType.passive - ..anchor = Anchor.center); - - final sprite = - SpriteComponent.fromImage(image, size: Vector2.all(radius * 2)); - - add(sprite); - await super.onLoad(); - } - - @override - void update(double dt) { - super.update(dt); - position += velocity * dt; - - if (position.y < 0 || position.y > gameRef.size.y) { - removeFromParent(); - } - } -} diff --git a/examples/realtime/flutter-multiplayer-shooting-game/lib/game/game.dart b/examples/realtime/flutter-multiplayer-shooting-game/lib/game/game.dart deleted file mode 100644 index 93e8fc3b41b6a..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/lib/game/game.dart +++ /dev/null @@ -1,160 +0,0 @@ -import 'dart:async'; - -import 'package:flame/game.dart'; -import 'package:flame/components.dart'; -import 'package:flame/events.dart'; -import 'package:flame/image_composition.dart' as flame_image; -import 'package:flame_realtime_shooting/game/bullet.dart'; -import 'package:flame_realtime_shooting/game/player.dart'; -import 'package:flutter/material.dart'; - -class MyGame extends FlameGame with PanDetector, HasCollisionDetection { - MyGame({ - required this.onGameOver, - required this.onGameStateUpdate, - }); - - static const _initialHealthPoints = 100; - - /// Callback to notify the parent when the game ends. - final void Function(bool didWin) onGameOver; - - /// Callback for when the game state updates. - final void Function( - Vector2 position, - int health, - ) onGameStateUpdate; - - /// `Player` instance of the player - late Player _player; - - /// `Player` instance of the opponent - late Player _opponent; - - bool isGameOver = true; - - int _playerHealthPoint = _initialHealthPoints; - - late final flame_image.Image _playerBulletImage; - late final flame_image.Image _opponentBulletImage; - - @override - Color backgroundColor() { - return Colors.transparent; - } - - @override - Future? onLoad() async { - final playerImage = await images.load('player.png'); - _player = Player(isMe: true); - final spriteSize = Vector2.all(Player.radius * 2); - _player.add(SpriteComponent(sprite: Sprite(playerImage), size: spriteSize)); - add(_player); - - final opponentImage = await images.load('opponent.png'); - _opponent = Player(isMe: false); - _opponent.add(SpriteComponent.fromImage(opponentImage, size: spriteSize)); - add(_opponent); - - _playerBulletImage = await images.load('player-bullet.png'); - _opponentBulletImage = await images.load('opponent-bullet.png'); - - await super.onLoad(); - } - - @override - void onPanUpdate(DragUpdateInfo info) { - _player.move(info.delta.global); - final mirroredPosition = _player.getMirroredPercentPosition(); - onGameStateUpdate(mirroredPosition, _playerHealthPoint); - super.onPanUpdate(info); - } - - @override - void update(double dt) { - super.update(dt); - if (isGameOver) { - return; - } - for (final child in children) { - if (child is Bullet && child.hasBeenHit && !child.isMine) { - _playerHealthPoint = _playerHealthPoint - child.damage; - final mirroredPosition = _player.getMirroredPercentPosition(); - onGameStateUpdate(mirroredPosition, _playerHealthPoint); - _player.updateHealth(_playerHealthPoint / _initialHealthPoints); - } - } - if (_playerHealthPoint <= 0) { - endGame(false); - } - } - - void startNewGame() { - isGameOver = false; - _playerHealthPoint = _initialHealthPoints; - - for (final child in children) { - if (child is Player) { - child.position = child.initialPosition; - } else if (child is Bullet) { - child.removeFromParent(); - } - } - - _shootBullets(); - } - - /// shoots out bullets form both the player and the opponent. - /// - /// Calls itself every 500 milliseconds - Future _shootBullets() async { - await Future.delayed(const Duration(milliseconds: 500)); - - /// Player's bullet - final playerBulletInitialPosition = Vector2.copy(_player.position) - ..y -= Player.radius; - final playerBulletVelocities = [ - Vector2(0, -100), - Vector2(60, -80), - Vector2(-60, -80), - ]; - for (final bulletVelocity in playerBulletVelocities) { - add((Bullet( - isMine: true, - velocity: bulletVelocity, - image: _playerBulletImage, - initialPosition: playerBulletInitialPosition, - ))); - } - - /// Opponent's bullet - final opponentBulletInitialPosition = Vector2.copy(_opponent.position) - ..y += Player.radius; - final opponentBulletVelocities = [ - Vector2(0, 100), - Vector2(60, 80), - Vector2(-60, 80), - ]; - for (final bulletVelocity in opponentBulletVelocities) { - add((Bullet( - isMine: false, - velocity: bulletVelocity, - image: _opponentBulletImage, - initialPosition: opponentBulletInitialPosition, - ))); - } - - _shootBullets(); - } - - void updateOpponent({required Vector2 position, required int health}) { - _opponent.position = Vector2(size.x * position.x, size.y * position.y); - _opponent.updateHealth(health / _initialHealthPoints); - } - - /// Called when either the player or the opponent has run out of health points - void endGame(bool playerWon) { - isGameOver = true; - onGameOver(playerWon); - } -} diff --git a/examples/realtime/flutter-multiplayer-shooting-game/lib/game/player.dart b/examples/realtime/flutter-multiplayer-shooting-game/lib/game/player.dart deleted file mode 100644 index 0785b00f0fcf2..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/lib/game/player.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'dart:async'; - -import 'package:flame/collisions.dart'; -import 'package:flame/components.dart'; -import 'package:flame_realtime_shooting/game/bullet.dart'; -import 'package:flutter/material.dart'; - -class Player extends PositionComponent with HasGameRef, CollisionCallbacks { - Vector2 velocity = Vector2.zero(); - - late final Vector2 initialPosition; - - Player({required bool isMe}) : _isMyPlayer = isMe; - - /// Whether it's me or the opponent - final bool _isMyPlayer; - - static const radius = 30.0; - - @override - Future? onLoad() async { - anchor = Anchor.center; - width = radius * 2; - height = radius * 2; - - final initialX = gameRef.size.x / 2; - initialPosition = _isMyPlayer - ? Vector2(initialX, gameRef.size.y * 0.8) - : Vector2(initialX, gameRef.size.y * 0.2); - position = initialPosition; - - add(CircleHitbox()); - add(_Gauge()); - await super.onLoad(); - } - - void move(Vector2 delta) { - position += delta; - } - - void updateHealth(double healthLeft) { - for (final child in children) { - if (child is _Gauge) { - child._healthLeft = healthLeft; - } - } - } - - @override - void onCollision(Set intersectionPoints, PositionComponent other) { - super.onCollision(intersectionPoints, other); - if (other is Bullet && _isMyPlayer != other.isMine) { - other.hasBeenHit = true; - other.removeFromParent(); - } - } - - /// returns the mirrored percent position of the player - /// to be broadcasted to other clients - Vector2 getMirroredPercentPosition() { - final mirroredPosition = gameRef.size - position; - return Vector2(mirroredPosition.x / gameRef.size.x, - mirroredPosition.y / gameRef.size.y); - } -} - -class _Gauge extends PositionComponent { - double _healthLeft = 1.0; - - @override - FutureOr onLoad() { - final playerParent = parent; - if (playerParent is Player) { - width = playerParent.width; - height = 10; - anchor = Anchor.centerLeft; - position = Vector2(0, 0); - } - return super.onLoad(); - } - - @override - void render(Canvas canvas) { - super.render(canvas); - canvas.drawRect( - Rect.fromPoints( - const Offset(0, 0), - Offset(width, height), - ), - Paint()..color = Colors.white); - canvas.drawRect( - Rect.fromPoints( - const Offset(0, 0), - Offset(width * _healthLeft, height), - ), - Paint() - ..color = _healthLeft > 0.5 - ? Colors.green - : _healthLeft > 0.25 - ? Colors.orange - : Colors.red); - } -} diff --git a/examples/realtime/flutter-multiplayer-shooting-game/lib/main.dart b/examples/realtime/flutter-multiplayer-shooting-game/lib/main.dart deleted file mode 100644 index 11eadb2c4a316..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/lib/main.dart +++ /dev/null @@ -1,252 +0,0 @@ -import 'package:flame/game.dart'; -import 'package:flame_realtime_shooting/game/game.dart'; -import 'package:flutter/material.dart'; -import 'package:supabase_flutter/supabase_flutter.dart'; -import 'package:uuid/uuid.dart'; - -void main() async { - await Supabase.initialize( - url: 'supabaseUrl', - anonKey: 'supabaseAnonKey', - realtimeClientOptions: const RealtimeClientOptions(eventsPerSecond: 40), - ); - runApp(const MyApp()); -} - -final supabase = Supabase.instance.client; - -class MyApp extends StatelessWidget { - const MyApp({super.key}); - - @override - Widget build(BuildContext context) { - return const MaterialApp( - title: 'UFO Shooting Game', - debugShowCheckedModeBanner: false, - home: GamePage(), - ); - } -} - -class GamePage extends StatefulWidget { - const GamePage({Key? key}) : super(key: key); - - @override - State createState() => _GamePageState(); -} - -class _GamePageState extends State { - late final MyGame _game; - - /// Holds the RealtimeChannel to sync game states - RealtimeChannel? _gameChannel; - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Stack( - fit: StackFit.expand, - children: [ - Image.asset('assets/images/background.jpg', fit: BoxFit.cover), - GameWidget(game: _game), - ], - ), - ); - } - - @override - void initState() { - super.initState(); - _initialize(); - } - - Future _initialize() async { - _game = MyGame( - onGameStateUpdate: (position, health) async { - ChannelResponse response; - do { - response = await _gameChannel!.send( - type: RealtimeListenTypes.broadcast, - event: 'game_state', - payload: {'x': position.x, 'y': position.y, 'health': health}, - ); - - // wait for a frame to avoid infinite rate limiting loops - await Future.delayed(Duration.zero); - setState(() {}); - } while (response == ChannelResponse.rateLimited && health <= 0); - }, - onGameOver: (playerWon) async { - await showDialog( - barrierDismissible: false, - context: context, - builder: ((context) { - return AlertDialog( - title: Text(playerWon ? 'You Won!' : 'You lost...'), - actions: [ - TextButton( - onPressed: () async { - Navigator.of(context).pop(); - await supabase.removeChannel(_gameChannel!); - _openLobbyDialog(); - }, - child: const Text('Back to Lobby'), - ), - ], - ); - }), - ); - }, - ); - - // await for a frame so that the widget mounts - await Future.delayed(Duration.zero); - - if (mounted) { - _openLobbyDialog(); - } - } - - void _openLobbyDialog() { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) { - return _LobbyDialog( - onGameStarted: (gameId) async { - // await a frame to allow subscribing to a new channel in a realtime callback - await Future.delayed(Duration.zero); - - setState(() {}); - - _game.startNewGame(); - - _gameChannel = supabase.channel(gameId, - opts: const RealtimeChannelConfig(ack: true)); - - _gameChannel!.on(RealtimeListenTypes.broadcast, - ChannelFilter(event: 'game_state'), (payload, [_]) { - final position = - Vector2(payload['x'] as double, payload['y'] as double); - final opponentHealth = payload['health'] as int; - _game.updateOpponent( - position: position, - health: opponentHealth, - ); - - if (opponentHealth <= 0) { - if (!_game.isGameOver) { - _game.isGameOver = true; - _game.onGameOver(true); - } - } - }).subscribe(); - }, - ); - }); - } -} - -class _LobbyDialog extends StatefulWidget { - const _LobbyDialog({ - required this.onGameStarted, - }); - - final void Function(String gameId) onGameStarted; - - @override - State<_LobbyDialog> createState() => _LobbyDialogState(); -} - -class _LobbyDialogState extends State<_LobbyDialog> { - List _userids = []; - bool _loading = false; - - /// Unique identifier for each players to identify eachother in lobby - final myUserId = const Uuid().v4(); - - late final RealtimeChannel _lobbyChannel; - - @override - void initState() { - super.initState(); - - _lobbyChannel = supabase.channel( - 'lobby', - opts: const RealtimeChannelConfig(self: true), - ); - _lobbyChannel.on(RealtimeListenTypes.presence, ChannelFilter(event: 'sync'), - (payload, [ref]) { - // Update the lobby count - final presenceState = _lobbyChannel.presenceState(); - - setState(() { - _userids = presenceState.values - .map((presences) => - (presences.first as Presence).payload['user_id'] as String) - .toList(); - }); - }).on(RealtimeListenTypes.broadcast, ChannelFilter(event: 'game_start'), - (payload, [_]) { - // Start the game if someone has started a game with you - final participantIds = List.from(payload['participants']); - if (participantIds.contains(myUserId)) { - final gameId = payload['game_id'] as String; - widget.onGameStarted(gameId); - Navigator.of(context).pop(); - } - }).subscribe( - (status, [ref]) async { - if (status == 'SUBSCRIBED') { - await _lobbyChannel.track({'user_id': myUserId}); - } - }, - ); - } - - @override - void dispose() { - supabase.removeChannel(_lobbyChannel); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return AlertDialog( - title: const Text('Lobby'), - content: _loading - ? const SizedBox( - height: 100, - child: Center(child: CircularProgressIndicator()), - ) - : Text('${_userids.length} users waiting'), - actions: [ - TextButton( - onPressed: _userids.length < 2 - ? null - : () async { - setState(() { - _loading = true; - }); - - final opponentId = - _userids.firstWhere((userId) => userId != myUserId); - final gameId = const Uuid().v4(); - await _lobbyChannel.send( - type: RealtimeListenTypes.broadcast, - event: 'game_start', - payload: { - 'participants': [ - opponentId, - myUserId, - ], - 'game_id': gameId, - }, - ); - }, - child: const Text('start'), - ), - ], - ); - } -} diff --git a/examples/realtime/flutter-multiplayer-shooting-game/pubspec.yaml b/examples/realtime/flutter-multiplayer-shooting-game/pubspec.yaml deleted file mode 100644 index 6b32e6d774809..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/pubspec.yaml +++ /dev/null @@ -1,28 +0,0 @@ -name: flame_realtime_shooting -description: Multiplayer shooting game using Flutter, Flame and Supabase. - -publish_to: 'none' - -version: 1.0.0+1 - -environment: - sdk: '>=2.19.0 <4.0.0' - -dependencies: - flutter: - sdk: flutter - - supabase_flutter: ^1.4.0 - flame: ^1.6.0 - uuid: ^3.0.7 - -dev_dependencies: - flutter_test: - sdk: flutter - - flutter_lints: ^2.0.0 - -flutter: - uses-material-design: true - assets: - - assets/images/ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/test/widget_test.dart b/examples/realtime/flutter-multiplayer-shooting-game/test/widget_test.dart deleted file mode 100644 index 0baf2d9466306..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/test/widget_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility in the flutter_test package. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:flame_realtime_shooting/main.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); -} diff --git a/examples/realtime/flutter-multiplayer-shooting-game/web/favicon.png b/examples/realtime/flutter-multiplayer-shooting-game/web/favicon.png deleted file mode 100644 index 8aaa46ac1ae21..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/web/favicon.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-192.png b/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-192.png deleted file mode 100644 index b749bfef07473..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-192.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-512.png b/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-512.png deleted file mode 100644 index 88cfd48dff116..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-512.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-maskable-192.png b/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-maskable-192.png deleted file mode 100644 index eb9b4d76e5255..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-maskable-192.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-maskable-512.png b/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-maskable-512.png deleted file mode 100644 index d69c56691fbdb..0000000000000 Binary files a/examples/realtime/flutter-multiplayer-shooting-game/web/icons/Icon-maskable-512.png and /dev/null differ diff --git a/examples/realtime/flutter-multiplayer-shooting-game/web/index.html b/examples/realtime/flutter-multiplayer-shooting-game/web/index.html deleted file mode 100644 index 4ea399de5b02b..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/web/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - flame_realtime_shooting - - - - - - - - - - diff --git a/examples/realtime/flutter-multiplayer-shooting-game/web/manifest.json b/examples/realtime/flutter-multiplayer-shooting-game/web/manifest.json deleted file mode 100644 index 7523e4db367cf..0000000000000 --- a/examples/realtime/flutter-multiplayer-shooting-game/web/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "flame_realtime_shooting", - "short_name": "flame_realtime_shooting", - "start_url": ".", - "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", - "description": "A new Flutter project.", - "orientation": "portrait-primary", - "prefer_related_applications": false, - "icons": [ - { - "src": "icons/Icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "icons/Icon-512.png", - "sizes": "512x512", - "type": "image/png" - }, - { - "src": "icons/Icon-maskable-192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "maskable" - }, - { - "src": "icons/Icon-maskable-512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "maskable" - } - ] -} diff --git a/examples/realtime/nextjs-auth-presence/.gitignore b/examples/realtime/nextjs-auth-presence/.gitignore deleted file mode 100644 index c87c9b392c020..0000000000000 --- a/examples/realtime/nextjs-auth-presence/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/examples/realtime/nextjs-auth-presence/README.md b/examples/realtime/nextjs-auth-presence/README.md deleted file mode 100644 index e887b8fc03c08..0000000000000 --- a/examples/realtime/nextjs-auth-presence/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# Supabase Realtime Presence API Sample Program - -This is an example program for Supabase Realtime Presence APIs. -User get authenticated using Supabase Auth API. Once Logged-in you can see which users are 'present' and viewing the page. - -- Frontend: - - Next.js. - - [Supabase.js v2 (realtime presence support)](https://supabase.io/docs/library/getting-started) -- Backend: - - [app.supabase.io](https://app.supabase.io/): hosted postgres database with realtime support. - -## Real time Presence APIs used. - -This program shows usage of channel presence API calls such as , channel.on('presence', ...), channel.subscribe function usage. - -## Getting Started - -### 1. Create new project - -Sign up to Supabase - [https://app.supabase.io](https://app.supabase.io) and create a new project. Wait for your database to start. - -### 2. Run "User Management Starter" Quickstart - -This will create user tables and profile tables for user management. - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. - -![Supabase Anon Key](supabase_anon_key.jpg?raw=true 'Supabase Anon Key') - -### 4. Pull this example git repository - -`git clone <> ` - -### 5. Create a .env.local file - -Create a .env.local file and add following environment variables. - -``` -NEXT_PUBLIC_SUPABASE_URL=<> - -NEXT_PUBLIC_SUPABASE_ANON_KEY=<> -``` - -### 5. Now run the development server! - -Now run -First, run the development server: - -```bash -npm run dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -## How to Test? - -When you visit http://localhost:3000, you will be redirected to auth login/signup screen. - -Signup if you haven't and then login. - -You will see your email listed on the page. - -Open another browser window. And sign-in as another user. - -As you login from other browser window, you will see list of current users updated. - -## Deployment - -Since this is next.js application, simplest method to deploy this repository is on Vercel. - -## Conclusion/Next Steps - -- Need to implement Profile page -- Need to implement ability to upload User Avatars -- Need ability to read user avatar from social media. diff --git a/examples/realtime/nextjs-auth-presence/next.config.js b/examples/realtime/nextjs-auth-presence/next.config.js deleted file mode 100644 index 491e9ba975f6d..0000000000000 --- a/examples/realtime/nextjs-auth-presence/next.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - reactStrictMode: false, - swcMinify: true, -} - -module.exports = nextConfig diff --git a/examples/realtime/nextjs-auth-presence/package-lock.json b/examples/realtime/nextjs-auth-presence/package-lock.json deleted file mode 100644 index c1e694a694a21..0000000000000 --- a/examples/realtime/nextjs-auth-presence/package-lock.json +++ /dev/null @@ -1,5837 +0,0 @@ -{ - "name": "nextjs-auth-presence", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "nextjs-auth-presence", - "version": "0.1.0", - "dependencies": { - "@supabase/auth-helpers-nextjs": "^0.6.0", - "@supabase/auth-helpers-react": "^0.3.1", - "@supabase/auth-ui-react": "^0.2.7", - "@supabase/supabase-js": "^2.7.1", - "next": "^13.1.6", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@types/node": "18.11.0", - "@types/react": "18.0.28", - "@types/react-dom": "18.0.10", - "eslint": "8.25.0", - "eslint-config-next": "12.3.1", - "typescript": "4.8.4" - } - }, - "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "dev": true, - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "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", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@next/env": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.6.tgz", - "integrity": "sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "12.3.1", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.1.tgz", - "integrity": "sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==", - "dev": true, - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz", - "integrity": "sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz", - "integrity": "sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz", - "integrity": "sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz", - "integrity": "sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-freebsd-x64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz", - "integrity": "sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz", - "integrity": "sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz", - "integrity": "sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz", - "integrity": "sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz", - "integrity": "sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz", - "integrity": "sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz", - "integrity": "sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz", - "integrity": "sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz", - "integrity": "sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "node_modules/@stitches/core": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", - "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==" - }, - "node_modules/@stitches/react": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@stitches/react/-/react-1.2.8.tgz", - "integrity": "sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==", - "peerDependencies": { - "react": ">= 16.3.0" - } - }, - "node_modules/@supabase/auth-helpers-nextjs": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-nextjs/-/auth-helpers-nextjs-0.6.0.tgz", - "integrity": "sha512-f1e5blmpt9F/Bnb2hKreWHqf3zEhl29P357d5fnXzQ3Ph7DuW2Wha7uwQVTgE2QH3niqVpJpY0Pg0zBT5NmNWQ==", - "dependencies": { - "@supabase/auth-helpers-shared": "0.3.3" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.0.4" - } - }, - "node_modules/@supabase/auth-helpers-react": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-react/-/auth-helpers-react-0.3.1.tgz", - "integrity": "sha512-g3SFv08Dz9FapNif/ZY1b7qKGlMJDyTLSayHBz3kb3FuYxg7aLWgQtydDhm5AGbc0XtvpIBuhGTIOVevwpdosA==", - "peerDependencies": { - "@supabase/supabase-js": "^2.0.4" - } - }, - "node_modules/@supabase/auth-helpers-shared": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-shared/-/auth-helpers-shared-0.3.3.tgz", - "integrity": "sha512-ZwZGffApfyz9MiT3knnZoF1DMWE56H/Q0Mrsn22J9ubhss7/+e7TP3dChxxwlUYqtDmjmLV6OV8W0BANENfUew==", - "dependencies": { - "js-base64": "^3.7.5" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.0.4" - } - }, - "node_modules/@supabase/auth-ui-react": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@supabase/auth-ui-react/-/auth-ui-react-0.2.7.tgz", - "integrity": "sha512-O1Y/DKcCFVo8MjCKx5Sbp74NiqoPw8iKi/TzBo1XkpwG+Yb+nhl405282yGPSHTgrHdBzHpty9lomkXv/Q+O6Q==", - "dependencies": { - "@stitches/core": "^1.2.8", - "@stitches/react": "^1.2.8", - "prop-types": "^15.7.2" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.1 || ^18.0.0", - "react-dom": "^16.13.1 || ^17.0.1 || ^18.0.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.11.0.tgz", - "integrity": "sha512-yo3yExoTqpJH4YpdI5PDjZ1YLOj3wURppimfsV0ep5uxDY/lE1uOhiMCPnhy59DbFAKG7bjnhJ1L7sk+B2os3w==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.4.0.tgz", - "integrity": "sha512-Qwk7T/thG4gtVjxxVGlnhH9tPWXyBGIpQMxNUtAIyASgJoEEuUFS/Wx/GqGDIfwRtrn1qqZjE6sZon5ULAdRLQ==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.6.0.tgz", - "integrity": "sha512-tOVulMobhpxyDuu8VIImpL8FXmZOKsGNOSyS5ihJdj2xYmPPvYG+D2J51Ewfl+MFF65tweiB6p9N9bNIW1cDNA==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.3.0.tgz", - "integrity": "sha512-YGWVCEYYYF3+UiyL8O4xC78N9n9paLbT0hHl8dmYAtd3DqyWtu5Eph9JTu0PWm+/29Zhns5TbhUZW4xpWjJfPQ==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.7.1.tgz", - "integrity": "sha512-Q/e+JAluZEvy7D4ul3aAs3aOiKkGvHlZULy6wjchWQyU9YlJKZLr6VPYcwUeitcnRKZi4al5iTS55LgdJFfqIA==", - "dependencies": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.10.2", - "@supabase/postgrest-js": "^1.1.1", - "@supabase/realtime-js": "^2.4.0", - "@supabase/storage-js": "^2.1.0", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@swc/helpers": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", - "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.0.tgz", - "integrity": "sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w==", - "dev": true - }, - "node_modules/@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.0.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", - "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.0.10", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", - "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.0.tgz", - "integrity": "sha512-Ixh9qrOTDRctFg3yIwrLkgf33AHyEIn6lhyf5cCfwwiGtkWhNpVKlEZApi3inGQR/barWnY7qY8FbGKBO7p3JA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.42.0", - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/typescript-estree": "5.42.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.0.tgz", - "integrity": "sha512-l5/3IBHLH0Bv04y+H+zlcLiEMEMjWGaCX6WyHE5Uk2YkSGAMlgdUPsT/ywTSKgu9D1dmmKMYgYZijObfA39Wow==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/visitor-keys": "5.42.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.0.tgz", - "integrity": "sha512-t4lzO9ZOAUcHY6bXQYRuu+3SSYdD9TS8ooApZft4WARt4/f2Cj/YpvbTe8A4GuhT4bNW72goDMOy7SW71mZwGw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.0.tgz", - "integrity": "sha512-2O3vSq794x3kZGtV7i4SCWZWCwjEtkWfVqX4m5fbUBomOsEOyd6OAD1qU2lbvV5S8tgy/luJnOYluNyYVeOTTg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/visitor-keys": "5.42.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.0.tgz", - "integrity": "sha512-QHbu5Hf/2lOEOwy+IUw0GoSCuAzByTAWWrOTKzTzsotiUnWFpuKnXcAhC9YztAf2EElQ0VvIK+pHJUPkM0q7jg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.42.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/axe-core": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.1.tgz", - "integrity": "sha512-1exVbW0X1O/HSr/WMwnaweyqcWOgZgLiVxdLG34pvSQk4NlYQr9OUy0JLwuhFfuVNQzzqgH57eYzkFBCb3bIsQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001430", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz", - "integrity": "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/core-js-pure": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.0.tgz", - "integrity": "sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", - "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.10.5", - "@humanwhocodes/module-importer": "^1.0.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "12.3.1", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.3.1.tgz", - "integrity": "sha512-EN/xwKPU6jz1G0Qi6Bd/BqMnHLyRAL0VsaQaWA7F3KkjAgZHi4f1uL1JKGWNxdQpHTW/sdGONBd0bzxUka/DJg==", - "dev": true, - "dependencies": { - "@next/eslint-plugin-next": "12.3.1", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.21.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-base64": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", - "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" - }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/next": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/next/-/next-13.1.6.tgz", - "integrity": "sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==", - "dependencies": { - "@next/env": "13.1.6", - "@swc/helpers": "0.4.14", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.1" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=14.6.0" - }, - "optionalDependencies": { - "@next/swc-android-arm-eabi": "13.1.6", - "@next/swc-android-arm64": "13.1.6", - "@next/swc-darwin-arm64": "13.1.6", - "@next/swc-darwin-x64": "13.1.6", - "@next/swc-freebsd-x64": "13.1.6", - "@next/swc-linux-arm-gnueabihf": "13.1.6", - "@next/swc-linux-arm64-gnu": "13.1.6", - "@next/swc-linux-arm64-musl": "13.1.6", - "@next/swc-linux-x64-gnu": "13.1.6", - "@next/swc-linux-x64-musl": "13.1.6", - "@next/swc-win32-arm64-msvc": "13.1.6", - "@next/swc-win32-ia32-msvc": "13.1.6", - "@next/swc-win32-x64-msvc": "13.1.6" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "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" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dependencies": { - "client-only": "0.0.1" - }, - "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 - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "dev": true, - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - } - }, - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@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", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@next/env": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.6.tgz", - "integrity": "sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==" - }, - "@next/eslint-plugin-next": { - "version": "12.3.1", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.1.tgz", - "integrity": "sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==", - "dev": true, - "requires": { - "glob": "7.1.7" - } - }, - "@next/swc-android-arm-eabi": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz", - "integrity": "sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==", - "optional": true - }, - "@next/swc-android-arm64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz", - "integrity": "sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==", - "optional": true - }, - "@next/swc-darwin-arm64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz", - "integrity": "sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz", - "integrity": "sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==", - "optional": true - }, - "@next/swc-freebsd-x64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz", - "integrity": "sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz", - "integrity": "sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz", - "integrity": "sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz", - "integrity": "sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz", - "integrity": "sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz", - "integrity": "sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz", - "integrity": "sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz", - "integrity": "sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz", - "integrity": "sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==", - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "@stitches/core": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", - "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==" - }, - "@stitches/react": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@stitches/react/-/react-1.2.8.tgz", - "integrity": "sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==", - "requires": {} - }, - "@supabase/auth-helpers-nextjs": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-nextjs/-/auth-helpers-nextjs-0.6.0.tgz", - "integrity": "sha512-f1e5blmpt9F/Bnb2hKreWHqf3zEhl29P357d5fnXzQ3Ph7DuW2Wha7uwQVTgE2QH3niqVpJpY0Pg0zBT5NmNWQ==", - "requires": { - "@supabase/auth-helpers-shared": "0.3.3" - } - }, - "@supabase/auth-helpers-react": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-react/-/auth-helpers-react-0.3.1.tgz", - "integrity": "sha512-g3SFv08Dz9FapNif/ZY1b7qKGlMJDyTLSayHBz3kb3FuYxg7aLWgQtydDhm5AGbc0XtvpIBuhGTIOVevwpdosA==", - "requires": {} - }, - "@supabase/auth-helpers-shared": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-shared/-/auth-helpers-shared-0.3.3.tgz", - "integrity": "sha512-ZwZGffApfyz9MiT3knnZoF1DMWE56H/Q0Mrsn22J9ubhss7/+e7TP3dChxxwlUYqtDmjmLV6OV8W0BANENfUew==", - "requires": { - "js-base64": "^3.7.5" - } - }, - "@supabase/auth-ui-react": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@supabase/auth-ui-react/-/auth-ui-react-0.2.7.tgz", - "integrity": "sha512-O1Y/DKcCFVo8MjCKx5Sbp74NiqoPw8iKi/TzBo1XkpwG+Yb+nhl405282yGPSHTgrHdBzHpty9lomkXv/Q+O6Q==", - "requires": { - "@stitches/core": "^1.2.8", - "@stitches/react": "^1.2.8", - "fsevents": "^2.3.2", - "prop-types": "^15.7.2" - } - }, - "@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.11.0.tgz", - "integrity": "sha512-yo3yExoTqpJH4YpdI5PDjZ1YLOj3wURppimfsV0ep5uxDY/lE1uOhiMCPnhy59DbFAKG7bjnhJ1L7sk+B2os3w==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.4.0.tgz", - "integrity": "sha512-Qwk7T/thG4gtVjxxVGlnhH9tPWXyBGIpQMxNUtAIyASgJoEEuUFS/Wx/GqGDIfwRtrn1qqZjE6sZon5ULAdRLQ==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.6.0.tgz", - "integrity": "sha512-tOVulMobhpxyDuu8VIImpL8FXmZOKsGNOSyS5ihJdj2xYmPPvYG+D2J51Ewfl+MFF65tweiB6p9N9bNIW1cDNA==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.3.0.tgz", - "integrity": "sha512-YGWVCEYYYF3+UiyL8O4xC78N9n9paLbT0hHl8dmYAtd3DqyWtu5Eph9JTu0PWm+/29Zhns5TbhUZW4xpWjJfPQ==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.7.1.tgz", - "integrity": "sha512-Q/e+JAluZEvy7D4ul3aAs3aOiKkGvHlZULy6wjchWQyU9YlJKZLr6VPYcwUeitcnRKZi4al5iTS55LgdJFfqIA==", - "requires": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.10.2", - "@supabase/postgrest-js": "^1.1.1", - "@supabase/realtime-js": "^2.4.0", - "@supabase/storage-js": "^2.1.0", - "cross-fetch": "^3.1.5" - } - }, - "@swc/helpers": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", - "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/node": { - "version": "18.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.0.tgz", - "integrity": "sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w==", - "dev": true - }, - "@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "@types/react": { - "version": "18.0.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", - "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.0.10", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", - "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "@typescript-eslint/parser": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.0.tgz", - "integrity": "sha512-Ixh9qrOTDRctFg3yIwrLkgf33AHyEIn6lhyf5cCfwwiGtkWhNpVKlEZApi3inGQR/barWnY7qY8FbGKBO7p3JA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.42.0", - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/typescript-estree": "5.42.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.0.tgz", - "integrity": "sha512-l5/3IBHLH0Bv04y+H+zlcLiEMEMjWGaCX6WyHE5Uk2YkSGAMlgdUPsT/ywTSKgu9D1dmmKMYgYZijObfA39Wow==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/visitor-keys": "5.42.0" - } - }, - "@typescript-eslint/types": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.0.tgz", - "integrity": "sha512-t4lzO9ZOAUcHY6bXQYRuu+3SSYdD9TS8ooApZft4WARt4/f2Cj/YpvbTe8A4GuhT4bNW72goDMOy7SW71mZwGw==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.0.tgz", - "integrity": "sha512-2O3vSq794x3kZGtV7i4SCWZWCwjEtkWfVqX4m5fbUBomOsEOyd6OAD1qU2lbvV5S8tgy/luJnOYluNyYVeOTTg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/visitor-keys": "5.42.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.0.tgz", - "integrity": "sha512-QHbu5Hf/2lOEOwy+IUw0GoSCuAzByTAWWrOTKzTzsotiUnWFpuKnXcAhC9YztAf2EElQ0VvIK+pHJUPkM0q7jg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "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", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "axe-core": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.1.tgz", - "integrity": "sha512-1exVbW0X1O/HSr/WMwnaweyqcWOgZgLiVxdLG34pvSQk4NlYQr9OUy0JLwuhFfuVNQzzqgH57eYzkFBCb3bIsQ==", - "dev": true - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001430", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz", - "integrity": "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "core-js-pure": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.0.tgz", - "integrity": "sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", - "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.10.5", - "@humanwhocodes/module-importer": "^1.0.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - } - }, - "eslint-config-next": { - "version": "12.3.1", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.3.1.tgz", - "integrity": "sha512-EN/xwKPU6jz1G0Qi6Bd/BqMnHLyRAL0VsaQaWA7F3KkjAgZHi4f1uL1JKGWNxdQpHTW/sdGONBd0bzxUka/DJg==", - "dev": true, - "requires": { - "@next/eslint-plugin-next": "12.3.1", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.21.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "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" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "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 - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-base64": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", - "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" - }, - "js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "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" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/next/-/next-13.1.6.tgz", - "integrity": "sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==", - "requires": { - "@next/env": "13.1.6", - "@next/swc-android-arm-eabi": "13.1.6", - "@next/swc-android-arm64": "13.1.6", - "@next/swc-darwin-arm64": "13.1.6", - "@next/swc-darwin-x64": "13.1.6", - "@next/swc-freebsd-x64": "13.1.6", - "@next/swc-linux-arm-gnueabihf": "13.1.6", - "@next/swc-linux-arm64-gnu": "13.1.6", - "@next/swc-linux-arm64-musl": "13.1.6", - "@next/swc-linux-x64-gnu": "13.1.6", - "@next/swc-linux-x64-musl": "13.1.6", - "@next/swc-win32-arm64-msvc": "13.1.6", - "@next/swc-win32-ia32-msvc": "13.1.6", - "@next/swc-win32-x64-msvc": "13.1.6", - "@swc/helpers": "0.4.14", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.1" - } - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "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" - } - }, - "p-locate": { - "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" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "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 - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "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" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "requires": { - "client-only": "0.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "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==", - "dev": true - } - } -} diff --git a/examples/realtime/nextjs-auth-presence/package.json b/examples/realtime/nextjs-auth-presence/package.json deleted file mode 100644 index d30bbe1015588..0000000000000 --- a/examples/realtime/nextjs-auth-presence/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "nextjs-auth-presence", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "format": "prettier --write \"pages/**/*.{js,jsx,ts,tsx,css,md,json}\"" - }, - "dependencies": { - "@supabase/auth-helpers-nextjs": "^0.6.0", - "@supabase/auth-helpers-react": "^0.3.1", - "@supabase/auth-ui-react": "^0.2.7", - "@supabase/supabase-js": "^2.7.1", - "next": "^13.1.6", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@types/node": "18.11.0", - "@types/react": "18.0.28", - "@types/react-dom": "18.0.10", - "eslint": "8.25.0", - "eslint-config-next": "12.3.1", - "typescript": "4.8.4" - } -} diff --git a/examples/realtime/nextjs-auth-presence/pages/_app.tsx b/examples/realtime/nextjs-auth-presence/pages/_app.tsx deleted file mode 100644 index 188125321b5c4..0000000000000 --- a/examples/realtime/nextjs-auth-presence/pages/_app.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { createBrowserSupabaseClient, Session } from '@supabase/auth-helpers-nextjs' -import { SessionContextProvider } from '@supabase/auth-helpers-react' -import type { AppProps } from 'next/app' -import { useRouter } from 'next/router' -import { useEffect, useState } from 'react' -import '../styles/globals.css' - -function MyApp({ - Component, - pageProps, -}: AppProps<{ - initialSession: Session -}>) { - const router = useRouter() - const [supabaseClient] = useState(() => createBrowserSupabaseClient()) - - useEffect(() => { - const { - data: { subscription }, - } = supabaseClient.auth.onAuthStateChange((event, session) => { - switch (event) { - case 'SIGNED_IN': - router.push('/') - return - case 'SIGNED_OUT': - router.push('/login') - return - } - }) - return subscription.unsubscribe - }, []) - - return ( - - - - ) -} - -export default MyApp diff --git a/examples/realtime/nextjs-auth-presence/pages/index.tsx b/examples/realtime/nextjs-auth-presence/pages/index.tsx deleted file mode 100644 index b382f523f7048..0000000000000 --- a/examples/realtime/nextjs-auth-presence/pages/index.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { createServerSupabaseClient } from '@supabase/auth-helpers-nextjs' -import { useSupabaseClient, useUser } from '@supabase/auth-helpers-react' -import { RealtimePresenceState } from '@supabase/supabase-js' -import type { GetServerSidePropsContext, NextPage } from 'next' -import { useEffect, useState } from 'react' - -const HomePage: NextPage = () => { - const supabaseClient = useSupabaseClient() - const this_user = useUser() - const [userState, setUserState] = useState({}) - - useEffect(() => { - console.log('user: ', this_user) - - const channel = supabaseClient.channel('online-users', { - config: { - presence: { - key: this_user?.email ? this_user?.email : 'Unknown', - }, - }, - }) - - channel.on('presence', { event: 'sync' }, () => { - const presentState = channel.presenceState() - - console.log('inside presence: ', presentState) - - setUserState({ ...presentState }) - }) - - channel.on('presence', { event: 'join' }, ({ newPresences }) => { - console.log('New users have joined: ', newPresences) - }) - - channel.subscribe(async (status) => { - if (status === 'SUBSCRIBED') { - const status = await channel.track({ - user_name: this_user?.email ? this_user?.email : 'Unknown', - }) - console.log('status: ', status) - } - }) - }, []) - return ( - <> - - -

    List of Currently Logged in Users:

    - {Object.keys(userState).map((key) => ( -

    Hi {key}

    - ))} - - ) -} - -export const getServerSideProps = async (ctx: GetServerSidePropsContext) => { - // Create authenticated Supabase Client - const supabase = createServerSupabaseClient(ctx) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return { - redirect: { - destination: '/login', - permanent: false, - }, - } - - return { - props: { - initialSession: session, - user: session.user, - }, - } -} - -export default HomePage diff --git a/examples/realtime/nextjs-auth-presence/pages/login.tsx b/examples/realtime/nextjs-auth-presence/pages/login.tsx deleted file mode 100644 index 7863302b23e51..0000000000000 --- a/examples/realtime/nextjs-auth-presence/pages/login.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { useSupabaseClient, useUser } from '@supabase/auth-helpers-react' -import { Auth, ThemeSupa } from '@supabase/auth-ui-react' -import type { NextPage } from 'next' -import styles from '../styles/Home.module.css' - -const LoginPage: NextPage = () => { - const supabaseClient = useSupabaseClient() - const user = useUser() - - if (!user) { - return ( -
    - -
    - ) - } - - return ( - <> - -

    user:

    -
    {JSON.stringify(user, null, 2)}
    - - ) -} - -export default LoginPage diff --git a/examples/realtime/nextjs-auth-presence/pages/profile.tsx b/examples/realtime/nextjs-auth-presence/pages/profile.tsx deleted file mode 100644 index f164dcdc2cde2..0000000000000 --- a/examples/realtime/nextjs-auth-presence/pages/profile.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { createServerSupabaseClient, User } from '@supabase/auth-helpers-nextjs' -import { GetServerSidePropsContext } from 'next' -import Link from 'next/link' - -export default function Profile({ user }: { user: User }) { - return ( - <> -

    - [Home] | [supabaseServerClient] -

    -
    Hello {user.email}
    -
    {JSON.stringify(user, null, 2)}
    - - ) -} - -export const getServerSideProps = async (ctx: GetServerSidePropsContext) => { - // Create authenticated Supabase Client - const supabase = createServerSupabaseClient(ctx) - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (!session) - return { - redirect: { - destination: '/login', - permanent: false, - }, - } - - return { - props: { - initialSession: session, - user: session.user, - }, - } -} diff --git a/examples/realtime/nextjs-auth-presence/public/favicon.ico b/examples/realtime/nextjs-auth-presence/public/favicon.ico deleted file mode 100644 index 718d6fea4835e..0000000000000 Binary files a/examples/realtime/nextjs-auth-presence/public/favicon.ico and /dev/null differ diff --git a/examples/realtime/nextjs-auth-presence/public/vercel.svg b/examples/realtime/nextjs-auth-presence/public/vercel.svg deleted file mode 100644 index fbf0e25a651c2..0000000000000 --- a/examples/realtime/nextjs-auth-presence/public/vercel.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/realtime/nextjs-auth-presence/sample.env.local b/examples/realtime/nextjs-auth-presence/sample.env.local deleted file mode 100644 index 87d25650efd51..0000000000000 --- a/examples/realtime/nextjs-auth-presence/sample.env.local +++ /dev/null @@ -1,2 +0,0 @@ -NEXT_PUBLIC_SUPABASE_URL="replace-this-with-your-supabase-instance" -NEXT_PUBLIC_SUPABASE_ANON_KEY="replace-this-with-your-supabasedb-anon-key" \ No newline at end of file diff --git a/examples/realtime/nextjs-auth-presence/styles/Home.module.css b/examples/realtime/nextjs-auth-presence/styles/Home.module.css deleted file mode 100644 index bd50f42ffe6a2..0000000000000 --- a/examples/realtime/nextjs-auth-presence/styles/Home.module.css +++ /dev/null @@ -1,129 +0,0 @@ -.container { - padding: 0 2rem; -} - -.main { - min-height: 100vh; - padding: 4rem 0; - flex: 1; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.footer { - display: flex; - flex: 1; - padding: 2rem 0; - border-top: 1px solid #eaeaea; - justify-content: center; - align-items: center; -} - -.footer a { - display: flex; - justify-content: center; - align-items: center; - flex-grow: 1; -} - -.title a { - color: #0070f3; - text-decoration: none; -} - -.title a:hover, -.title a:focus, -.title a:active { - text-decoration: underline; -} - -.title { - margin: 0; - line-height: 1.15; - font-size: 4rem; -} - -.title, -.description { - text-align: center; -} - -.description { - margin: 4rem 0; - line-height: 1.5; - font-size: 1.5rem; -} - -.code { - background: #fafafa; - border-radius: 5px; - padding: 0.75rem; - font-size: 1.1rem; - font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, - Bitstream Vera Sans Mono, Courier New, monospace; -} - -.grid { - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - max-width: 800px; -} - -.card { - margin: 1rem; - padding: 1.5rem; - text-align: left; - color: inherit; - text-decoration: none; - border: 1px solid #eaeaea; - border-radius: 10px; - transition: color 0.15s ease, border-color 0.15s ease; - max-width: 300px; -} - -.card:hover, -.card:focus, -.card:active { - color: #0070f3; - border-color: #0070f3; -} - -.card h2 { - margin: 0 0 1rem 0; - font-size: 1.5rem; -} - -.card p { - margin: 0; - font-size: 1.25rem; - line-height: 1.5; -} - -.logo { - height: 1em; - margin-left: 0.5rem; -} - -@media (max-width: 600px) { - .grid { - width: 100%; - flex-direction: column; - } -} - -@media (prefers-color-scheme: dark) { - .card, - .footer { - border-color: #222; - } - .code { - background: #111; - } - .logo img { - filter: invert(1); - } -} diff --git a/examples/realtime/nextjs-auth-presence/styles/globals.css b/examples/realtime/nextjs-auth-presence/styles/globals.css deleted file mode 100644 index 4f1842163d222..0000000000000 --- a/examples/realtime/nextjs-auth-presence/styles/globals.css +++ /dev/null @@ -1,26 +0,0 @@ -html, -body { - padding: 0; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, - Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; -} - -a { - color: inherit; - text-decoration: none; -} - -* { - box-sizing: border-box; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } - body { - color: white; - background: black; - } -} diff --git a/examples/realtime/nextjs-auth-presence/supabase_anon_key.jpg b/examples/realtime/nextjs-auth-presence/supabase_anon_key.jpg deleted file mode 100644 index 17b3cbd5f93fc..0000000000000 Binary files a/examples/realtime/nextjs-auth-presence/supabase_anon_key.jpg and /dev/null differ diff --git a/examples/realtime/nextjs-auth-presence/tsconfig.json b/examples/realtime/nextjs-auth-presence/tsconfig.json deleted file mode 100644 index 99710e857874f..0000000000000 --- a/examples/realtime/nextjs-auth-presence/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] -} diff --git a/examples/slack-clone/nextjs-slack-clone/.env.local.example b/examples/slack-clone/nextjs-slack-clone/.env.local.example deleted file mode 100644 index 297256db31116..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/.env.local.example +++ /dev/null @@ -1,4 +0,0 @@ -# Get these from your API settings: https://supabase.com/dashboard/project/_/settings/api - -NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co -NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key \ No newline at end of file diff --git a/examples/slack-clone/nextjs-slack-clone/.gitignore b/examples/slack-clone/nextjs-slack-clone/.gitignore deleted file mode 100644 index acc077f88234f..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -.env* -!.env.local.example - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Supabase -.supabase diff --git a/examples/slack-clone/nextjs-slack-clone/README.md b/examples/slack-clone/nextjs-slack-clone/README.md deleted file mode 100644 index 7e05df2a74942..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/README.md +++ /dev/null @@ -1,309 +0,0 @@ -# Realtime chat example using Supabase - -This is a full-stack Slack clone example using: - -- Frontend: - - Next.js. - - [Supabase.js](https://supabase.com/docs/library/getting-started) for user management and realtime data syncing. -- Backend: - - [supabase.com/dashboard](https://supabase.com/dashboard/): hosted Postgres database with restful API for usage with Supabase.js. - -## Demo - -- Live demo: http://supabase-slack-clone-supabase.vercel.app/ -- CodeSandbox: https://codesandbox.io/s/github/supabase/supabase/tree/master/examples/nextjs-slack-clone - -![Demo animation gif](./public/slack-clone-demo.gif) - -## Deploy your own - -### 1. Create new project - -Sign up to Supabase - [https://supabase.com/dashboard](https://supabase.com/dashboard) and create a new project. Wait for your database to start. - -### 2. Run "Slack Clone" Quickstart - -Once your database has started, run the "Slack Clone" quickstart. - -![Slack Clone Quick Start](https://user-images.githubusercontent.com/1811651/101558751-73fecc80-3974-11eb-80be-423fa2789877.png) - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key. You'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). - -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) - -**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. - -### 4. Deploy the Next.js client - -[![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%2Fslack-clone%2Fnextjs-slack-clone&env=NEXT_PUBLIC_SUPABASE_URL,NEXT_PUBLIC_SUPABASE_ANON_KEY&envDescription=Find%20the%20Supabase%20URL%20and%20key%20in%20the%20your%20auto-generated%20docs%20at%20supabase.com/dashboard&project-name=supabase-slack-clone&repo-name=supabase-slack-clone) - -Here, we recommend forking this repo so you can deploy through Vercel by clicking the button above. When you click the button, replace the repo URL with your fork's URL. - -You will be asked for a `NEXT_PUBLIC_SUPABASE_URL` and `NEXT_PUBLIC_SUPABASE_ANON_KEY`. Use the API URL and `anon` key from [step 3](#3-get-the-url-and-key). - -### 5. Change authentication settings if necessary - -![Change auth settings](https://user-images.githubusercontent.com/1811651/101840012-39be3800-3af8-11eb-8c32-73f2fae6299e.png) - -On [supabase.com/dashboard](https://supabase.com/dashboard), you can go to Authentication -> Settings to change your auth settings for your project if necessary. Here, you can change the site URL, which is used for determining where to redirect users after they confirm their email addresses or attempt to use a magic link to log in. - -Here, you can also enable external oauth providers, such as Google and GitHub. - -## How to use - -### Using `create-next-app` - -Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init) or [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/) to bootstrap the example locally: - -```bash -npx create-next-app --example with-supabase-auth-realtime-db realtime-chat-app -# or -yarn create next-app --example with-supabase-auth-realtime-db realtime-chat-app -``` - -### Download manually - -Download the example: - -```bash -curl https://codeload.github.com/vercel/next.js/tar.gz/canary | tar -xz --strip=2 next.js-canary/examples/with-supabase-auth-realtime-db -cd with-supabase-auth-realtime-db -``` - -### Using this repo - -Simply clone this repo locally and proceed to the next section. - -### Required configuration - -Copy the `.env.local.example` file into a file named `.env.local` in the root directory of the example: - -```bash -cp .env.local.example .env.local -``` - -Set your Supabase details from [step 3](#3-get-the-url-and-key) above: - -```bash -NEXT_PUBLIC_SUPABASE_URL= -NEXT_PUBLIC_SUPABASE_ANON_KEY= -``` - -### Change authentication settings if necessary - -Follow [Step #5](#5-change-authentication-settings-if-necessary) above if you want to change the auth settings. - -### Run the development server - -Now install the dependencies and start the development server. - -```bash -npm install -npm run dev -# or -yarn -yarn dev -``` - -Visit http://localhost:3000 and start chatting! Open a channel across two browser tabs to see everything getting updated in realtime 🥳 - -## Supabase details - -### Role-based access control (RBAC) - -Use [plus addressing](https://en.wikipedia.org/wiki/Email_address#Subaddressing) to sign up users with the `admin` & `moderator` roles. Email addresses including `+supaadmin@` will be assigned the `admin` role, and email addresses including `+supamod@` will be assigned the `moderator` role. For example: - -``` -// admin user -email+supaadmin@example.com - -// moderator user -email+supamod@example.com -``` - -Users with the `moderator` role can delete all messages. Users with the `admin` role can delete all messages and channels (note: it's not recommended to delete the `public` channel). - -### Postgres Row level security - -This project uses very high-level Authorization using Postgres' Role Level Security. -When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. -When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. -We can use these details to provide fine-grained control over what each user can and cannot do. - -Full schema here with role-based access control: - -```sql --- --- For use with https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone --- - --- Custom types -create type public.app_permission as enum ('channels.delete', 'messages.delete'); -create type public.app_role as enum ('admin', 'moderator'); -create type public.user_status as enum ('ONLINE', 'OFFLINE'); - --- USERS -create table public.users ( - id uuid not null primary key, -- UUID from auth.users - username text, - status user_status default 'OFFLINE'::public.user_status -); -comment on table public.users is 'Profile data for each user.'; -comment on column public.users.id is 'References the internal Supabase Auth user.'; - --- CHANNELS -create table public.channels ( - id bigint generated by default as identity primary key, - inserted_at timestamp with time zone default timezone('utc'::text, now()) not null, - slug text not null unique, - created_by uuid references public.users not null -); -comment on table public.channels is 'Topics and groups.'; - --- MESSAGES -create table public.messages ( - id bigint generated by default as identity primary key, - inserted_at timestamp with time zone default timezone('utc'::text, now()) not null, - message text, - user_id uuid references public.users not null, - channel_id bigint references public.channels on delete cascade not null -); -comment on table public.messages is 'Individual messages sent by each user.'; - --- USER ROLES -create table public.user_roles ( - id bigint generated by default as identity primary key, - user_id uuid references public.users on delete cascade not null, - role app_role not null, - unique (user_id, role) -); -comment on table public.user_roles is 'Application roles for each user.'; - --- ROLE PERMISSIONS -create table public.role_permissions ( - id bigint generated by default as identity primary key, - role app_role not null, - permission app_permission not null, - unique (role, permission) -); -comment on table public.role_permissions is 'Application permissions for each role.'; - --- authorize with role-based access control (RBAC) -create function public.authorize( - requested_permission app_permission, - user_id uuid -) -returns boolean as $$ -declare - bind_permissions int; -begin - select count(*) - from public.role_permissions - inner join public.user_roles on role_permissions.role = user_roles.role - where role_permissions.permission = authorize.requested_permission - and user_roles.user_id = authorize.user_id - into bind_permissions; - - return bind_permissions > 0; -end; -$$ language plpgsql security definer; - --- Secure the tables -alter table public.users enable row level security; -alter table public.channels enable row level security; -alter table public.messages enable row level security; -alter table public.user_roles enable row level security; -alter table public.role_permissions enable row level security; -create policy "Allow logged-in read access" on public.users for select using ( auth.role() = 'authenticated' ); -create policy "Allow individual insert access" on public.users for insert with check ( auth.uid() = id ); -create policy "Allow individual update access" on public.users for update using ( auth.uid() = id ); -create policy "Allow logged-in read access" on public.channels for select using ( auth.role() = 'authenticated' ); -create policy "Allow individual insert access" on public.channels for insert with check ( auth.uid() = created_by ); -create policy "Allow individual delete access" on public.channels for delete using ( auth.uid() = created_by ); -create policy "Allow authorized delete access" on public.channels for delete using ( authorize('channels.delete', auth.uid()) ); -create policy "Allow logged-in read access" on public.messages for select using ( auth.role() = 'authenticated' ); -create policy "Allow individual insert access" on public.messages for insert with check ( auth.uid() = user_id ); -create policy "Allow individual update access" on public.messages for update using ( auth.uid() = user_id ); -create policy "Allow individual delete access" on public.messages for delete using ( auth.uid() = user_id ); -create policy "Allow authorized delete access" on public.messages for delete using ( authorize('messages.delete', auth.uid()) ); -create policy "Allow individual read access" on public.user_roles for select using ( auth.uid() = user_id ); - --- Send "previous data" on change -alter table public.users replica identity full; -alter table public.channels replica identity full; -alter table public.messages replica identity full; - --- inserts a row into public.users and assigns roles -create function public.handle_new_user() -returns trigger as $$ -declare is_admin boolean; -begin - insert into public.users (id, username) - values (new.id, new.email); - - select count(*) = 1 from auth.users into is_admin; - - if position('+supaadmin@' in new.email) > 0 then - insert into public.user_roles (user_id, role) values (new.id, 'admin'); - elsif position('+supamod@' in new.email) > 0 then - insert into public.user_roles (user_id, role) values (new.id, 'moderator'); - end if; - - return new; -end; -$$ language plpgsql security definer; - --- trigger the function every time a user is created -create trigger on_auth_user_created - after insert on auth.users - for each row execute procedure public.handle_new_user(); - -/** - * REALTIME SUBSCRIPTIONS - * Only allow realtime listening on public tables. - */ - -begin; - -- remove the realtime publication - drop publication if exists supabase_realtime; - - -- re-create the publication but don't enable it for any tables - create publication supabase_realtime; -commit; - --- add tables to the publication -alter publication supabase_realtime add table public.channels; -alter publication supabase_realtime add table public.messages; -alter publication supabase_realtime add table public.users; - --- DUMMY DATA -insert into public.users (id, username) -values - ('8d0fd2b3-9ca7-4d9e-a95f-9e13dded323e', 'supabot'); - -insert into public.channels (slug, created_by) -values - ('public', '8d0fd2b3-9ca7-4d9e-a95f-9e13dded323e'), - ('random', '8d0fd2b3-9ca7-4d9e-a95f-9e13dded323e'); - -insert into public.messages (message, channel_id, user_id) -values - ('Hello World 👋', 1, '8d0fd2b3-9ca7-4d9e-a95f-9e13dded323e'), - ('Perfection is attained, not when there is nothing more to add, but when there is nothing left to take away.', 2, '8d0fd2b3-9ca7-4d9e-a95f-9e13dded323e'); - -insert into public.role_permissions (role, permission) -values - ('admin', 'channels.delete'), - ('admin', 'messages.delete'), - ('moderator', 'messages.delete'); -``` - -## Authors - -- [Supabase](https://supabase.com) - -Supabase is open source, we'd love for you to follow along and get involved at https://github.com/supabase/supabase diff --git a/examples/slack-clone/nextjs-slack-clone/components/Layout.js b/examples/slack-clone/nextjs-slack-clone/components/Layout.js deleted file mode 100644 index a592e0d83bebd..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/components/Layout.js +++ /dev/null @@ -1,89 +0,0 @@ -import Link from 'next/link' -import { useContext } from 'react' -import UserContext from '~/lib/UserContext' -import { addChannel, deleteChannel } from '~/lib/Store' -import TrashIcon from '~/components/TrashIcon' - -export default function Layout(props) { - const { signOut, user, userRoles } = useContext(UserContext) - - const slugify = (text) => { - return text - .toString() - .toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .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 - } - - const newChannel = async () => { - const slug = prompt('Please enter your name') - if (slug) { - addChannel(slugify(slug), user.id) - } - } - - return ( -
    - {/* Sidebar */} - - - {/* Messages */} -
    {props.children}
    -
    - ) -} - -const SidebarItem = ({ channel, isActiveChannel, user, userRoles }) => ( - <> -
  • - - {channel.slug} - - {channel.id !== 1 && (channel.created_by === user?.id || userRoles.includes('admin')) && ( - - )} -
  • - -) diff --git a/examples/slack-clone/nextjs-slack-clone/components/Message.js b/examples/slack-clone/nextjs-slack-clone/components/Message.js deleted file mode 100644 index 201012e089d01..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/components/Message.js +++ /dev/null @@ -1,27 +0,0 @@ -import { useContext } from 'react' -import UserContext from '~/lib/UserContext' -import { deleteMessage } from '~/lib/Store' -import TrashIcon from '~/components/TrashIcon' - -const Message = ({ message }) => { - const { user, userRoles } = useContext(UserContext) - - return ( -
    -
    - {(user?.id === message.user_id || - userRoles.some((role) => ['admin', 'moderator'].includes(role))) && ( - - )} -
    -
    -

    {message.author.username}

    -

    {message.message}

    -
    -
    - ) -} - -export default Message diff --git a/examples/slack-clone/nextjs-slack-clone/components/MessageInput.js b/examples/slack-clone/nextjs-slack-clone/components/MessageInput.js deleted file mode 100644 index 1c0e3501beb57..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/components/MessageInput.js +++ /dev/null @@ -1,28 +0,0 @@ -import { useState } from 'react' - -const MessageInput = ({ onSubmit }) => { - const [messageText, setMessageText] = useState('') - - const submitOnEnter = (event) => { - // Watch for enter key - if (event.keyCode === 13) { - onSubmit(messageText) - setMessageText('') - } - } - - return ( - <> - setMessageText(e.target.value)} - onKeyDown={(e) => submitOnEnter(e)} - /> - - ) -} - -export default MessageInput diff --git a/examples/slack-clone/nextjs-slack-clone/components/TrashIcon.js b/examples/slack-clone/nextjs-slack-clone/components/TrashIcon.js deleted file mode 100644 index 23bfaf953a1c2..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/components/TrashIcon.js +++ /dev/null @@ -1,25 +0,0 @@ -const TrashIcon = (props) => { - const { size = 16 } = props - - return ( - - - - - - - ) -} - -export default TrashIcon diff --git a/examples/slack-clone/nextjs-slack-clone/full-schema.sql b/examples/slack-clone/nextjs-slack-clone/full-schema.sql deleted file mode 100644 index 58b277df8950a..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/full-schema.sql +++ /dev/null @@ -1,164 +0,0 @@ --- --- For use with https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone --- - --- Custom types -create type public.app_permission as enum ('channels.delete', 'messages.delete'); -create type public.app_role as enum ('admin', 'moderator'); -create type public.user_status as enum ('ONLINE', 'OFFLINE'); - --- USERS -create table public.users ( - id uuid not null primary key, -- UUID from auth.users - username text, - status user_status default 'OFFLINE'::public.user_status -); -comment on table public.users is 'Profile data for each user.'; -comment on column public.users.id is 'References the internal Supabase Auth user.'; - --- CHANNELS -create table public.channels ( - id bigint generated by default as identity primary key, - inserted_at timestamp with time zone default timezone('utc'::text, now()) not null, - slug text not null unique, - created_by uuid references public.users not null -); -comment on table public.channels is 'Topics and groups.'; - --- MESSAGES -create table public.messages ( - id bigint generated by default as identity primary key, - inserted_at timestamp with time zone default timezone('utc'::text, now()) not null, - message text, - user_id uuid references public.users not null, - channel_id bigint references public.channels on delete cascade not null -); -comment on table public.messages is 'Individual messages sent by each user.'; - --- USER ROLES -create table public.user_roles ( - id bigint generated by default as identity primary key, - user_id uuid references public.users on delete cascade not null, - role app_role not null, - unique (user_id, role) -); -comment on table public.user_roles is 'Application roles for each user.'; - --- ROLE PERMISSIONS -create table public.role_permissions ( - id bigint generated by default as identity primary key, - role app_role not null, - permission app_permission not null, - unique (role, permission) -); -comment on table public.role_permissions is 'Application permissions for each role.'; - --- authorize with role-based access control (RBAC) -create function public.authorize( - requested_permission app_permission, - user_id uuid -) -returns boolean as $$ -declare - bind_permissions int; -begin - select count(*) - from public.role_permissions - inner join public.user_roles on role_permissions.role = user_roles.role - where role_permissions.permission = authorize.requested_permission - and user_roles.user_id = authorize.user_id - into bind_permissions; - - return bind_permissions > 0; -end; -$$ language plpgsql security definer; - --- Secure the tables -alter table public.users enable row level security; -alter table public.channels enable row level security; -alter table public.messages enable row level security; -alter table public.user_roles enable row level security; -alter table public.role_permissions enable row level security; -create policy "Allow logged-in read access" on public.users for select using ( auth.role() = 'authenticated' ); -create policy "Allow individual insert access" on public.users for insert with check ( auth.uid() = id ); -create policy "Allow individual update access" on public.users for update using ( auth.uid() = id ); -create policy "Allow logged-in read access" on public.channels for select using ( auth.role() = 'authenticated' ); -create policy "Allow individual insert access" on public.channels for insert with check ( auth.uid() = created_by ); -create policy "Allow individual delete access" on public.channels for delete using ( auth.uid() = created_by ); -create policy "Allow authorized delete access" on public.channels for delete using ( authorize('channels.delete', auth.uid()) ); -create policy "Allow logged-in read access" on public.messages for select using ( auth.role() = 'authenticated' ); -create policy "Allow individual insert access" on public.messages for insert with check ( auth.uid() = user_id ); -create policy "Allow individual update access" on public.messages for update using ( auth.uid() = user_id ); -create policy "Allow individual delete access" on public.messages for delete using ( auth.uid() = user_id ); -create policy "Allow authorized delete access" on public.messages for delete using ( authorize('messages.delete', auth.uid()) ); -create policy "Allow individual read access" on public.user_roles for select using ( auth.uid() = user_id ); - --- Send "previous data" on change -alter table public.users replica identity full; -alter table public.channels replica identity full; -alter table public.messages replica identity full; - --- inserts a row into public.users and assigns roles -create function public.handle_new_user() -returns trigger as $$ -declare is_admin boolean; -begin - insert into public.users (id, username) - values (new.id, new.email); - - select count(*) = 1 from auth.users into is_admin; - - if position('+supaadmin@' in new.email) > 0 then - insert into public.user_roles (user_id, role) values (new.id, 'admin'); - elsif position('+supamod@' in new.email) > 0 then - insert into public.user_roles (user_id, role) values (new.id, 'moderator'); - end if; - - return new; -end; -$$ language plpgsql security definer; - --- trigger the function every time a user is created -create trigger on_auth_user_created - after insert on auth.users - for each row execute procedure public.handle_new_user(); - -/** - * REALTIME SUBSCRIPTIONS - * Only allow realtime listening on public tables. - */ - -begin; - -- remove the realtime publication - drop publication if exists supabase_realtime; - - -- re-create the publication but don't enable it for any tables - create publication supabase_realtime; -commit; - --- add tables to the publication -alter publication supabase_realtime add table public.channels; -alter publication supabase_realtime add table public.messages; -alter publication supabase_realtime add table public.users; - --- DUMMY DATA -insert into public.users (id, username) -values - ('8d0fd2b3-9ca7-4d9e-a95f-9e13dded323e', 'supabot'); - -insert into public.channels (slug, created_by) -values - ('public', '8d0fd2b3-9ca7-4d9e-a95f-9e13dded323e'), - ('random', '8d0fd2b3-9ca7-4d9e-a95f-9e13dded323e'); - -insert into public.messages (message, channel_id, user_id) -values - ('Hello World 👋', 1, '8d0fd2b3-9ca7-4d9e-a95f-9e13dded323e'), - ('Perfection is attained, not when there is nothing more to add, but when there is nothing left to take away.', 2, '8d0fd2b3-9ca7-4d9e-a95f-9e13dded323e'); - -insert into public.role_permissions (role, permission) -values - ('admin', 'channels.delete'), - ('admin', 'messages.delete'), - ('moderator', 'messages.delete'); - diff --git a/examples/slack-clone/nextjs-slack-clone/jsconfig.json b/examples/slack-clone/nextjs-slack-clone/jsconfig.json deleted file mode 100644 index 7af8f6e0edda1..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/jsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "~/*": ["./*"] - } - } -} diff --git a/examples/slack-clone/nextjs-slack-clone/lib/Store.js b/examples/slack-clone/nextjs-slack-clone/lib/Store.js deleted file mode 100644 index c4382c872c4a7..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/lib/Store.js +++ /dev/null @@ -1,240 +0,0 @@ -import { useState, useEffect } from 'react' -import { createPagesBrowserClient } from '@supabase/auth-helpers-nextjs' - -export const supabase = createPagesBrowserClient() - -/** - * @param {number} channelId the currently selected Channel - */ -export const useStore = (props) => { - const [channels, setChannels] = useState([]) - const [messages, setMessages] = useState([]) - const [users] = useState(new Map()) - const [newMessage, handleNewMessage] = useState(null) - const [newChannel, handleNewChannel] = useState(null) - const [newOrUpdatedUser, handleNewOrUpdatedUser] = useState(null) - const [deletedChannel, handleDeletedChannel] = useState(null) - const [deletedMessage, handleDeletedMessage] = useState(null) - - // Load initial data and set up listeners - useEffect(() => { - // Get Channels - fetchChannels(setChannels) - // Listen for new and deleted messages - const messageListener = supabase - .channel('public:messages') - .on( - 'postgres_changes', - { event: 'INSERT', schema: 'public', table: 'messages' }, - (payload) => handleNewMessage(payload.new) - ) - .on( - 'postgres_changes', - { event: 'DELETE', schema: 'public', table: 'messages' }, - (payload) => handleDeletedMessage(payload.old) - ) - .subscribe() - // Listen for changes to our users - const userListener = supabase - .channel('public:users') - .on( - 'postgres_changes', - { event: '*', schema: 'public', table: 'users' }, - (payload) => handleNewOrUpdatedUser(payload.new) - ) - .subscribe() - // Listen for new and deleted channels - const channelListener = supabase - .channel('public:channels') - .on( - 'postgres_changes', - { event: 'INSERT', schema: 'public', table: 'channels' }, - (payload) => handleNewChannel(payload.new) - ) - .on( - 'postgres_changes', - { event: 'DELETE', schema: 'public', table: 'channels' }, - (payload) => handleDeletedChannel(payload.old) - ) - .subscribe() - // Cleanup on unmount - return () => { - supabase.removeChannel(supabase.channel(messageListener)) - supabase.removeChannel(supabase.channel(userListener)) - supabase.removeChannel(supabase.channel(channelListener)) - } - }, []) - - // Update when the route changes - useEffect(() => { - if (props?.channelId > 0) { - fetchMessages(props.channelId, (messages) => { - messages.forEach((x) => users.set(x.user_id, x.author)) - setMessages(messages) - }) - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.channelId]) - - // New message received from Postgres - useEffect(() => { - if (newMessage && newMessage.channel_id === Number(props.channelId)) { - const handleAsync = async () => { - let authorId = newMessage.user_id - if (!users.get(authorId)) await fetchUser(authorId, (user) => handleNewOrUpdatedUser(user)) - setMessages(messages.concat(newMessage)) - } - handleAsync() - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [newMessage]) - - // Deleted message received from postgres - useEffect(() => { - if (deletedMessage) setMessages(messages.filter((message) => message.id !== deletedMessage.id)) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [deletedMessage]) - - // New channel received from Postgres - useEffect(() => { - if (newChannel) setChannels(channels.concat(newChannel)) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [newChannel]) - - // Deleted channel received from postgres - useEffect(() => { - if (deletedChannel) setChannels(channels.filter((channel) => channel.id !== deletedChannel.id)) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [deletedChannel]) - - // New or updated user received from Postgres - useEffect(() => { - if (newOrUpdatedUser) users.set(newOrUpdatedUser.id, newOrUpdatedUser) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [newOrUpdatedUser]) - - return { - // We can export computed values here to map the authors to each message - messages: messages.map((x) => ({ ...x, author: users.get(x.user_id) })), - channels: channels !== null ? channels.sort((a, b) => a.slug.localeCompare(b.slug)) : [], - users, - } -} - -/** - * Fetch all channels - * @param {function} setState Optionally pass in a hook or callback to set the state - */ -export const fetchChannels = async (setState) => { - try { - let { data } = await supabase.from('channels').select('*') - if (setState) setState(data) - return data - } catch (error) { - console.log('error', error) - } -} - -/** - * Fetch a single user - * @param {number} userId - * @param {function} setState Optionally pass in a hook or callback to set the state - */ -export const fetchUser = async (userId, setState) => { - try { - let { data } = await supabase.from('users').select(`*`).eq('id', userId) - let user = data[0] - if (setState) setState(user) - return user - } catch (error) { - console.log('error', error) - } -} - -/** - * Fetch all roles for the current user - * @param {function} setState Optionally pass in a hook or callback to set the state - */ -export const fetchUserRoles = async (setState) => { - try { - let { data } = await supabase.from('user_roles').select(`*`) - if (setState) setState(data) - return data - } catch (error) { - console.log('error', error) - } -} - -/** - * Fetch all messages and their authors - * @param {number} channelId - * @param {function} setState Optionally pass in a hook or callback to set the state - */ -export const fetchMessages = async (channelId, setState) => { - try { - let { data } = await supabase - .from('messages') - .select(`*, author:user_id(*)`) - .eq('channel_id', channelId) - .order('inserted_at', { ascending: true }) - if (setState) setState(data) - return data - } catch (error) { - console.log('error', error) - } -} - -/** - * Insert a new channel into the DB - * @param {string} slug The channel name - * @param {number} user_id The channel creator - */ -export const addChannel = async (slug, user_id) => { - try { - let { data } = await supabase.from('channels').insert([{ slug, created_by: user_id }]).select() - return data - } catch (error) { - console.log('error', error) - } -} - -/** - * Insert a new message into the DB - * @param {string} message The message text - * @param {number} channel_id - * @param {number} user_id The author - */ -export const addMessage = async (message, channel_id, user_id) => { - try { - let { data } = await supabase.from('messages').insert([{ message, channel_id, user_id }]).select() - return data - } catch (error) { - console.log('error', error) - } -} - -/** - * Delete a channel from the DB - * @param {number} channel_id - */ -export const deleteChannel = async (channel_id) => { - try { - let { data } = await supabase.from('channels').delete().match({ id: channel_id }) - return data - } catch (error) { - console.log('error', error) - } -} - -/** - * Delete a message from the DB - * @param {number} message_id - */ -export const deleteMessage = async (message_id) => { - try { - let { data } = await supabase.from('messages').delete().match({ id: message_id }) - return data - } catch (error) { - console.log('error', error) - } -} diff --git a/examples/slack-clone/nextjs-slack-clone/lib/UserContext.js b/examples/slack-clone/nextjs-slack-clone/lib/UserContext.js deleted file mode 100644 index ee09678f5089b..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/lib/UserContext.js +++ /dev/null @@ -1,5 +0,0 @@ -import { createContext } from 'react' - -const UserContext = createContext() - -export default UserContext diff --git a/examples/slack-clone/nextjs-slack-clone/package-lock.json b/examples/slack-clone/nextjs-slack-clone/package-lock.json deleted file mode 100644 index dd187f4f898ec..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/package-lock.json +++ /dev/null @@ -1,2977 +0,0 @@ -{ - "name": "supabase-slack-clone-basic", - "version": "0.2.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "supabase-slack-clone-basic", - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "@supabase/auth-helpers-nextjs": "^0.7.2", - "@supabase/supabase-js": "^2.26.0", - "next": "latest", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "autoprefixer": "^10.4.14", - "postcss": "^8.4.24", - "tailwindcss": "^3.3.2" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@next/env": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.1.5.tgz", - "integrity": "sha512-+34yUJslfJi7Lyx6ELuN8nWcOzi27izfYnZIC1Dqv7kmmfiBVxgzR3BXhlvEMTKC2IRJhXVs2FkMY+buQe3k7Q==" - }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.5.tgz", - "integrity": "sha512-SKnGTdYcoN04Y2DvE0/Y7/MjkA+ltsmbuH/y/hR7Ob7tsj+8ZdOYuk+YvW1B8dY20nDPHP58XgDTSm2nA8BzzA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.5.tgz", - "integrity": "sha512-YXiqgQ/9Rxg1dXp6brXbeQM1JDx9SwUY/36JiE+36FXqYEmDYbxld9qkX6GEzkc5rbwJ+RCitargnzEtwGW0mw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.5.tgz", - "integrity": "sha512-y8mhldb/WFZ6lFeowkGfi0cO/lBdiBqDk4T4LZLvCpoQp4Or/NzUN6P5NzBQZ5/b4oUHM/wQICEM+1wKA4qIVw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.5.tgz", - "integrity": "sha512-wqJ3X7WQdTwSGi0kIDEmzw34QHISRIQ5uvC+VXmsIlCPFcMA+zM5723uh8NfuKGquDMiEMS31a83QgkuHMYbwQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.5.tgz", - "integrity": "sha512-WnhdM5duONMvt2CncAl+9pim0wBxDS2lHoo7ub/o/i1bRbs11UTzosKzEXVaTDCUkCX2c32lIDi1WcN2ZPkcdw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.5.tgz", - "integrity": "sha512-Jq2H68yQ4bLUhR/XQnbw3LDW0GMQn355qx6rU36BthDLeGue7YV7MqNPa8GKvrpPocEMW77nWx/1yI6w6J07gw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.5.tgz", - "integrity": "sha512-KgPjwdbhDqXI7ghNN8V/WAiLquc9Ebe8KBrNNEL0NQr+yd9CyKJ6KqjayVkmX+hbHzbyvbui/5wh/p3CZQ9xcQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.5.tgz", - "integrity": "sha512-O2ErUTvCJ6DkNTSr9pbu1n3tcqykqE/ebty1rwClzIYdOgpB3T2MfEPP+K7GhUR87wmN/hlihO9ch7qpVFDGKw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.5.tgz", - "integrity": "sha512-1eIlZmlO/VRjxxzUBcVosf54AFU3ltAzHi+BJA+9U/lPxCYIsT+R4uO3QksRzRjKWhVQMRjEnlXyyq5SKJm7BA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.5.tgz", - "integrity": "sha512-oromsfokbEuVb0CBLLE7R9qX3KGXucZpsojLpzUh1QJjuy1QkrPJncwr8xmWQnwgtQ6ecMWXgXPB+qtvizT9Tw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.5.tgz", - "integrity": "sha512-a/51L5KzBpeZSW9LbekMo3I3Cwul+V+QKwbEIMA+Qwb2qrlcn1L9h3lt8cHqNTFt2y72ce6aTwDTw1lyi5oIRA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.5.tgz", - "integrity": "sha512-/SoXW1Ntpmpw3AXAzfDRaQidnd8kbZ2oSni8u5z0yw6t4RwJvmdZy1eOaAADRThWKV+2oU90++LSnXJIwBRWYQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@supabase/auth-helpers-nextjs": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-nextjs/-/auth-helpers-nextjs-0.7.2.tgz", - "integrity": "sha512-n5IyGBYJV/WiR5Rgw4CUaiJYiOv9yW2of4ZP4EyzKt2O6/6rztt7PcGE4AoK2vERw+fb5F2QtJBdt6J5eOYCCw==", - "dependencies": { - "@supabase/auth-helpers-shared": "0.4.1", - "set-cookie-parser": "^2.6.0" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.19.0" - } - }, - "node_modules/@supabase/auth-helpers-shared": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-shared/-/auth-helpers-shared-0.4.1.tgz", - "integrity": "sha512-IEDX9JzWkIjQiLUaP4Qy5YDiG0jFQatWfS+jw8cCQs6QfbNdEPd2Y3qonwGHnM90CZom9SvjuylBv2pFVAL7Lw==", - "dependencies": { - "jose": "^4.14.3" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.19.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.2.tgz", - "integrity": "sha512-QCR6pwJs9exCl37bmpMisUd6mf+0SUBJ6mUpiAjEkSJ/+xW8TCuO14bvkWHADd5hElJK9MxNlMQXxSA4DRz9nQ==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.38.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.38.0.tgz", - "integrity": "sha512-iitNthPLQjAD73FtnUNUalwPFpsiiE7t/0mVw14b+3rqzr52Efri8gAjzT9hi7p35uOLA76HMY3aWJj6Gy7ozw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.7.1.tgz", - "integrity": "sha512-xPRYLaZrkLbXNlzmHW6Wtf9hmcBLjjI5xUz2zj8oE2hgXGaYoZBBkpN9bmW9i17Z1f6Ujxa942AqK439XOA36A==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.3.tgz", - "integrity": "sha512-c7TzL81sx2kqyxsxcDduJcHL9KJdCOoKimGP6lQSqiZKX42ATlBZpWbyy9KFGFBjAP4nyopMf5JhPi2ZH9jyNw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "@types/websocket": "^1.0.3", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.1.tgz", - "integrity": "sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.26.0.tgz", - "integrity": "sha512-RXmTPTobaYAwkSobadHZmEVLmzX3SGrtRZIGfLWnLv92VzBRrjuXn0a+bJqKl50GUzsyqPA+j5pod7EwMkcH5A==", - "dependencies": { - "@supabase/functions-js": "^2.1.0", - "@supabase/gotrue-js": "^2.31.0", - "@supabase/postgrest-js": "^1.7.0", - "@supabase/realtime-js": "^2.7.3", - "@supabase/storage-js": "^2.5.1", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" - }, - "node_modules/@types/phoenix": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.0.tgz", - "integrity": "sha512-qwfpsHmFuhAS/dVd4uBIraMxRd56vwBUYQGZ6GpXnFuM2XMRFJbIyruFKKlW2daQliuYZwe0qfn/UjFCDKic5g==" - }, - "node_modules/@types/websocket": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", - "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "devOptional": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "devOptional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "devOptional": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "devOptional": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.7.tgz", - "integrity": "sha512-Ff9FKeIMm0Rx1o8TEV87bTK5M232akt7uSAYrSTU/QA/W6Jj9P+fWn1mxGgl+dwDzpFoAY35OIS2SJXA8WEWKA==", - "dependencies": { - "node-fetch": "2.6.12" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", - "dev": true - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "devOptional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "optional": true, - "peer": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "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 - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/next/-/next-12.1.5.tgz", - "integrity": "sha512-YGHDpyfgCfnT5GZObsKepmRnne7Kzp7nGrac07dikhutWQug7hHg85/+sPJ4ZW5Q2pDkb+n0FnmLkmd44htIJQ==", - "dependencies": { - "@next/env": "12.1.5", - "caniuse-lite": "^1.0.30001283", - "postcss": "8.4.5", - "styled-jsx": "5.0.1" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=12.22.0" - }, - "optionalDependencies": { - "@next/swc-android-arm-eabi": "12.1.5", - "@next/swc-android-arm64": "12.1.5", - "@next/swc-darwin-arm64": "12.1.5", - "@next/swc-darwin-x64": "12.1.5", - "@next/swc-linux-arm-gnueabihf": "12.1.5", - "@next/swc-linux-arm64-gnu": "12.1.5", - "@next/swc-linux-arm64-musl": "12.1.5", - "@next/swc-linux-x64-gnu": "12.1.5", - "@next/swc-linux-x64-musl": "12.1.5", - "@next/swc-win32-arm64-msvc": "12.1.5", - "@next/swc-win32-ia32-msvc": "12.1.5", - "@next/swc-win32-x64-msvc": "12.1.5" - }, - "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 - } - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "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/" - } - }, - "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/sass": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.50.0.tgz", - "integrity": "sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ==", - "optional": true, - "peer": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/styled-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.1.tgz", - "integrity": "sha512-+PIZ/6Uk40mphiQJJI1202b+/dYeTVd9ZnMPR80pgiWbjIwvN2zIp4r9et0BgqBuShh48I0gttPlAXA7WVvBxw==", - "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 - } - } - }, - "node_modules/sucrase": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", - "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwindcss": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", - "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", - "dev": true, - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tailwindcss/node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - } - }, - "dependencies": { - "@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } - } - }, - "@next/env": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.1.5.tgz", - "integrity": "sha512-+34yUJslfJi7Lyx6ELuN8nWcOzi27izfYnZIC1Dqv7kmmfiBVxgzR3BXhlvEMTKC2IRJhXVs2FkMY+buQe3k7Q==" - }, - "@next/swc-android-arm-eabi": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.5.tgz", - "integrity": "sha512-SKnGTdYcoN04Y2DvE0/Y7/MjkA+ltsmbuH/y/hR7Ob7tsj+8ZdOYuk+YvW1B8dY20nDPHP58XgDTSm2nA8BzzA==", - "optional": true - }, - "@next/swc-android-arm64": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.5.tgz", - "integrity": "sha512-YXiqgQ/9Rxg1dXp6brXbeQM1JDx9SwUY/36JiE+36FXqYEmDYbxld9qkX6GEzkc5rbwJ+RCitargnzEtwGW0mw==", - "optional": true - }, - "@next/swc-darwin-arm64": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.5.tgz", - "integrity": "sha512-y8mhldb/WFZ6lFeowkGfi0cO/lBdiBqDk4T4LZLvCpoQp4Or/NzUN6P5NzBQZ5/b4oUHM/wQICEM+1wKA4qIVw==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.5.tgz", - "integrity": "sha512-wqJ3X7WQdTwSGi0kIDEmzw34QHISRIQ5uvC+VXmsIlCPFcMA+zM5723uh8NfuKGquDMiEMS31a83QgkuHMYbwQ==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.5.tgz", - "integrity": "sha512-WnhdM5duONMvt2CncAl+9pim0wBxDS2lHoo7ub/o/i1bRbs11UTzosKzEXVaTDCUkCX2c32lIDi1WcN2ZPkcdw==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.5.tgz", - "integrity": "sha512-Jq2H68yQ4bLUhR/XQnbw3LDW0GMQn355qx6rU36BthDLeGue7YV7MqNPa8GKvrpPocEMW77nWx/1yI6w6J07gw==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.5.tgz", - "integrity": "sha512-KgPjwdbhDqXI7ghNN8V/WAiLquc9Ebe8KBrNNEL0NQr+yd9CyKJ6KqjayVkmX+hbHzbyvbui/5wh/p3CZQ9xcQ==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.5.tgz", - "integrity": "sha512-O2ErUTvCJ6DkNTSr9pbu1n3tcqykqE/ebty1rwClzIYdOgpB3T2MfEPP+K7GhUR87wmN/hlihO9ch7qpVFDGKw==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.5.tgz", - "integrity": "sha512-1eIlZmlO/VRjxxzUBcVosf54AFU3ltAzHi+BJA+9U/lPxCYIsT+R4uO3QksRzRjKWhVQMRjEnlXyyq5SKJm7BA==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.5.tgz", - "integrity": "sha512-oromsfokbEuVb0CBLLE7R9qX3KGXucZpsojLpzUh1QJjuy1QkrPJncwr8xmWQnwgtQ6ecMWXgXPB+qtvizT9Tw==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.5.tgz", - "integrity": "sha512-a/51L5KzBpeZSW9LbekMo3I3Cwul+V+QKwbEIMA+Qwb2qrlcn1L9h3lt8cHqNTFt2y72ce6aTwDTw1lyi5oIRA==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.5.tgz", - "integrity": "sha512-/SoXW1Ntpmpw3AXAzfDRaQidnd8kbZ2oSni8u5z0yw6t4RwJvmdZy1eOaAADRThWKV+2oU90++LSnXJIwBRWYQ==", - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@supabase/auth-helpers-nextjs": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-nextjs/-/auth-helpers-nextjs-0.7.2.tgz", - "integrity": "sha512-n5IyGBYJV/WiR5Rgw4CUaiJYiOv9yW2of4ZP4EyzKt2O6/6rztt7PcGE4AoK2vERw+fb5F2QtJBdt6J5eOYCCw==", - "requires": { - "@supabase/auth-helpers-shared": "0.4.1", - "set-cookie-parser": "^2.6.0" - } - }, - "@supabase/auth-helpers-shared": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-shared/-/auth-helpers-shared-0.4.1.tgz", - "integrity": "sha512-IEDX9JzWkIjQiLUaP4Qy5YDiG0jFQatWfS+jw8cCQs6QfbNdEPd2Y3qonwGHnM90CZom9SvjuylBv2pFVAL7Lw==", - "requires": { - "jose": "^4.14.3" - } - }, - "@supabase/functions-js": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.2.tgz", - "integrity": "sha512-QCR6pwJs9exCl37bmpMisUd6mf+0SUBJ6mUpiAjEkSJ/+xW8TCuO14bvkWHADd5hElJK9MxNlMQXxSA4DRz9nQ==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.38.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.38.0.tgz", - "integrity": "sha512-iitNthPLQjAD73FtnUNUalwPFpsiiE7t/0mVw14b+3rqzr52Efri8gAjzT9hi7p35uOLA76HMY3aWJj6Gy7ozw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.7.1.tgz", - "integrity": "sha512-xPRYLaZrkLbXNlzmHW6Wtf9hmcBLjjI5xUz2zj8oE2hgXGaYoZBBkpN9bmW9i17Z1f6Ujxa942AqK439XOA36A==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.3.tgz", - "integrity": "sha512-c7TzL81sx2kqyxsxcDduJcHL9KJdCOoKimGP6lQSqiZKX42ATlBZpWbyy9KFGFBjAP4nyopMf5JhPi2ZH9jyNw==", - "requires": { - "@types/phoenix": "^1.5.4", - "@types/websocket": "^1.0.3", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.1.tgz", - "integrity": "sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.26.0.tgz", - "integrity": "sha512-RXmTPTobaYAwkSobadHZmEVLmzX3SGrtRZIGfLWnLv92VzBRrjuXn0a+bJqKl50GUzsyqPA+j5pod7EwMkcH5A==", - "requires": { - "@supabase/functions-js": "^2.1.0", - "@supabase/gotrue-js": "^2.31.0", - "@supabase/postgrest-js": "^1.7.0", - "@supabase/realtime-js": "^2.7.3", - "@supabase/storage-js": "^2.5.1", - "cross-fetch": "^3.1.5" - } - }, - "@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" - }, - "@types/phoenix": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.0.tgz", - "integrity": "sha512-qwfpsHmFuhAS/dVd4uBIraMxRd56vwBUYQGZ6GpXnFuM2XMRFJbIyruFKKlW2daQliuYZwe0qfn/UjFCDKic5g==" - }, - "@types/websocket": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", - "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", - "requires": { - "@types/node": "*" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "devOptional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "devOptional": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "devOptional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "devOptional": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.7.tgz", - "integrity": "sha512-Ff9FKeIMm0Rx1o8TEV87bTK5M232akt7uSAYrSTU/QA/W6Jj9P+fWn1mxGgl+dwDzpFoAY35OIS2SJXA8WEWKA==", - "requires": { - "node-fetch": "2.6.12" - } - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", - "dev": true - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "devOptional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "optional": true, - "peer": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "devOptional": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true - }, - "jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true - }, - "lines-and-columns": { - "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 - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" - }, - "next": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/next/-/next-12.1.5.tgz", - "integrity": "sha512-YGHDpyfgCfnT5GZObsKepmRnne7Kzp7nGrac07dikhutWQug7hHg85/+sPJ4ZW5Q2pDkb+n0FnmLkmd44htIJQ==", - "requires": { - "@next/env": "12.1.5", - "@next/swc-android-arm-eabi": "12.1.5", - "@next/swc-android-arm64": "12.1.5", - "@next/swc-darwin-arm64": "12.1.5", - "@next/swc-darwin-x64": "12.1.5", - "@next/swc-linux-arm-gnueabihf": "12.1.5", - "@next/swc-linux-arm64-gnu": "12.1.5", - "@next/swc-linux-arm64-musl": "12.1.5", - "@next/swc-linux-x64-gnu": "12.1.5", - "@next/swc-linux-x64-musl": "12.1.5", - "@next/swc-win32-arm64-msvc": "12.1.5", - "@next/swc-win32-ia32-msvc": "12.1.5", - "@next/swc-win32-x64-msvc": "12.1.5", - "caniuse-lite": "^1.0.30001283", - "postcss": "8.4.5", - "styled-jsx": "5.0.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" - } - } - } - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==" - }, - "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "devOptional": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - } - }, - "postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.11" - } - }, - "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "sass": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.50.0.tgz", - "integrity": "sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ==", - "optional": true, - "peer": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "styled-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.1.tgz", - "integrity": "sha512-+PIZ/6Uk40mphiQJJI1202b+/dYeTVd9ZnMPR80pgiWbjIwvN2zIp4r9et0BgqBuShh48I0gttPlAXA7WVvBxw==", - "requires": {} - }, - "sucrase": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", - "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "tailwindcss": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", - "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", - "dev": true, - "requires": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "requires": { - "camelcase-css": "^2.0.1" - } - } - } - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true - } - } -} diff --git a/examples/slack-clone/nextjs-slack-clone/package.json b/examples/slack-clone/nextjs-slack-clone/package.json deleted file mode 100644 index 4af29dafd8ad5..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "supabase-slack-clone-basic", - "version": "0.2.0", - "license": "MIT", - "scripts": { - "dev": "next dev", - "export": "next export", - "build": "next build", - "start": "next start" - }, - "dependencies": { - "@supabase/supabase-js": "^2.26.0", - "@supabase/auth-helpers-nextjs": "^0.7.2", - "next": "latest", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "autoprefixer": "^10.4.14", - "postcss": "^8.4.24", - "tailwindcss": "^3.3.2" - } -} diff --git a/examples/slack-clone/nextjs-slack-clone/pages/_app.js b/examples/slack-clone/nextjs-slack-clone/pages/_app.js deleted file mode 100644 index 3db2d706fa314..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/pages/_app.js +++ /dev/null @@ -1,62 +0,0 @@ -import '~/styles/style.scss' -import React, { useState, useEffect } from 'react' -import { useRouter } from 'next/router' -import UserContext from 'lib/UserContext' -import { supabase, fetchUserRoles } from 'lib/Store' - -export default function SupabaseSlackClone({ Component, pageProps }) { - const [userLoaded, setUserLoaded] = useState(false) - const [user, setUser] = useState(null) - const [session, setSession] = useState(null) - const [userRoles, setUserRoles] = useState([]) - const router = useRouter() - - useEffect(() => { - function saveSession( - /** @type {Awaited>['data']['session']} */ - session - ) { - setSession(session) - const currentUser = session?.user - setUser(currentUser ?? null) - setUserLoaded(!!currentUser) - if (currentUser) { - signIn(currentUser.id, currentUser.email) - router.push('/channels/[id]', '/channels/1') - } - } - - supabase.auth.getSession().then(({ data: { session }}) => saveSession(session)) - - const { subscription: authListener } = supabase.auth.onAuthStateChange(async (event, session) => saveSession(session)) - - return () => { - authListener.unsubscribe() - } - }, []) - - const signIn = async () => { - await fetchUserRoles((userRoles) => setUserRoles(userRoles.map((userRole) => userRole.role))) - } - - const signOut = async () => { - const { error } = await supabase.auth.signOut() - if (!error) { - router.push('/') - } - } - - return ( - - - - ) -} diff --git a/examples/slack-clone/nextjs-slack-clone/pages/channels/[id].js b/examples/slack-clone/nextjs-slack-clone/pages/channels/[id].js deleted file mode 100644 index ffb4891d38b7f..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/pages/channels/[id].js +++ /dev/null @@ -1,52 +0,0 @@ -import Layout from '~/components/Layout' -import Message from '~/components/Message' -import MessageInput from '~/components/MessageInput' -import { useRouter } from 'next/router' -import { useStore, addMessage } from '~/lib/Store' -import { useContext, useEffect, useRef } from 'react' -import UserContext from '~/lib/UserContext' - -const ChannelsPage = (props) => { - const router = useRouter() - const { user, authLoaded, signOut } = useContext(UserContext) - const messagesEndRef = useRef(null) - - // Else load up the page - const { id: channelId } = router.query - const { messages, channels } = useStore({ channelId }) - - useEffect(() => { - messagesEndRef.current.scrollIntoView({ - block: 'start', - behavior: 'smooth', - }) - }, [messages]) - - // redirect to public channel when current channel is deleted - useEffect(() => { - if (!channels.some((channel) => channel.id === Number(channelId))) { - router.push('/channels/1') - } - }, [channels, channelId]) - - // Render the channels and messages - return ( - -
    -
    -
    - {messages.map((x) => ( - - ))} -
    -
    -
    -
    - addMessage(text, channelId, user.id)} /> -
    -
    - - ) -} - -export default ChannelsPage diff --git a/examples/slack-clone/nextjs-slack-clone/pages/index.js b/examples/slack-clone/nextjs-slack-clone/pages/index.js deleted file mode 100644 index e5237bcdeccd6..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/pages/index.js +++ /dev/null @@ -1,79 +0,0 @@ -import { useState } from 'react' -import { supabase } from 'lib/Store' - -const Home = () => { - const [username, setUsername] = useState('') - const [password, setPassword] = useState('') - - const handleLogin = async (type, username, password) => { - try { - const { error, data: { user } } = - type === 'LOGIN' - ? await supabase.auth.signInWithPassword({ email: username, password }) - : await supabase.auth.signUp({ email: username, password }) - // If the user doesn't exist here and an error hasn't been raised yet, - // that must mean that a confirmation email has been sent. - // NOTE: Confirming your email address is required by default. - if (error) { - alert('Error with auth: ' + error.message) - } else if (!user) alert('Signup successful, confirmation mail should be sent soon!') - } catch (error) { - console.log('error', error) - alert(error.error_description || error) - } - } - - return ( - - ) -} - -export default Home diff --git a/examples/slack-clone/nextjs-slack-clone/postcss.config.js b/examples/slack-clone/nextjs-slack-clone/postcss.config.js deleted file mode 100644 index 33ad091d26d8a..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/examples/slack-clone/nextjs-slack-clone/public/slack-clone-demo.gif b/examples/slack-clone/nextjs-slack-clone/public/slack-clone-demo.gif deleted file mode 100644 index 8dff9b017beae..0000000000000 Binary files a/examples/slack-clone/nextjs-slack-clone/public/slack-clone-demo.gif and /dev/null differ diff --git a/examples/slack-clone/nextjs-slack-clone/styles/style.scss b/examples/slack-clone/nextjs-slack-clone/styles/style.scss deleted file mode 100644 index 0178587b767ef..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/styles/style.scss +++ /dev/null @@ -1,28 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -html, -body, -#__next, -.main { - max-height: 100vh; - height: 100vh; - margin: 0; - padding: 0; - overflow: hidden; -} -.channel-list { - li a:before { - content: '# '; - opacity: 0.5; - } - li a:hover { - opacity: 0.9; - } -} -.Messages { - overflow: auto; - display: flex; - flex-direction: column-reverse; -} diff --git a/examples/slack-clone/nextjs-slack-clone/tailwind.config.js b/examples/slack-clone/nextjs-slack-clone/tailwind.config.js deleted file mode 100644 index 29d69e3ef1b56..0000000000000 --- a/examples/slack-clone/nextjs-slack-clone/tailwind.config.js +++ /dev/null @@ -1,12 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - "./pages/**/*.{js,ts,jsx,tsx,mdx}", - "./components/**/*.{js,ts,jsx,tsx,mdx}", - ], - theme: { - extend: {}, - }, - plugins: [], -} - diff --git a/examples/storage/resumable-upload-uppy/README.md b/examples/storage/resumable-upload-uppy/README.md deleted file mode 100644 index bbf4c94a6e441..0000000000000 --- a/examples/storage/resumable-upload-uppy/README.md +++ /dev/null @@ -1,22 +0,0 @@ -## Resumable Uploads with Supabase Storage and Uppy - -This example shows how to use [Supabase Storage](https://supabase.io/docs/reference/javascript/storage) with [Uppy](https://uppy.io/) to upload files to Supabase Storage using the TUS protocol (resumable uploads). - -### Running the example - -- Create a supabase bucket from the Supabase UI -- Add a policy to allow public uploads - - e.g. `CREATE POLICY "allow uploads" ON storage.objects FOR INSERT TO public WITH CHECK (bucket_id = 'your-bucket-name');` -- Open the index.html file and replace the following variables with your own: - -```js -const SUPABASE_ANON_KEY = '' // your project's anon key -const SUPABASE_PROJECT_ID = '' // your project ref -const STORAGE_BUCKET = '' // your storage bucket name -``` - -Serve the index.html file locally (e.g. with Python Simple HTTP Server) and start uploading: - -```bash -python3 -m http.server -``` diff --git a/examples/storage/resumable-upload-uppy/index.html b/examples/storage/resumable-upload-uppy/index.html deleted file mode 100644 index 1cbf59242d299..0000000000000 --- a/examples/storage/resumable-upload-uppy/index.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - Resumable Upload Supabase + UppyJS - - - - - - -
    - Read the docs. - - - - diff --git a/examples/storage/resumable-upload-uppy/supabase-logo-wordmark--dark.png b/examples/storage/resumable-upload-uppy/supabase-logo-wordmark--dark.png deleted file mode 100644 index dccffd4247d60..0000000000000 Binary files a/examples/storage/resumable-upload-uppy/supabase-logo-wordmark--dark.png and /dev/null differ diff --git a/examples/todo-list/nextjs-todo-list/.env.local.example b/examples/todo-list/nextjs-todo-list/.env.local.example deleted file mode 100644 index 477da3d401d67..0000000000000 --- a/examples/todo-list/nextjs-todo-list/.env.local.example +++ /dev/null @@ -1,3 +0,0 @@ -# Update these with your Supabase details from your project settings > API -NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co -NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key \ No newline at end of file diff --git a/examples/todo-list/nextjs-todo-list/.eslintrc.json b/examples/todo-list/nextjs-todo-list/.eslintrc.json deleted file mode 100644 index bffb357a71225..0000000000000 --- a/examples/todo-list/nextjs-todo-list/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/examples/todo-list/nextjs-todo-list/.gitignore b/examples/todo-list/nextjs-todo-list/.gitignore deleted file mode 100644 index c87c9b392c020..0000000000000 --- a/examples/todo-list/nextjs-todo-list/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/examples/todo-list/nextjs-todo-list/README.md b/examples/todo-list/nextjs-todo-list/README.md deleted file mode 100644 index 5d9f9cd51a2e5..0000000000000 --- a/examples/todo-list/nextjs-todo-list/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Todo example using Supabase - -- Frontend: - - [Next.js](https://github.com/vercel/next.js) - a React framework for production. - - [Tailwind](https://tailwindcss.com/) for styling and layout. - - [Supabase.js](https://supabase.com/docs/library/getting-started) for user management and realtime data syncing. -- Backend: - - [supabase.com/dashboard](https://supabase.com/dashboard/): hosted Postgres database with restful API for usage with Supabase.js. - -## Deploy with Vercel - -The Vercel deployment will guide you through creating a Supabase account and project. After installation of the Supabase integration, all relevant environment variables will be set up so that the project is usable immediately after deployment 🚀 - -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fsupabase%2Fsupabase%2Ftree%2Fmaster%2Fexamples%2Ftodo-list%2Fnextjs-todo-list&project-name=supabase-nextjs-todo-list&repository-name=supabase-nextjs-todo-list&integration-ids=oac_VqOgBHqhEoFTPzGkPd7L0iH6&external-id=https%3A%2F%2Fgithub.com%2Fsupabase%2Fsupabase%2Ftree%2Fmaster%2Fexamples%2Ftodo-list%2Fnextjs-todo-list) - -## Build from scratch - -### 1. Create new project - -Sign up to Supabase - [https://supabase.com/dashboard](https://supabase.com/dashboard) and create a new project. Wait for your database to start. - -### 2. Run "Todo List" Quickstart - -Once your database has started, run the "Todo List" quickstart. Inside of your project, enter the `SQL editor` tab and scroll down until you see `TODO LIST: Build a basic todo list with Row Level Security`. - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). - -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) - -**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. - -## Supabase details - -### Postgres Row level security - -This project uses very high-level Authorization using Postgres' Role Level Security. -When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. -When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. -We can use these details to provide fine-grained control over what each user can and cannot do. - -This is a trimmed-down schema, with the policies: - -```sql -create table todos ( - id bigint generated by default as identity primary key, - user_id uuid references auth.users not null, - task text check (char_length(task) > 3), - is_complete boolean default false, - inserted_at timestamp with time zone default timezone('utc'::text, now()) not null -); - -alter table todos enable row level security; - -create policy "Individuals can create todos." on todos for - insert with check (auth.uid() = user_id); - -create policy "Individuals can view their own todos. " on todos for - select using (auth.uid() = user_id); - -create policy "Individuals can update their own todos." on todos for - update using (auth.uid() = user_id); - -create policy "Individuals can delete their own todos." on todos for - delete using (auth.uid() = user_id); -``` - -## Authors - -- [Supabase](https://supabase.com) - -Supabase is open source. We'd love for you to follow along and get involved at https://github.com/supabase/supabase diff --git a/examples/todo-list/nextjs-todo-list/components/TodoList.tsx b/examples/todo-list/nextjs-todo-list/components/TodoList.tsx deleted file mode 100644 index 6d060b5a9644e..0000000000000 --- a/examples/todo-list/nextjs-todo-list/components/TodoList.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import { Database } from '@/lib/schema' -import { Session, useSupabaseClient } from '@supabase/auth-helpers-react' -import { useEffect, useState } from 'react' - -type Todos = Database['public']['Tables']['todos']['Row'] - -export default function TodoList({ session }: { session: Session }) { - const supabase = useSupabaseClient() - const [todos, setTodos] = useState([]) - const [newTaskText, setNewTaskText] = useState('') - const [errorText, setErrorText] = useState('') - - const user = session.user - - useEffect(() => { - const fetchTodos = async () => { - const { data: todos, error } = await supabase - .from('todos') - .select('*') - .order('id', { ascending: true }) - - if (error) console.log('error', error) - else setTodos(todos) - } - - fetchTodos() - }, [supabase]) - - const addTodo = async (taskText: string) => { - let task = taskText.trim() - if (task.length) { - const { data: todo, error } = await supabase - .from('todos') - .insert({ task, user_id: user.id }) - .select() - .single() - - if (error) { - setErrorText(error.message) - } else { - setTodos([...todos, todo]) - setNewTaskText('') - } - } - } - - const deleteTodo = async (id: number) => { - try { - await supabase.from('todos').delete().eq('id', id).throwOnError() - setTodos(todos.filter((x) => x.id != id)) - } catch (error) { - console.log('error', error) - } - } - - return ( -
    -

    Todo List.

    -
    { - e.preventDefault() - addTodo(newTaskText) - }} - className="flex gap-2 my-2" - > - { - setErrorText('') - setNewTaskText(e.target.value) - }} - /> - -
    - {!!errorText && } -
    -
      - {todos.map((todo) => ( - deleteTodo(todo.id)} /> - ))} -
    -
    -
    - ) -} - -const Todo = ({ todo, onDelete }: { todo: Todos; onDelete: () => void }) => { - const supabase = useSupabaseClient() - const [isCompleted, setIsCompleted] = useState(todo.is_complete) - - const toggle = async () => { - try { - const { data } = await supabase - .from('todos') - .update({ is_complete: !isCompleted }) - .eq('id', todo.id) - .throwOnError() - .select() - .single() - - if (data) setIsCompleted(data.is_complete) - } catch (error) { - console.log('error', error) - } - } - - return ( -
  • -
    -
    -
    {todo.task}
    -
    -
    - toggle()} - type="checkbox" - checked={isCompleted ? true : false} - /> -
    - -
    -
  • - ) -} - -const Alert = ({ text }: { text: string }) => ( -
    -
    {text}
    -
    -) diff --git a/examples/todo-list/nextjs-todo-list/lib/initSupabase.ts b/examples/todo-list/nextjs-todo-list/lib/initSupabase.ts deleted file mode 100644 index 7827f47d5a9e6..0000000000000 --- a/examples/todo-list/nextjs-todo-list/lib/initSupabase.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createClient } from '@supabase/supabase-js' - -export const supabase = createClient( - process.env.NEXT_PUBLIC_SUPABASE_URL ?? '', - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ?? '' -) diff --git a/examples/todo-list/nextjs-todo-list/lib/schema.ts b/examples/todo-list/nextjs-todo-list/lib/schema.ts deleted file mode 100644 index ec8b8f854b2a6..0000000000000 --- a/examples/todo-list/nextjs-todo-list/lib/schema.ts +++ /dev/null @@ -1,49 +0,0 @@ -export type Json = - | string - | number - | boolean - | null - | { [key: string]: Json } - | Json[] - -export interface Database { - public: { - Tables: { - todos: { - Row: { - id: number - inserted_at: string - is_complete: boolean | null - task: string | null - user_id: string - } - Insert: { - id?: number - inserted_at?: string - is_complete?: boolean | null - task?: string | null - user_id: string - } - Update: { - id?: number - inserted_at?: string - is_complete?: boolean | null - task?: string | null - user_id?: string - } - } - } - Views: { - [_ in never]: never - } - Functions: { - [_ in never]: never - } - Enums: { - [_ in never]: never - } - CompositeTypes: { - [_ in never]: never - } - } -} diff --git a/examples/todo-list/nextjs-todo-list/next.config.js b/examples/todo-list/nextjs-todo-list/next.config.js deleted file mode 100644 index a843cbee09afa..0000000000000 --- a/examples/todo-list/nextjs-todo-list/next.config.js +++ /dev/null @@ -1,6 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - reactStrictMode: true, -} - -module.exports = nextConfig diff --git a/examples/todo-list/nextjs-todo-list/package-lock.json b/examples/todo-list/nextjs-todo-list/package-lock.json deleted file mode 100644 index c0e01d3f014c5..0000000000000 --- a/examples/todo-list/nextjs-todo-list/package-lock.json +++ /dev/null @@ -1,4276 +0,0 @@ -{ - "name": "nextjs-todo-list", - "version": "2.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "nextjs-todo-list", - "version": "2.0.0", - "dependencies": { - "@next/font": "13.1.6", - "@supabase/auth-helpers-react": "^0.3.1", - "@supabase/auth-ui-react": "^0.2.8", - "@supabase/supabase-js": "^2.8.0", - "@types/node": "18.14.0", - "@types/react": "18.0.28", - "@types/react-dom": "18.0.11", - "eslint": "8.34.0", - "eslint-config-next": "13.1.6", - "next": "13.1.6", - "react": "18.2.0", - "react-dom": "18.2.0", - "typescript": "4.9.5" - }, - "devDependencies": { - "concurrently": "^7.6.0", - "tailwindcss": "^3.2.7" - } - }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "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==", - "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", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "node_modules/@next/env": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.6.tgz", - "integrity": "sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.6.tgz", - "integrity": "sha512-o7cauUYsXjzSJkay8wKjpKJf2uLzlggCsGUkPu3lP09Pv97jYlekTC20KJrjQKmSv5DXV0R/uks2ZXhqjNkqAw==", - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/font": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.6.tgz", - "integrity": "sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ==" - }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz", - "integrity": "sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz", - "integrity": "sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz", - "integrity": "sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz", - "integrity": "sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-freebsd-x64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz", - "integrity": "sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz", - "integrity": "sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz", - "integrity": "sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz", - "integrity": "sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz", - "integrity": "sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz", - "integrity": "sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz", - "integrity": "sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz", - "integrity": "sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz", - "integrity": "sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", - "dependencies": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" - }, - "node_modules/@stitches/core": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", - "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==" - }, - "node_modules/@stitches/react": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@stitches/react/-/react-1.2.8.tgz", - "integrity": "sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==", - "peerDependencies": { - "react": ">= 16.3.0" - } - }, - "node_modules/@supabase/auth-helpers-react": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-react/-/auth-helpers-react-0.3.1.tgz", - "integrity": "sha512-g3SFv08Dz9FapNif/ZY1b7qKGlMJDyTLSayHBz3kb3FuYxg7aLWgQtydDhm5AGbc0XtvpIBuhGTIOVevwpdosA==", - "peerDependencies": { - "@supabase/supabase-js": "^2.0.4" - } - }, - "node_modules/@supabase/auth-ui-react": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@supabase/auth-ui-react/-/auth-ui-react-0.2.8.tgz", - "integrity": "sha512-CfN9Zt2t1PMfri8htLCFYYIWho6F15ZvbWICE3RuOZ348z1P15iP6scjxB3704Jbu334Q+ykCQP+UzdnB7cXHQ==", - "dependencies": { - "@stitches/core": "^1.2.8", - "@stitches/react": "^1.2.8", - "prop-types": "^15.7.2" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.1 || ^18.0.0", - "react-dom": "^16.13.1 || ^17.0.1 || ^18.0.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.12.1.tgz", - "integrity": "sha512-r8Jfq8FvP6q4kp7sI33X1RWfEEHzJFu9uM1Q6HgiDVkY89NNgqYy2kxaRGtidPFllND7vpcJUcpoWS5oq+4u0g==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.4.1.tgz", - "integrity": "sha512-aruqwV/aTggkM7OVv2JinCeXmRMKHJCZpkuS1nuoa0NgLw7g3NyILSyWOKYTBJ/PxE/zXtWsBhdxFzaaNz5uxg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.6.0.tgz", - "integrity": "sha512-tOVulMobhpxyDuu8VIImpL8FXmZOKsGNOSyS5ihJdj2xYmPPvYG+D2J51Ewfl+MFF65tweiB6p9N9bNIW1cDNA==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.3.0.tgz", - "integrity": "sha512-YGWVCEYYYF3+UiyL8O4xC78N9n9paLbT0hHl8dmYAtd3DqyWtu5Eph9JTu0PWm+/29Zhns5TbhUZW4xpWjJfPQ==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.8.0.tgz", - "integrity": "sha512-uzf4J+qAKdUMhB2tnJl6BrQRUQBinwjJ2eWo2ZsDw9EUUP5JcHsxTamiq6p91DpqzmTIRg3xRAT+bItTzbfa0w==", - "dependencies": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.12.0", - "@supabase/postgrest-js": "^1.1.1", - "@supabase/realtime-js": "^2.4.0", - "@supabase/storage-js": "^2.1.0", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@swc/helpers": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", - "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" - }, - "node_modules/@types/phoenix": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.5.tgz", - "integrity": "sha512-1eWWT19k0L4ZiTvdXjAvJ9KvW0B8SdiVftQmFPJGTEx78Q4PCSIQDpz+EfkFVR1N4U9gREjlW4JXL8YCIlY0bw==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "18.0.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", - "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", - "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", - "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", - "dependencies": { - "@typescript-eslint/scope-manager": "5.53.0", - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/typescript-estree": "5.53.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", - "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", - "dependencies": { - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/visitor-keys": "5.53.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", - "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", - "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", - "dependencies": { - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/visitor-keys": "5.53.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", - "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", - "dependencies": { - "@typescript-eslint/types": "5.53.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", - "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001457", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", - "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/concurrently": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", - "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.29.1", - "lodash": "^4.17.21", - "rxjs": "^7.0.0", - "shell-quote": "^1.7.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^17.3.1" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "node_modules/date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", - "dev": true, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", - "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", - "dependencies": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.1.6.tgz", - "integrity": "sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw==", - "dependencies": { - "@next/eslint-plugin-next": "13.1.6", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", - "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.10.0", - "get-tsconfig": "^4.2.0", - "globby": "^13.1.2", - "is-core-module": "^2.10.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.4" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", - "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "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==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/next": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/next/-/next-13.1.6.tgz", - "integrity": "sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==", - "dependencies": { - "@next/env": "13.1.6", - "@swc/helpers": "0.4.14", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.1" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=14.6.0" - }, - "optionalDependencies": { - "@next/swc-android-arm-eabi": "13.1.6", - "@next/swc-android-arm64": "13.1.6", - "@next/swc-darwin-arm64": "13.1.6", - "@next/swc-darwin-x64": "13.1.6", - "@next/swc-freebsd-x64": "13.1.6", - "@next/swc-linux-arm-gnueabihf": "13.1.6", - "@next/swc-linux-arm64-gnu": "13.1.6", - "@next/swc-linux-arm64-musl": "13.1.6", - "@next/swc-linux-x64-gnu": "13.1.6", - "@next/swc-linux-x64-musl": "13.1.6", - "@next/swc-win32-arm64-msvc": "13.1.6", - "@next/swc-win32-ia32-msvc": "13.1.6", - "@next/swc-win32-x64-msvc": "13.1.6" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "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==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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" - } - }, - "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.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", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", - "dev": true - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dependencies": { - "client-only": "0.0.1" - }, - "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 - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tailwindcss": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.7.tgz", - "integrity": "sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==", - "dev": true, - "dependencies": { - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "lilconfig": "^2.0.6", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.0.9", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.1" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/tailwindcss/node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "dev": true, - "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" - } - }, - "node_modules/tailwindcss/node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/examples/todo-list/nextjs-todo-list/package.json b/examples/todo-list/nextjs-todo-list/package.json deleted file mode 100644 index 32fac003794aa..0000000000000 --- a/examples/todo-list/nextjs-todo-list/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "nextjs-todo-list", - "version": "2.0.0", - "private": true, - "scripts": { - "dev": "concurrently \"npm run dev:css\" \"next dev\"", - "dev:css": "tailwindcss -w -i ./styles/tailwind.css -o styles/app.css", - "build": "next build", - "build:css": "tailwindcss -m -i ./styles/tailwind.css -o styles/app.css", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "@next/font": "13.1.6", - "@supabase/auth-helpers-react": "^0.3.1", - "@supabase/auth-ui-react": "^0.2.8", - "@supabase/supabase-js": "^2.8.0", - "@types/node": "18.14.0", - "@types/react": "18.0.28", - "@types/react-dom": "18.0.11", - "eslint": "8.34.0", - "eslint-config-next": "13.1.6", - "next": "13.1.6", - "react": "18.2.0", - "react-dom": "18.2.0", - "typescript": "4.9.5" - }, - "devDependencies": { - "concurrently": "^7.6.0", - "tailwindcss": "^3.2.7" - } -} diff --git a/examples/todo-list/nextjs-todo-list/pages/_app.tsx b/examples/todo-list/nextjs-todo-list/pages/_app.tsx deleted file mode 100644 index 59d31d438bc87..0000000000000 --- a/examples/todo-list/nextjs-todo-list/pages/_app.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { supabase } from '@/lib/initSupabase' -import '@/styles/app.css' -import { SessionContextProvider } from '@supabase/auth-helpers-react' -import type { AppProps } from 'next/app' - -export default function App({ Component, pageProps }: AppProps) { - return ( - - - - ) -} diff --git a/examples/todo-list/nextjs-todo-list/pages/_document.tsx b/examples/todo-list/nextjs-todo-list/pages/_document.tsx deleted file mode 100644 index 54e8bf3e2a290..0000000000000 --- a/examples/todo-list/nextjs-todo-list/pages/_document.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Html, Head, Main, NextScript } from 'next/document' - -export default function Document() { - return ( - - - -
    - - - - ) -} diff --git a/examples/todo-list/nextjs-todo-list/pages/api/hello.ts b/examples/todo-list/nextjs-todo-list/pages/api/hello.ts deleted file mode 100644 index f8bcc7e5caed1..0000000000000 --- a/examples/todo-list/nextjs-todo-list/pages/api/hello.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import type { NextApiRequest, NextApiResponse } from 'next' - -type Data = { - name: string -} - -export default function handler( - req: NextApiRequest, - res: NextApiResponse -) { - res.status(200).json({ name: 'John Doe' }) -} diff --git a/examples/todo-list/nextjs-todo-list/pages/index.tsx b/examples/todo-list/nextjs-todo-list/pages/index.tsx deleted file mode 100644 index d498b19419f8b..0000000000000 --- a/examples/todo-list/nextjs-todo-list/pages/index.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import Head from 'next/head' -import { useSession, useSupabaseClient } from '@supabase/auth-helpers-react' -import { Auth, ThemeSupa } from '@supabase/auth-ui-react' -import TodoList from '@/components/TodoList' - -export default function Home() { - const session = useSession() - const supabase = useSupabaseClient() - - return ( - <> - - Create Next App - - - - -
    - {!session ? ( -
    -
    -
    - - Login - - -
    -
    -
    - ) : ( -
    - - -
    - )} -
    - - ) -} diff --git a/examples/todo-list/nextjs-todo-list/public/favicon.ico b/examples/todo-list/nextjs-todo-list/public/favicon.ico deleted file mode 100644 index 718d6fea4835e..0000000000000 Binary files a/examples/todo-list/nextjs-todo-list/public/favicon.ico and /dev/null differ diff --git a/examples/todo-list/nextjs-todo-list/public/next.svg b/examples/todo-list/nextjs-todo-list/public/next.svg deleted file mode 100644 index 5174b28c565c2..0000000000000 --- a/examples/todo-list/nextjs-todo-list/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/todo-list/nextjs-todo-list/public/thirteen.svg b/examples/todo-list/nextjs-todo-list/public/thirteen.svg deleted file mode 100644 index 8977c1bd123cb..0000000000000 --- a/examples/todo-list/nextjs-todo-list/public/thirteen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/todo-list/nextjs-todo-list/public/vercel.svg b/examples/todo-list/nextjs-todo-list/public/vercel.svg deleted file mode 100644 index d2f84222734f2..0000000000000 --- a/examples/todo-list/nextjs-todo-list/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/todo-list/nextjs-todo-list/styles/app.css b/examples/todo-list/nextjs-todo-list/styles/app.css deleted file mode 100644 index 0530e31caccb1..0000000000000 --- a/examples/todo-list/nextjs-todo-list/styles/app.css +++ /dev/null @@ -1,844 +0,0 @@ -/* -! tailwindcss v3.2.7 | MIT License | https://tailwindcss.com -*/ - -/* -1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) -2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) -*/ - -*, -::before, -::after { - box-sizing: border-box; - /* 1 */ - border-width: 0; - /* 2 */ - border-style: solid; - /* 2 */ - border-color: #e5e7eb; - /* 2 */ -} - -::before, -::after { - --tw-content: ''; -} - -/* -1. Use a consistent sensible line-height in all browsers. -2. Prevent adjustments of font size after orientation changes in iOS. -3. Use a more readable tab size. -4. Use the user's configured `sans` font-family by default. -5. Use the user's configured `sans` font-feature-settings by default. -*/ - -html { - line-height: 1.5; - /* 1 */ - -webkit-text-size-adjust: 100%; - /* 2 */ - -moz-tab-size: 4; - /* 3 */ - -o-tab-size: 4; - tab-size: 4; - /* 3 */ - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - /* 4 */ - font-feature-settings: normal; - /* 5 */ -} - -/* -1. Remove the margin in all browsers. -2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. -*/ - -body { - margin: 0; - /* 1 */ - line-height: inherit; - /* 2 */ -} - -/* -1. Add the correct height in Firefox. -2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) -3. Ensure horizontal rules are visible by default. -*/ - -hr { - height: 0; - /* 1 */ - color: inherit; - /* 2 */ - border-top-width: 1px; - /* 3 */ -} - -/* -Add the correct text decoration in Chrome, Edge, and Safari. -*/ - -abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; -} - -/* -Remove the default font size and weight for headings. -*/ - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} - -/* -Reset links to optimize for opt-in styling instead of opt-out. -*/ - -a { - color: inherit; - text-decoration: inherit; -} - -/* -Add the correct font weight in Edge and Safari. -*/ - -b, -strong { - font-weight: bolder; -} - -/* -1. Use the user's configured `mono` font family by default. -2. Correct the odd `em` font sizing in all browsers. -*/ - -code, -kbd, -samp, -pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - /* 1 */ - font-size: 1em; - /* 2 */ -} - -/* -Add the correct font size in all browsers. -*/ - -small { - font-size: 80%; -} - -/* -Prevent `sub` and `sup` elements from affecting the line height in all browsers. -*/ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* -1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) -2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) -3. Remove gaps between table borders by default. -*/ - -table { - text-indent: 0; - /* 1 */ - border-color: inherit; - /* 2 */ - border-collapse: collapse; - /* 3 */ -} - -/* -1. Change the font styles in all browsers. -2. Remove the margin in Firefox and Safari. -3. Remove default padding in all browsers. -*/ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; - /* 1 */ - font-size: 100%; - /* 1 */ - font-weight: inherit; - /* 1 */ - line-height: inherit; - /* 1 */ - color: inherit; - /* 1 */ - margin: 0; - /* 2 */ - padding: 0; - /* 3 */ -} - -/* -Remove the inheritance of text transform in Edge and Firefox. -*/ - -button, -select { - text-transform: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Remove default button styles. -*/ - -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; - /* 1 */ - background-color: transparent; - /* 2 */ - background-image: none; - /* 2 */ -} - -/* -Use the modern Firefox focus style for all focusable elements. -*/ - -:-moz-focusring { - outline: auto; -} - -/* -Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) -*/ - -:-moz-ui-invalid { - box-shadow: none; -} - -/* -Add the correct vertical alignment in Chrome and Firefox. -*/ - -progress { - vertical-align: baseline; -} - -/* -Correct the cursor style of increment and decrement buttons in Safari. -*/ - -::-webkit-inner-spin-button, -::-webkit-outer-spin-button { - height: auto; -} - -/* -1. Correct the odd appearance in Chrome and Safari. -2. Correct the outline style in Safari. -*/ - -[type='search'] { - -webkit-appearance: textfield; - /* 1 */ - outline-offset: -2px; - /* 2 */ -} - -/* -Remove the inner padding in Chrome and Safari on macOS. -*/ - -::-webkit-search-decoration { - -webkit-appearance: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Change font properties to `inherit` in Safari. -*/ - -::-webkit-file-upload-button { - -webkit-appearance: button; - /* 1 */ - font: inherit; - /* 2 */ -} - -/* -Add the correct display in Chrome and Safari. -*/ - -summary { - display: list-item; -} - -/* -Removes the default spacing and border for appropriate elements. -*/ - -blockquote, -dl, -dd, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -figure, -p, -pre { - margin: 0; -} - -fieldset { - margin: 0; - padding: 0; -} - -legend { - padding: 0; -} - -ol, -ul, -menu { - list-style: none; - margin: 0; - padding: 0; -} - -/* -Prevent resizing textareas horizontally by default. -*/ - -textarea { - resize: vertical; -} - -/* -1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) -2. Set the default placeholder color to the user's configured gray 400 color. -*/ - -input::-moz-placeholder, textarea::-moz-placeholder { - opacity: 1; - /* 1 */ - color: #9ca3af; - /* 2 */ -} - -input::placeholder, -textarea::placeholder { - opacity: 1; - /* 1 */ - color: #9ca3af; - /* 2 */ -} - -/* -Set the default cursor for buttons. -*/ - -button, -[role="button"] { - cursor: pointer; -} - -/* -Make sure disabled buttons don't get the pointer cursor. -*/ - -:disabled { - cursor: default; -} - -/* -1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) -2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) - This can trigger a poorly considered lint error in some tools but is included by design. -*/ - -img, -svg, -video, -canvas, -audio, -iframe, -embed, -object { - display: block; - /* 1 */ - vertical-align: middle; - /* 2 */ -} - -/* -Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) -*/ - -img, -video { - max-width: 100%; - height: auto; -} - -/* Make elements with the HTML hidden attribute stay hidden by default */ - -[hidden] { - display: none; -} - -*, ::before, ::after { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; -} - -::backdrop { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; -} - -.mx-4 { - margin-left: 1rem; - margin-right: 1rem; -} - -.my-2 { - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} - -.my-3 { - margin-top: 0.75rem; - margin-bottom: 0.75rem; -} - -.mb-1 { - margin-bottom: 0.25rem; -} - -.mb-12 { - margin-bottom: 3rem; -} - -.ml-2 { - margin-left: 0.5rem; -} - -.mt-12 { - margin-top: 3rem; -} - -.block { - display: block; -} - -.flex { - display: flex; -} - -.h-4 { - height: 1rem; -} - -.h-full { - height: 100%; -} - -.min-h-screen { - min-height: 100vh; -} - -.w-4 { - width: 1rem; -} - -.w-full { - width: 100%; -} - -.min-w-0 { - min-width: 0px; -} - -.min-w-full { - min-width: 100%; -} - -.max-w-sm { - max-width: 24rem; -} - -.flex-1 { - flex: 1 1 0%; -} - -.cursor-pointer { - cursor: pointer; -} - -.flex-col { - flex-direction: column; -} - -.items-center { - align-items: center; -} - -.justify-center { - justify-content: center; -} - -.gap-2 { - gap: 0.5rem; -} - -.overflow-hidden { - overflow: hidden; -} - -.truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.rounded { - border-radius: 0.25rem; -} - -.rounded-md { - border-radius: 0.375rem; -} - -.border-2 { - border-width: 2px; -} - -.border-b { - border-bottom-width: 1px; -} - -.bg-gray-200 { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.bg-red-100 { - --tw-bg-opacity: 1; - background-color: rgb(254 226 226 / var(--tw-bg-opacity)); -} - -.bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} - -.p-2 { - padding: 0.5rem; -} - -.p-4 { - padding: 1rem; -} - -.p-5 { - padding: 1.25rem; -} - -.px-4 { - padding-left: 1rem; - padding-right: 1rem; -} - -.py-4 { - padding-top: 1rem; - padding-bottom: 1rem; -} - -.pb-2 { - padding-bottom: 0.5rem; -} - -.text-center { - text-align: center; -} - -.font-sans { - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; -} - -.text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; -} - -.text-base { - font-size: 1rem; - line-height: 1.5rem; -} - -.text-sm { - font-size: 0.875rem; - line-height: 1.25rem; -} - -.font-medium { - font-weight: 500; -} - -.leading-5 { - line-height: 1.25rem; -} - -.text-red-700 { - --tw-text-opacity: 1; - color: rgb(185 28 28 / var(--tw-text-opacity)); -} - -.shadow { - --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.filter { - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.transition { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.duration-150 { - transition-duration: 150ms; -} - -.ease-in-out { - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); -} - -/* Write your own custom component styles here */ - -.btn-black { - border-radius: 0.25rem; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(0 0 0 / var(--tw-bg-opacity)); - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - text-align: center; - font-weight: 700; - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.btn-black:hover { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(0 0 0 / var(--tw-text-opacity)); - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.btn-black-outline { - border-radius: 0.25rem; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - text-align: center; - font-weight: 700; - --tw-text-opacity: 1; - color: rgb(0 0 0 / var(--tw-text-opacity)); -} - -.btn-black-outline:hover { - --tw-bg-opacity: 1; - background-color: rgb(0 0 0 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -html, -body, -#__next { - height: 100vh; - min-height: 100vh; -} - -h1 { - font-size: 4rem; - font-weight: bold; - display: block; -} - -.hover\:border-black:hover { - --tw-border-opacity: 1; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); -} - -.hover\:bg-gray-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.focus\:bg-gray-200:focus { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.focus\:outline-none:focus { - outline: 2px solid transparent; - outline-offset: 2px; -} - -@media (min-width: 640px) { - .sm\:h-auto { - height: auto; - } - - .sm\:w-2\/5 { - width: 40%; - } - - .sm\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } -} diff --git a/examples/todo-list/nextjs-todo-list/styles/tailwind.css b/examples/todo-list/nextjs-todo-list/styles/tailwind.css deleted file mode 100644 index a183f14adb781..0000000000000 --- a/examples/todo-list/nextjs-todo-list/styles/tailwind.css +++ /dev/null @@ -1,30 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* Write your own custom component styles here */ -.btn-black { - @apply border border-black bg-black text-white font-bold py-2 px-4 rounded text-center; -} -.btn-black:hover { - @apply transition duration-150 bg-white text-black; -} -.btn-black-outline { - @apply border border-black text-black py-2 px-4 rounded font-bold text-center; -} -.btn-black-outline:hover { - @apply transition duration-150 bg-black text-white; -} - -html, -body, -#__next { - height: 100vh; - min-height: 100vh; -} - -h1 { - font-size: 4rem; - font-weight: bold; - display: block; -} diff --git a/examples/todo-list/nextjs-todo-list/supabase/.gitignore b/examples/todo-list/nextjs-todo-list/supabase/.gitignore deleted file mode 100644 index 773c7c3e0a15a..0000000000000 --- a/examples/todo-list/nextjs-todo-list/supabase/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Supabase -.branches -.temp diff --git a/examples/todo-list/nextjs-todo-list/supabase/config.toml b/examples/todo-list/nextjs-todo-list/supabase/config.toml deleted file mode 100644 index 1a1fc154f7c2e..0000000000000 --- a/examples/todo-list/nextjs-todo-list/supabase/config.toml +++ /dev/null @@ -1,87 +0,0 @@ -# A string used to distinguish different Supabase projects on the same host. Defaults to the working -# directory name when running `supabase init`. -project_id = "nextjs-todo-list" - -[api] -# Port to use for the API URL. -port = 54321 -# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API -# endpoints. public and storage are always included. -schemas = ["public", "storage", "graphql_public"] -# Extra schemas to add to the search_path of every request. public is always included. -extra_search_path = ["public", "extensions"] -# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size -# for accidental or malicious requests. -max_rows = 1000 - -[db] -# Port to use for the local database URL. -port = 54322 -# The database major version to use. This has to be the same as your remote database's. Run `SHOW -# server_version;` on the remote database to check. -major_version = 15 - -[studio] -# Port to use for Supabase Studio. -port = 54323 - -[kong] -# Number of nginx workers for handling requests. Set this to 1 to minimize memory usage. -# Omitting it or setting it to 0 will autodetect based on the number of CPU cores. -nginx_worker_processes = 1 - -# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they -# are monitored, and you can view the emails that would have been sent from the web interface. -[inbucket] -# Port to use for the email testing server web interface. -port = 54324 -smtp_port = 54325 -pop3_port = 54326 - -[storage] -# The maximum file size allowed (e.g. "5MB", "500KB"). -file_size_limit = "50MiB" - -[auth] -# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used -# in emails. -site_url = "http://localhost:3000" -# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. -additional_redirect_urls = ["https://localhost:3000"] -# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one -# week). -jwt_expiry = 3600 -# Allow/disallow new user signups to your project. -enable_signup = true - -[auth.email] -# Allow/disallow new user signups via email to your project. -enable_signup = true -# If enabled, a user will be required to confirm any email change on both the old, and new email -# addresses. If disabled, only the new email is required to confirm. -double_confirm_changes = true -# If enabled, users need to confirm their email address before signing in. -enable_confirmations = false - -# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, -# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, `twitch`, -# `twitter`, `slack`, `spotify`, `workos`, `zoom`. -[auth.external.apple] -enabled = false -client_id = "" -secret = "" -# Overrides the default auth redirectUrl. -redirect_uri = "" -# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, -# or any other third-party OIDC providers. -url = "" - -[analytics] -enabled = false -port = 54327 -vector_port = 54328 -# Setup BigQuery project to enable log viewer on local development stack. -# See: https://supabase.com/docs/guides/getting-started/local-development#enabling-local-logging -gcp_project_id = "" -gcp_project_number = "" -gcp_jwt_path = "supabase/gcloud.json" diff --git a/examples/todo-list/nextjs-todo-list/supabase/migrations/20230712094349_init.sql b/examples/todo-list/nextjs-todo-list/supabase/migrations/20230712094349_init.sql deleted file mode 100644 index 1b1a98ace2e43..0000000000000 --- a/examples/todo-list/nextjs-todo-list/supabase/migrations/20230712094349_init.sql +++ /dev/null @@ -1,16 +0,0 @@ -create table todos ( - id bigint generated by default as identity primary key, - user_id uuid references auth.users not null, - task text check (char_length(task) > 3), - is_complete boolean default false, - inserted_at timestamp with time zone default timezone('utc'::text, now()) not null -); -alter table todos enable row level security; -create policy "Individuals can create todos." on todos for - insert with check (auth.uid() = user_id); -create policy "Individuals can view their own todos. " on todos for - select using (auth.uid() = user_id); -create policy "Individuals can update their own todos." on todos for - update using (auth.uid() = user_id); -create policy "Individuals can delete their own todos." on todos for - delete using (auth.uid() = user_id); \ No newline at end of file diff --git a/examples/todo-list/nextjs-todo-list/supabase/seed.sql b/examples/todo-list/nextjs-todo-list/supabase/seed.sql deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/examples/todo-list/nextjs-todo-list/tailwind.config.js b/examples/todo-list/nextjs-todo-list/tailwind.config.js deleted file mode 100644 index 81f91ba2f1539..0000000000000 --- a/examples/todo-list/nextjs-todo-list/tailwind.config.js +++ /dev/null @@ -1,13 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ['./components/**/*.{js,ts,jsx,tsx}', './pages/**/*.{js,ts,jsx,tsx}'], - theme: { - extend: { - colors: { - 'accent-1': '#333', - }, - }, - }, - variants: {}, - plugins: [], -} diff --git a/examples/todo-list/nextjs-todo-list/tsconfig.json b/examples/todo-list/nextjs-todo-list/tsconfig.json deleted file mode 100644 index f4ab65fd2ebfc..0000000000000 --- a/examples/todo-list/nextjs-todo-list/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "baseUrl": ".", - "paths": { - "@/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] -} diff --git a/examples/todo-list/nuxt3-todo-list/README.md b/examples/todo-list/nuxt3-todo-list/README.md deleted file mode 100644 index baf548365b8fd..0000000000000 --- a/examples/todo-list/nuxt3-todo-list/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Nuxt3 TODO list example - -Please refer to https://github.com/nuxt-modules/supabase/tree/main/demo diff --git a/examples/todo-list/sveltejs-todo-list/.env.example b/examples/todo-list/sveltejs-todo-list/.env.example deleted file mode 100644 index 12c3cbaafdeba..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -# Update these with your Supabase details from your project settings > API -VITE_SUPABASE_URL=https://your-project.supabase.co -VITE_SUPABASE_ANON_KEY=your-anon-key \ No newline at end of file diff --git a/examples/todo-list/sveltejs-todo-list/.gitignore b/examples/todo-list/sveltejs-todo-list/.gitignore deleted file mode 100644 index 934bd6306e185..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? - -# Vite -.vite diff --git a/examples/todo-list/sveltejs-todo-list/README.md b/examples/todo-list/sveltejs-todo-list/README.md deleted file mode 100644 index e3382248761ea..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# Todo example using Supabase + Svelte + Vite - -- Frontend: - - Svelte, TypeScript - - [Supabase.js](https://supabase.com/docs/library/getting-started) for user management and realtime data syncing. -- Backend: - - [supabase.com/dashboard](https://supabase.com/dashboard/): hosted Postgres database with restful API for usage with Supabase.js. - -### 1. Create new project - -Sign up to Supabase - [https://supabase.com/dashboard](https://supabase.com/dashboard) and create a new project. Wait for your database to start. - -### 2. Run "Todo List" Quickstart - -Once your database has started, run the "Todo List" quickstart. Inside of your project, enter the `SQL editor` tab and scroll down until you see `TODO LIST: Build a basic todo list with Row Level Security`. - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). - -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) - -**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. - -## Supabase details - -### Postgres Row level security - -This project uses very high-level Authorization using Postgres' Role Level Security. -When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. -When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. -We can use these details to provide fine-grained control over what each user can and cannot do. - -This is a trimmed-down schema, with the policies: - -```sql -create table todos ( - id bigint generated by default as identity primary key, - user_id uuid references auth.users not null, - task text check (char_length(task) > 3), - is_complete boolean default false, - inserted_at timestamp with time zone default timezone('utc'::text, now()) not null -); - -alter table todos enable row level security; - -create policy "Individuals can create todos." on todos for - insert with check (auth.uid() = user_id); - -create policy "Individuals can view their own todos. " on todos for - select using (auth.uid() = user_id); - -create policy "Individuals can update their own todos." on todos for - update using (auth.uid() = user_id); - -create policy "Individuals can delete their own todos." on todos for - delete using (auth.uid() = user_id); -``` - -## Authors - -- [Supabase](https://supabase.com) - -Supabase is open source. We'd love for you to follow along and get involved at https://github.com/supabase/supabase diff --git a/examples/todo-list/sveltejs-todo-list/index.html b/examples/todo-list/sveltejs-todo-list/index.html deleted file mode 100644 index 043e6e7a6f0bf..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Supabase Todo List Example - - -
    - - - diff --git a/examples/todo-list/sveltejs-todo-list/package-lock.json b/examples/todo-list/sveltejs-todo-list/package-lock.json deleted file mode 100644 index d15d479af9cf6..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/package-lock.json +++ /dev/null @@ -1,3970 +0,0 @@ -{ - "name": "sveltejs-todo-list", - "version": "2.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "sveltejs-todo-list", - "version": "2.0.0", - "dependencies": { - "@supabase/supabase-js": "^2.0.4" - }, - "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.1", - "@tsconfig/svelte": "^3.0.0", - "concurrently": "^7.3.0", - "svelte": "^3.49.0", - "svelte-check": "^2.8.0", - "svelte-hcaptcha": "^0.1.1", - "svelte-preprocess": "^4.10.7", - "tailwindcss": "^3.1.8", - "tslib": "^2.4.0", - "typescript": "^4.7.4", - "vite": "^3.2.7" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "dependencies": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.1.tgz", - "integrity": "sha512-PorCgUounn0VXcpeJu+hOweZODKmGuLHsLomwqSj+p26IwjjGffmYQfVHtiTWq+NqaUuuHWWG7vPge6UFw4Aeg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.2.1", - "debug": "^4.3.4", - "deepmerge": "^4.2.2", - "kleur": "^4.1.5", - "magic-string": "^0.26.2", - "svelte-hmr": "^0.14.12" - }, - "engines": { - "node": "^14.18.0 || >= 16" - }, - "peerDependencies": { - "diff-match-patch": "^1.0.5", - "svelte": "^3.44.0", - "vite": "^3.0.0" - }, - "peerDependenciesMeta": { - "diff-match-patch": { - "optional": true - } - } - }, - "node_modules/@tsconfig/svelte": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-3.0.0.tgz", - "integrity": "sha512-pYrtLtOwku/7r1i9AMONsJMVYAtk3hzOfiGNekhtq5tYBGA7unMve8RvUclKLMT3PrihvJqUmzsRGh0RP84hKg==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.6.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz", - "integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg==", - "dev": true - }, - "node_modules/@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "node_modules/@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", - "dev": true - }, - "node_modules/@types/sass": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", - "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concurrently": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.3.0.tgz", - "integrity": "sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^7.0.0", - "shell-quote": "^1.7.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^17.3.1" - }, - "bin": { - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.0 || >=16.0.0" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/date-fns": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz", - "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==", - "dev": true, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", - "dev": true - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.6" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", - "dev": true, - "dependencies": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "node_modules/sorcery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", - "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0", - "sourcemap-codec": "^1.3.0" - }, - "bin": { - "sorcery": "bin/index.js" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svelte": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.49.0.tgz", - "integrity": "sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/svelte-check": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.8.0.tgz", - "integrity": "sha512-HRL66BxffMAZusqe5I5k26mRWQ+BobGd9Rxm3onh7ZVu0nTk8YTKJ9vu3LVPjUGLU9IX7zS+jmwPVhJYdXJ8vg==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.9", - "chokidar": "^3.4.1", - "fast-glob": "^3.2.7", - "import-fresh": "^3.2.1", - "picocolors": "^1.0.0", - "sade": "^1.7.4", - "svelte-preprocess": "^4.0.0", - "typescript": "*" - }, - "bin": { - "svelte-check": "bin/svelte-check" - }, - "peerDependencies": { - "svelte": "^3.24.0" - } - }, - "node_modules/svelte-hcaptcha": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/svelte-hcaptcha/-/svelte-hcaptcha-0.1.1.tgz", - "integrity": "sha512-iFF3HwfrCRciJnDs4Y9/rpP/BM2U/5zt+vh+9d4tALPAHVkcANiJIKqYuS835pIaTm6gt+xOzjfFI3cgiRI29A==", - "dev": true - }, - "node_modules/svelte-hmr": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.12.tgz", - "integrity": "sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w==", - "dev": true, - "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" - }, - "peerDependencies": { - "svelte": ">=3.19.0" - } - }, - "node_modules/svelte-preprocess": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", - "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@types/pug": "^2.0.4", - "@types/sass": "^1.16.0", - "detect-indent": "^6.0.0", - "magic-string": "^0.25.7", - "sorcery": "^0.10.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">= 9.11.2" - }, - "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3 || ^4.0.0", - "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": "^0.55.0", - "sugarss": "^2.0.0", - "svelte": "^3.23.0", - "typescript": "^3.9.5 || ^4.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/svelte-preprocess/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/tailwindcss": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", - "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", - "dev": true, - "dependencies": { - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "lilconfig": "^2.0.6", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.14", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.1" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/vite": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", - "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", - "dev": true, - "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - } - }, - "dependencies": { - "@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "dev": true, - "optional": true - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "requires": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "@sveltejs/vite-plugin-svelte": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.1.tgz", - "integrity": "sha512-PorCgUounn0VXcpeJu+hOweZODKmGuLHsLomwqSj+p26IwjjGffmYQfVHtiTWq+NqaUuuHWWG7vPge6UFw4Aeg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.2.1", - "debug": "^4.3.4", - "deepmerge": "^4.2.2", - "kleur": "^4.1.5", - "magic-string": "^0.26.2", - "svelte-hmr": "^0.14.12" - } - }, - "@tsconfig/svelte": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-3.0.0.tgz", - "integrity": "sha512-pYrtLtOwku/7r1i9AMONsJMVYAtk3hzOfiGNekhtq5tYBGA7unMve8RvUclKLMT3PrihvJqUmzsRGh0RP84hKg==", - "dev": true - }, - "@types/node": { - "version": "18.6.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz", - "integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg==", - "dev": true - }, - "@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", - "dev": true - }, - "@types/sass": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", - "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concurrently": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.3.0.tgz", - "integrity": "sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^7.0.0", - "shell-quote": "^1.7.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^17.3.1" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "date-fns": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz", - "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - } - }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "dev": true, - "optional": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true - }, - "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", - "dev": true, - "requires": { - "camelcase-css": "^2.0.1" - } - }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - } - }, - "postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.6" - } - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "requires": { - "mri": "^1.1.0" - } - }, - "sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", - "dev": true, - "requires": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" - } - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "sorcery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", - "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0", - "sourcemap-codec": "^1.3.0" - } - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "svelte": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.49.0.tgz", - "integrity": "sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==", - "dev": true - }, - "svelte-check": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.8.0.tgz", - "integrity": "sha512-HRL66BxffMAZusqe5I5k26mRWQ+BobGd9Rxm3onh7ZVu0nTk8YTKJ9vu3LVPjUGLU9IX7zS+jmwPVhJYdXJ8vg==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.9", - "chokidar": "^3.4.1", - "fast-glob": "^3.2.7", - "import-fresh": "^3.2.1", - "picocolors": "^1.0.0", - "sade": "^1.7.4", - "svelte-preprocess": "^4.0.0", - "typescript": "*" - } - }, - "svelte-hcaptcha": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/svelte-hcaptcha/-/svelte-hcaptcha-0.1.1.tgz", - "integrity": "sha512-iFF3HwfrCRciJnDs4Y9/rpP/BM2U/5zt+vh+9d4tALPAHVkcANiJIKqYuS835pIaTm6gt+xOzjfFI3cgiRI29A==", - "dev": true - }, - "svelte-hmr": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.12.tgz", - "integrity": "sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w==", - "dev": true, - "requires": {} - }, - "svelte-preprocess": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", - "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==", - "dev": true, - "requires": { - "@types/pug": "^2.0.4", - "@types/sass": "^1.16.0", - "detect-indent": "^6.0.0", - "magic-string": "^0.25.7", - "sorcery": "^0.10.0", - "strip-indent": "^3.0.0" - }, - "dependencies": { - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - } - } - }, - "tailwindcss": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", - "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", - "dev": true, - "requires": { - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "lilconfig": "^2.0.6", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.14", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "vite": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", - "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", - "dev": true, - "requires": { - "esbuild": "^0.15.9", - "fsevents": "~2.3.2", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } -} diff --git a/examples/todo-list/sveltejs-todo-list/package.json b/examples/todo-list/sveltejs-todo-list/package.json deleted file mode 100644 index a1516e009a1bc..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "sveltejs-todo-list", - "private": true, - "version": "2.0.0", - "type": "module", - "scripts": { - "dev": "concurrently \"npm run dev:css\" \"vite\"", - "dev:css": "tailwindcss -w -i ./src/tailwind.css -o src/assets/app.css", - "build": "npm run build:css && vite build", - "build:css": "tailwindcss -m -i ./src/tailwind.css -o src/app.css", - "preview": "vite preview", - "check": "svelte-check --tsconfig ./tsconfig.json" - }, - "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.1", - "@tsconfig/svelte": "^3.0.0", - "concurrently": "^7.3.0", - "svelte": "^3.49.0", - "svelte-check": "^2.8.0", - "svelte-hcaptcha": "^0.1.1", - "svelte-preprocess": "^4.10.7", - "tailwindcss": "^3.1.8", - "tslib": "^2.4.0", - "typescript": "^4.7.4", - "vite": "^4.3.9" - }, - "dependencies": { - "@supabase/supabase-js": "^2.0.4" - } -} diff --git a/examples/todo-list/sveltejs-todo-list/public/vite.svg b/examples/todo-list/sveltejs-todo-list/public/vite.svg deleted file mode 100644 index e7b8dfb1b2a60..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/todo-list/sveltejs-todo-list/src/App.svelte b/examples/todo-list/sveltejs-todo-list/src/App.svelte deleted file mode 100644 index a50f202037357..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/App.svelte +++ /dev/null @@ -1,36 +0,0 @@ - - -
    - {#if user} - - {:else} -
    - -
    - {/if} -
    diff --git a/examples/todo-list/sveltejs-todo-list/src/app.css b/examples/todo-list/sveltejs-todo-list/src/app.css deleted file mode 100644 index 8b137891791fe..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/app.css +++ /dev/null @@ -1 +0,0 @@ - diff --git a/examples/todo-list/sveltejs-todo-list/src/assets/app.css b/examples/todo-list/sveltejs-todo-list/src/assets/app.css deleted file mode 100644 index 2bf19da9df6a1..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/assets/app.css +++ /dev/null @@ -1,1019 +0,0 @@ -/* -! tailwindcss v3.1.8 | MIT License | https://tailwindcss.com -*/ - -/* -1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) -2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) -*/ - -*, -::before, -::after { - box-sizing: border-box; - /* 1 */ - border-width: 0; - /* 2 */ - border-style: solid; - /* 2 */ - border-color: #e5e7eb; - /* 2 */ -} - -::before, -::after { - --tw-content: ''; -} - -/* -1. Use a consistent sensible line-height in all browsers. -2. Prevent adjustments of font size after orientation changes in iOS. -3. Use a more readable tab size. -4. Use the user's configured `sans` font-family by default. -*/ - -html { - line-height: 1.5; - /* 1 */ - -webkit-text-size-adjust: 100%; - /* 2 */ - -moz-tab-size: 4; - /* 3 */ - -o-tab-size: 4; - tab-size: 4; - /* 3 */ - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - /* 4 */ -} - -/* -1. Remove the margin in all browsers. -2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. -*/ - -body { - margin: 0; - /* 1 */ - line-height: inherit; - /* 2 */ -} - -/* -1. Add the correct height in Firefox. -2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) -3. Ensure horizontal rules are visible by default. -*/ - -hr { - height: 0; - /* 1 */ - color: inherit; - /* 2 */ - border-top-width: 1px; - /* 3 */ -} - -/* -Add the correct text decoration in Chrome, Edge, and Safari. -*/ - -abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; -} - -/* -Remove the default font size and weight for headings. -*/ - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} - -/* -Reset links to optimize for opt-in styling instead of opt-out. -*/ - -a { - color: inherit; - text-decoration: inherit; -} - -/* -Add the correct font weight in Edge and Safari. -*/ - -b, -strong { - font-weight: bolder; -} - -/* -1. Use the user's configured `mono` font family by default. -2. Correct the odd `em` font sizing in all browsers. -*/ - -code, -kbd, -samp, -pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - /* 1 */ - font-size: 1em; - /* 2 */ -} - -/* -Add the correct font size in all browsers. -*/ - -small { - font-size: 80%; -} - -/* -Prevent `sub` and `sup` elements from affecting the line height in all browsers. -*/ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* -1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) -2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) -3. Remove gaps between table borders by default. -*/ - -table { - text-indent: 0; - /* 1 */ - border-color: inherit; - /* 2 */ - border-collapse: collapse; - /* 3 */ -} - -/* -1. Change the font styles in all browsers. -2. Remove the margin in Firefox and Safari. -3. Remove default padding in all browsers. -*/ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; - /* 1 */ - font-size: 100%; - /* 1 */ - font-weight: inherit; - /* 1 */ - line-height: inherit; - /* 1 */ - color: inherit; - /* 1 */ - margin: 0; - /* 2 */ - padding: 0; - /* 3 */ -} - -/* -Remove the inheritance of text transform in Edge and Firefox. -*/ - -button, -select { - text-transform: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Remove default button styles. -*/ - -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; - /* 1 */ - background-color: transparent; - /* 2 */ - background-image: none; - /* 2 */ -} - -/* -Use the modern Firefox focus style for all focusable elements. -*/ - -:-moz-focusring { - outline: auto; -} - -/* -Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) -*/ - -:-moz-ui-invalid { - box-shadow: none; -} - -/* -Add the correct vertical alignment in Chrome and Firefox. -*/ - -progress { - vertical-align: baseline; -} - -/* -Correct the cursor style of increment and decrement buttons in Safari. -*/ - -::-webkit-inner-spin-button, -::-webkit-outer-spin-button { - height: auto; -} - -/* -1. Correct the odd appearance in Chrome and Safari. -2. Correct the outline style in Safari. -*/ - -[type='search'] { - -webkit-appearance: textfield; - /* 1 */ - outline-offset: -2px; - /* 2 */ -} - -/* -Remove the inner padding in Chrome and Safari on macOS. -*/ - -::-webkit-search-decoration { - -webkit-appearance: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Change font properties to `inherit` in Safari. -*/ - -::-webkit-file-upload-button { - -webkit-appearance: button; - /* 1 */ - font: inherit; - /* 2 */ -} - -/* -Add the correct display in Chrome and Safari. -*/ - -summary { - display: list-item; -} - -/* -Removes the default spacing and border for appropriate elements. -*/ - -blockquote, -dl, -dd, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -figure, -p, -pre { - margin: 0; -} - -fieldset { - margin: 0; - padding: 0; -} - -legend { - padding: 0; -} - -ol, -ul, -menu { - list-style: none; - margin: 0; - padding: 0; -} - -/* -Prevent resizing textareas horizontally by default. -*/ - -textarea { - resize: vertical; -} - -/* -1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) -2. Set the default placeholder color to the user's configured gray 400 color. -*/ - -input::-moz-placeholder, textarea::-moz-placeholder { - opacity: 1; - /* 1 */ - color: #9ca3af; - /* 2 */ -} - -input::placeholder, -textarea::placeholder { - opacity: 1; - /* 1 */ - color: #9ca3af; - /* 2 */ -} - -/* -Set the default cursor for buttons. -*/ - -button, -[role="button"] { - cursor: pointer; -} - -/* -Make sure disabled buttons don't get the pointer cursor. -*/ - -:disabled { - cursor: default; -} - -/* -1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) -2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) - This can trigger a poorly considered lint error in some tools but is included by design. -*/ - -img, -svg, -video, -canvas, -audio, -iframe, -embed, -object { - display: block; - /* 1 */ - vertical-align: middle; - /* 2 */ -} - -/* -Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) -*/ - -img, -video { - max-width: 100%; - height: auto; -} - -*, ::before, ::after { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; -} - -::backdrop { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; -} - -.absolute { - position: absolute; -} - -.relative { - position: relative; -} - -.inset-0 { - top: 0px; - right: 0px; - bottom: 0px; - left: 0px; -} - -.my-3 { - margin-top: 0.75rem; - margin-bottom: 0.75rem; -} - -.mx-4 { - margin-left: 1rem; - margin-right: 1rem; -} - -.my-2 { - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} - -.mx-1\.5 { - margin-left: 0.375rem; - margin-right: 0.375rem; -} - -.mx-1 { - margin-left: 0.25rem; - margin-right: 0.25rem; -} - -.mx-auto { - margin-left: auto; - margin-right: auto; -} - -.mb-1 { - margin-bottom: 0.25rem; -} - -.mt-3 { - margin-top: 0.75rem; -} - -.mb-2 { - margin-bottom: 0.5rem; -} - -.mr-1 { - margin-right: 0.25rem; -} - -.mt-2 { - margin-top: 0.5rem; -} - -.mt-12 { - margin-top: 3rem; -} - -.ml-2 { - margin-left: 0.5rem; -} - -.mb-12 { - margin-bottom: 3rem; -} - -.block { - display: block; -} - -.flex { - display: flex; -} - -.h-full { - height: 100%; -} - -.h-4 { - height: 1rem; -} - -.min-h-screen { - min-height: 100vh; -} - -.w-full { - width: 100%; -} - -.w-3\/4 { - width: 75%; -} - -.w-4 { - width: 1rem; -} - -.min-w-full { - min-width: 100%; -} - -.min-w-0 { - min-width: 0px; -} - -.max-w-sm { - max-width: 24rem; -} - -.flex-1 { - flex: 1 1 0%; -} - -.cursor-pointer { - cursor: pointer; -} - -.flex-col { - flex-direction: column; -} - -.items-center { - align-items: center; -} - -.justify-center { - justify-content: center; -} - -.gap-2 { - gap: 0.5rem; -} - -.overflow-hidden { - overflow: hidden; -} - -.truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.rounded-md { - border-radius: 0.375rem; -} - -.rounded { - border-radius: 0.25rem; -} - -.border { - border-width: 1px; -} - -.border-2 { - border-width: 2px; -} - -.border-b { - border-bottom-width: 1px; -} - -.border-t { - border-top-width: 1px; -} - -.border-red-300 { - --tw-border-opacity: 1; - border-color: rgb(252 165 165 / var(--tw-border-opacity)); -} - -.border-green-300 { - --tw-border-opacity: 1; - border-color: rgb(134 239 172 / var(--tw-border-opacity)); -} - -.border-blue-600 { - --tw-border-opacity: 1; - border-color: rgb(37 99 235 / var(--tw-border-opacity)); -} - -.border-transparent { - border-color: transparent; -} - -.border-gray-300 { - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); -} - -.bg-gray-200 { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.bg-red-100 { - --tw-bg-opacity: 1; - background-color: rgb(254 226 226 / var(--tw-bg-opacity)); -} - -.bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} - -.bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} - -.bg-green-100 { - --tw-bg-opacity: 1; - background-color: rgb(220 252 231 / var(--tw-bg-opacity)); -} - -.bg-blue-600 { - --tw-bg-opacity: 1; - background-color: rgb(37 99 235 / var(--tw-bg-opacity)); -} - -.p-4 { - padding: 1rem; -} - -.p-5 { - padding: 1.25rem; -} - -.p-2 { - padding: 0.5rem; -} - -.py-1 { - padding-top: 0.25rem; - padding-bottom: 0.25rem; -} - -.px-3 { - padding-left: 0.75rem; - padding-right: 0.75rem; -} - -.px-1 { - padding-left: 0.25rem; - padding-right: 0.25rem; -} - -.py-2 { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.px-4 { - padding-left: 1rem; - padding-right: 1rem; -} - -.px-2 { - padding-left: 0.5rem; - padding-right: 0.5rem; -} - -.py-4 { - padding-top: 1rem; - padding-bottom: 1rem; -} - -.pb-2 { - padding-bottom: 0.5rem; -} - -.text-center { - text-align: center; -} - -.font-sans { - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; -} - -.font-mono { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -.text-sm { - font-size: 0.875rem; - line-height: 1.25rem; -} - -.text-base { - font-size: 1rem; - line-height: 1.5rem; -} - -.text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; -} - -.text-lg { - font-size: 1.125rem; - line-height: 1.75rem; -} - -.font-medium { - font-weight: 500; -} - -.leading-5 { - line-height: 1.25rem; -} - -.text-red-700 { - --tw-text-opacity: 1; - color: rgb(185 28 28 / var(--tw-text-opacity)); -} - -.text-red-400 { - --tw-text-opacity: 1; - color: rgb(248 113 113 / var(--tw-text-opacity)); -} - -.text-green-500 { - --tw-text-opacity: 1; - color: rgb(34 197 94 / var(--tw-text-opacity)); -} - -.text-blue-600 { - --tw-text-opacity: 1; - color: rgb(37 99 235 / var(--tw-text-opacity)); -} - -.text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.text-gray-500 { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} - -.shadow { - --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-sm { - --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.filter { - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.transition { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.duration-150 { - transition-duration: 150ms; -} - -.ease-in-out { - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); -} - -/* Write your own custom component styles here */ - -.btn-black { - border-radius: 0.25rem; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(0 0 0 / var(--tw-bg-opacity)); - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - text-align: center; - font-weight: 700; - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.btn-black:hover { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(0 0 0 / var(--tw-text-opacity)); - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.btn-black-outline { - border-radius: 0.25rem; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - text-align: center; - font-weight: 700; - --tw-text-opacity: 1; - color: rgb(0 0 0 / var(--tw-text-opacity)); -} - -.btn-black-outline:hover { - --tw-bg-opacity: 1; - background-color: rgb(0 0 0 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -/* Your own custom utilities */ - -html, -body, -#app { - height: 100vh; - min-height: 100vh; -} - -h1 { - font-size: 4rem; - font-weight: bold; - display: block; -} - -.hover\:border-black:hover { - --tw-border-opacity: 1; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); -} - -.hover\:bg-blue-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(191 219 254 / var(--tw-bg-opacity)); -} - -.hover\:bg-blue-500:hover { - --tw-bg-opacity: 1; - background-color: rgb(59 130 246 / var(--tw-bg-opacity)); -} - -.hover\:bg-gray-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.focus\:border-blue-700:focus { - --tw-border-opacity: 1; - border-color: rgb(29 78 216 / var(--tw-border-opacity)); -} - -.focus\:bg-gray-200:focus { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.focus\:outline-none:focus { - outline: 2px solid transparent; - outline-offset: 2px; -} - -.active\:bg-blue-700:active { - --tw-bg-opacity: 1; - background-color: rgb(29 78 216 / var(--tw-bg-opacity)); -} - -@media (min-width: 640px) { - .sm\:h-auto { - height: auto; - } - - .sm\:w-2\/5 { - width: 40%; - } - - .sm\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } -} diff --git a/examples/todo-list/sveltejs-todo-list/src/assets/svelte.svg b/examples/todo-list/sveltejs-todo-list/src/assets/svelte.svg deleted file mode 100644 index c5e08481f8aed..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/assets/svelte.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/todo-list/sveltejs-todo-list/src/lib/Alert.svelte b/examples/todo-list/sveltejs-todo-list/src/lib/Alert.svelte deleted file mode 100644 index f0a894166ac95..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/lib/Alert.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -
    -
    {text}
    -
    diff --git a/examples/todo-list/sveltejs-todo-list/src/lib/Auth.svelte b/examples/todo-list/sveltejs-todo-list/src/lib/Auth.svelte deleted file mode 100644 index b7f72646520fb..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/lib/Auth.svelte +++ /dev/null @@ -1,135 +0,0 @@ - - -
    - - Login - - - - - - {#if !!helperText.text} -
    - {helperText.text} -
    - {/if} -
    - - - - - - -
    -
    -
    -
    -
    -
    -
    - Or continue with -
    -
    - -
    -
    - - - -
    -
    - - - -
    -
    -
    -
    diff --git a/examples/todo-list/sveltejs-todo-list/src/lib/Home.svelte b/examples/todo-list/sveltejs-todo-list/src/lib/Home.svelte deleted file mode 100644 index 5b519a9090371..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/lib/Home.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - -
    - - -
    diff --git a/examples/todo-list/sveltejs-todo-list/src/lib/Todo.svelte b/examples/todo-list/sveltejs-todo-list/src/lib/Todo.svelte deleted file mode 100644 index ae890e7ae0e14..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/lib/Todo.svelte +++ /dev/null @@ -1,55 +0,0 @@ - - -
  • -
    -
    -
    {todo.task}
    -
    -
    - -
    - -
    -
  • diff --git a/examples/todo-list/sveltejs-todo-list/src/lib/TodoList.svelte b/examples/todo-list/sveltejs-todo-list/src/lib/TodoList.svelte deleted file mode 100644 index ebcc9290248e4..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/lib/TodoList.svelte +++ /dev/null @@ -1,82 +0,0 @@ - - -
    -

    Todo List.

    -
    addTodo(newTaskText)} - class="flex gap-2 my-2" - > - - -
    - {#if !!errorText} - - {/if} -
    -
      - {#each todos as todo (todo.id)} - deleteTodo(todo.id)} /> - {/each} -
    -
    -
    diff --git a/examples/todo-list/sveltejs-todo-list/src/lib/db.ts b/examples/todo-list/sveltejs-todo-list/src/lib/db.ts deleted file mode 100644 index 499f0f0bcb85f..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/lib/db.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createClient } from "@supabase/supabase-js"; -import type { Database } from "./schema"; - -export const supabase = createClient( - import.meta.env.VITE_SUPABASE_URL, - import.meta.env.VITE_SUPABASE_ANON_KEY -); diff --git a/examples/todo-list/sveltejs-todo-list/src/lib/schema.ts b/examples/todo-list/sveltejs-todo-list/src/lib/schema.ts deleted file mode 100644 index 4090c7f04cef1..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/lib/schema.ts +++ /dev/null @@ -1,40 +0,0 @@ -export type Json = string | number | boolean | null | { [key: string]: Json } | Json[] - -export interface Database { - public: { - Tables: { - todos: { - Row: { - id: number - user_id: string - task: string | null - is_complete: boolean | null - inserted_at: string - } - Insert: { - id?: number - user_id: string - task?: string | null - is_complete?: boolean | null - inserted_at?: string - } - Update: { - id?: number - user_id?: string - task?: string | null - is_complete?: boolean | null - inserted_at?: string - } - } - } - Views: { - [_ in never]: never - } - Functions: { - [_ in never]: never - } - Enums: { - [_ in never]: never - } - } -} diff --git a/examples/todo-list/sveltejs-todo-list/src/main.ts b/examples/todo-list/sveltejs-todo-list/src/main.ts deleted file mode 100644 index 24e2882125010..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/main.ts +++ /dev/null @@ -1,9 +0,0 @@ -import "./app.css"; -import "./assets/app.css"; -import App from "./App.svelte"; - -const app = new App({ - target: document.getElementById("app"), -}); - -export default app; diff --git a/examples/todo-list/sveltejs-todo-list/src/tailwind.css b/examples/todo-list/sveltejs-todo-list/src/tailwind.css deleted file mode 100644 index 460924176f8fb..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/tailwind.css +++ /dev/null @@ -1,32 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* Write your own custom component styles here */ -.btn-black { - @apply border border-black bg-black text-white font-bold py-2 px-4 rounded text-center; -} -.btn-black:hover { - @apply transition duration-150 bg-white text-black; -} -.btn-black-outline { - @apply border border-black text-black py-2 px-4 rounded font-bold text-center; -} -.btn-black-outline:hover { - @apply transition duration-150 bg-black text-white; -} - -/* Your own custom utilities */ - -html, -body, -#app { - height: 100vh; - min-height: 100vh; -} - -h1 { - font-size: 4rem; - font-weight: bold; - display: block; -} diff --git a/examples/todo-list/sveltejs-todo-list/src/vite-env.d.ts b/examples/todo-list/sveltejs-todo-list/src/vite-env.d.ts deleted file mode 100644 index 4078e7476a2ea..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/src/vite-env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/examples/todo-list/sveltejs-todo-list/svelte.config.js b/examples/todo-list/sveltejs-todo-list/svelte.config.js deleted file mode 100644 index 7714a51209495..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/svelte.config.js +++ /dev/null @@ -1,7 +0,0 @@ -import sveltePreprocess from "svelte-preprocess"; - -export default { - // Consult https://github.com/sveltejs/svelte-preprocess - // for more information about preprocessors - preprocess: sveltePreprocess(), -}; diff --git a/examples/todo-list/sveltejs-todo-list/tailwind.config.cjs b/examples/todo-list/sveltejs-todo-list/tailwind.config.cjs deleted file mode 100644 index c0b552de8a7b9..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/tailwind.config.cjs +++ /dev/null @@ -1,12 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ["./src/**/*.{html,js,svelte,ts}"], - theme: { - extend: { - colors: { - "accent-1": "#333", - }, - }, - }, - plugins: [], -}; diff --git a/examples/todo-list/sveltejs-todo-list/tsconfig.json b/examples/todo-list/sveltejs-todo-list/tsconfig.json deleted file mode 100644 index 4a3dba2d17f7a..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": "@tsconfig/svelte/tsconfig.json", - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "module": "ESNext", - "resolveJsonModule": true, - "baseUrl": ".", - /** - * Typecheck JS in `.svelte` and `.js` files by default. - * Disable checkJs if you'd like to use dynamic types in JS. - * Note that setting allowJs false does not prevent the use - * of JS in `.svelte` files. - */ - "allowJs": true, - "checkJs": true, - "isolatedModules": true, - "strict": false, - "paths": { - "$lib/*": ["src/lib/*"] - } - }, - "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/examples/todo-list/sveltejs-todo-list/tsconfig.node.json b/examples/todo-list/sveltejs-todo-list/tsconfig.node.json deleted file mode 100644 index 3a7925f0b7ddf..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/tsconfig.node.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "ESNext", - "moduleResolution": "Node" - }, - "include": ["vite.config.ts"] - } - \ No newline at end of file diff --git a/examples/todo-list/sveltejs-todo-list/vite.config.ts b/examples/todo-list/sveltejs-todo-list/vite.config.ts deleted file mode 100644 index 3aaaea87e5003..0000000000000 --- a/examples/todo-list/sveltejs-todo-list/vite.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { resolve } from "path"; -import { defineConfig } from "vite"; -import { svelte } from "@sveltejs/vite-plugin-svelte"; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [svelte()], - resolve: { - alias: { - $lib: resolve(__dirname, "./src/lib"), - }, - }, -}); diff --git a/examples/user-management/angular-user-management/.browserslistrc b/examples/user-management/angular-user-management/.browserslistrc deleted file mode 100644 index 4f9ac26980c15..0000000000000 --- a/examples/user-management/angular-user-management/.browserslistrc +++ /dev/null @@ -1,16 +0,0 @@ -# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. -# For additional information regarding the format and rule options, please see: -# https://github.com/browserslist/browserslist#queries - -# For the full list of supported browsers by the Angular framework, please see: -# https://angular.io/guide/browser-support - -# You can see what browsers were selected by your queries by running: -# npx browserslist - -last 1 Chrome version -last 1 Firefox version -last 2 Edge major versions -last 2 Safari major versions -last 2 iOS major versions -Firefox ESR diff --git a/examples/user-management/angular-user-management/.editorconfig b/examples/user-management/angular-user-management/.editorconfig deleted file mode 100644 index 59d9a3a3e73ff..0000000000000 --- a/examples/user-management/angular-user-management/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.ts] -quote_type = single - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/examples/user-management/angular-user-management/.gitignore b/examples/user-management/angular-user-management/.gitignore deleted file mode 100644 index 0711527ef9d5c..0000000000000 --- a/examples/user-management/angular-user-management/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# Compiled output -/dist -/tmp -/out-tsc -/bazel-out - -# Node -/node_modules -npm-debug.log -yarn-error.log - -# IDEs and editors -.idea/ -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# Visual Studio Code -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# Miscellaneous -/.angular/cache -.sass-cache/ -/connect.lock -/coverage -/libpeerconnection.log -testem.log -/typings - -# System files -.DS_Store -Thumbs.db diff --git a/examples/user-management/angular-user-management/README.md b/examples/user-management/angular-user-management/README.md deleted file mode 100644 index ce3960057b44f..0000000000000 --- a/examples/user-management/angular-user-management/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# AngularUserManagement - -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.2.5. - -## Development server - -Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. - -## Code scaffolding - -Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. - -## Build - -Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. - -## Running unit tests - -Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). - -## Running end-to-end tests - -Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. - -## Build from scratch - -### 1. Create new project - -Sign up to Supabase - [https://supabase.com/dashboard](https://supabase.com/dashboard) and create a new project. Wait for your database to start. - -### 2. Run "User Management" Quickstart - -Once your database has started, head over to your project's `SQL Editor` and run the "User Management Starter" quickstart. On the `SQL editor` page, scroll down until you see `User Management Starter: Sets up a public Profiles table which you can access with your API`. Click that, then click `RUN` to execute that query and create a new `profiles` table. When that's finished, head over to the `Table Editor` and see your new `profiles` table. - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). - -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) - -**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. - -### 4. Env vars - -Edit the `src/environments/environment.ts` file and populate this file with your URL and Key. - -### 5. Run the application - -Run the application: `npm run start`. Open your browser to `https://localhost:4200/` and you are ready to go 🚀. - -## Supabase details - -### Postgres Row level security - -This project uses very high-level Authorization using Postgres' Role Level Security. -When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. -When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. -We can use these details to provide fine-grained control over what each user can and cannot do. - -This is a trimmed-down schema, with the policies: - -```sql --- Create a table for Public Profiles -create table profiles ( - id uuid references auth.users not null, - updated_at timestamp with time zone, - username text unique, - avatar_url text, - website text, - primary key (id), - unique(username), - constraint username_length check (char_length(username) >= 3) -); -alter table profiles enable row level security; -create policy "Public profiles are viewable by everyone." - on profiles for select - using ( true ); -create policy "Users can insert their own profile." - on profiles for insert - with check ( auth.uid() = id ); -create policy "Users can update own profile." - on profiles for update - using ( auth.uid() = id ); --- Set up Realtime! -begin; - drop publication if exists supabase_realtime; - create publication supabase_realtime; -commit; -alter publication supabase_realtime add table profiles; --- Set up Storage! -insert into storage.buckets (id, name) -values ('avatars', 'avatars'); -create policy "Avatar images are publicly accessible." - on storage.objects for select - using ( bucket_id = 'avatars' ); -create policy "Anyone can upload an avatar." - on storage.objects for insert - with check ( bucket_id = 'avatars' ); -``` - -## Authors - -- [Supabase](https://supabase.com) - -Supabase is open source. We'd love for you to follow along and get involved at https://github.com/supabase/supabase diff --git a/examples/user-management/angular-user-management/angular.json b/examples/user-management/angular-user-management/angular.json deleted file mode 100644 index ef97e2f3707f0..0000000000000 --- a/examples/user-management/angular-user-management/angular.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "angular-user-management": { - "projectType": "application", - "schematics": {}, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/angular-user-management", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "src/styles.css" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "browserTarget": "angular-user-management:build:production" - }, - "development": { - "browserTarget": "angular-user-management:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "angular-user-management:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "src/styles.css" - ], - "scripts": [] - } - } - } - } - }, - "cli": { - "analytics": false - } -} diff --git a/examples/user-management/angular-user-management/karma.conf.js b/examples/user-management/angular-user-management/karma.conf.js deleted file mode 100644 index 826cd18ef2c9a..0000000000000 --- a/examples/user-management/angular-user-management/karma.conf.js +++ /dev/null @@ -1,44 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - jasmine: { - // you can add configuration options for Jasmine here - // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html - // for example, you can disable the random execution with `random: false` - // or set a specific seed with `seed: 4321` - }, - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - jasmineHtmlReporter: { - suppressAll: true // removes the duplicated traces - }, - coverageReporter: { - dir: require('path').join(__dirname, './coverage/angular-user-management'), - subdir: '.', - reporters: [ - { type: 'html' }, - { type: 'text-summary' } - ] - }, - reporters: ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false, - restartOnFileChange: true - }); -}; diff --git a/examples/user-management/angular-user-management/package-lock.json b/examples/user-management/angular-user-management/package-lock.json deleted file mode 100644 index 2ac8ec6b866c8..0000000000000 --- a/examples/user-management/angular-user-management/package-lock.json +++ /dev/null @@ -1,20809 +0,0 @@ -{ - "name": "angular-user-management", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "angular-user-management", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "^14.2.0", - "@angular/common": "^14.2.0", - "@angular/compiler": "^14.2.0", - "@angular/core": "^14.2.0", - "@angular/forms": "^14.2.0", - "@angular/platform-browser": "^14.2.0", - "@angular/platform-browser-dynamic": "^14.2.0", - "@angular/router": "^14.2.0", - "@supabase/supabase-js": "^2.0.4", - "rxjs": "~7.5.0", - "tslib": "^2.3.0", - "zone.js": "~0.11.4" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^14.2.5", - "@angular/cli": "~14.2.5", - "@angular/compiler-cli": "^14.2.0", - "@types/jasmine": "~4.0.0", - "jasmine-core": "~4.3.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "typescript": "~4.7.2" - } - }, - "node_modules/@adobe/css-tools": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", - "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==", - "dev": true - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1402.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.5.tgz", - "integrity": "sha512-vtJEwB51UEY1Q7FCI7xGLdhdb2SRTtI1Qs0or95momn85NuxlaMQsXK1Wxu9/EwtWKZK8dXePXbB/hpiNt61JQ==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "14.2.5", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.5.tgz", - "integrity": "sha512-jSgH11E+zs1C24lXj7R/PgXsTUpoYoMr1GtO6mpVROgXL5czVlL+b/B1p2HwbcAKuI9WXb48X6OZ6fOZhDQlSg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "2.2.0", - "@angular-devkit/architect": "0.1402.5", - "@angular-devkit/build-webpack": "0.1402.5", - "@angular-devkit/core": "14.2.5", - "@babel/core": "7.18.10", - "@babel/generator": "7.18.12", - "@babel/helper-annotate-as-pure": "7.18.6", - "@babel/plugin-proposal-async-generator-functions": "7.18.10", - "@babel/plugin-transform-async-to-generator": "7.18.6", - "@babel/plugin-transform-runtime": "7.18.10", - "@babel/preset-env": "7.18.10", - "@babel/runtime": "7.18.9", - "@babel/template": "7.18.10", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "14.2.5", - "ansi-colors": "4.1.3", - "babel-loader": "8.2.5", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "^4.9.1", - "cacache": "16.1.2", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.16", - "css-loader": "6.7.1", - "esbuild-wasm": "0.15.5", - "glob": "8.0.3", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.1.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.0.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.0", - "mini-css-extract-plugin": "2.6.1", - "minimatch": "5.1.0", - "open": "8.4.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "6.0.1", - "piscina": "3.2.0", - "postcss": "8.4.16", - "postcss-import": "15.0.0", - "postcss-loader": "7.0.1", - "postcss-preset-env": "7.8.0", - "regenerator-runtime": "0.13.9", - "resolve-url-loader": "5.0.0", - "rxjs": "6.6.7", - "sass": "1.54.4", - "sass-loader": "13.0.2", - "semver": "7.3.7", - "source-map-loader": "4.0.0", - "source-map-support": "0.5.21", - "stylus": "0.59.0", - "stylus-loader": "7.0.0", - "terser": "5.14.2", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.4.0", - "webpack": "5.74.0", - "webpack-dev-middleware": "5.3.3", - "webpack-dev-server": "4.11.0", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.15.5" - }, - "peerDependencies": { - "@angular/compiler-cli": "^14.0.0", - "@angular/localize": "^14.0.0", - "@angular/service-worker": "^14.0.0", - "karma": "^6.3.0", - "ng-packagr": "^14.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.6.2 <4.9" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1402.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.5.tgz", - "integrity": "sha512-h+o0GZD9iATwWjaTiUR0lJ3QZ9twUOJ1sotRchXHzAXMuaDk8wqqPriL5S0qDMlA2QqpNt4OD9rodUCRwae7fw==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1402.5", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/core": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.5.tgz", - "integrity": "sha512-lSje+HX0fx9Y2A4k63jVHrWdGT4wellhwcZpTCv9P6LvdfTkAlrfra3TaYhUPjavCsPwlRC/VVQN3Qkzk5m6gA==", - "dev": true, - "dependencies": { - "ajv": "8.11.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.1.0", - "rxjs": "6.6.7", - "source-map": "0.7.4" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/schematics": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.5.tgz", - "integrity": "sha512-3a//d8f/yuR1F2QXAyX4pShWdkHBWbY1qpqqVnN9gRJ+ye6pY098gsCQKpKXPZGeV08ugu5v79f5JELMthBBSQ==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "14.2.5", - "jsonc-parser": "3.1.0", - "magic-string": "0.26.2", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular/animations": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.2.5.tgz", - "integrity": "sha512-4BhR9jSjgIwoK/alu7FSwSU5SxISMVFBAl/4cEYchfCqnflMNkZ8WwRVKTQjyeuYW5KtQTw9jRNp4tGK1YQWYw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/core": "14.2.5" - } - }, - "node_modules/@angular/cli": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.5.tgz", - "integrity": "sha512-jrvQ7nv/8k8i6D7LXrZi+DXQQkpmqoxC/NZL7hH1zyB9shlnG/ekMl+T4y7tvg3MWKxJuIfWVtz/EwOkMKmEaA==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1402.5", - "@angular-devkit/core": "14.2.5", - "@angular-devkit/schematics": "14.2.5", - "@schematics/angular": "14.2.5", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "debug": "4.3.4", - "ini": "3.0.0", - "inquirer": "8.2.4", - "jsonc-parser": "3.1.0", - "npm-package-arg": "9.1.0", - "npm-pick-manifest": "7.0.1", - "open": "8.4.0", - "ora": "5.4.1", - "pacote": "13.6.2", - "resolve": "1.22.1", - "semver": "7.3.7", - "symbol-observable": "4.0.0", - "uuid": "8.3.2", - "yargs": "17.5.1" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/common": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.5.tgz", - "integrity": "sha512-v2fIK6imfMkUvYNjZQO+drE39QO3eSS95Yy7UN+6inb47DkAfzx6hipA9zKrMENjsS3kDv1d7cgDHE7WuOCzIw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/core": "14.2.5", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.5.tgz", - "integrity": "sha512-L7d2/D6o9wlB2ugqRYpev6a8JntqS+7lF2o6z8y7RR2YAlAu71nq0BDsQez4/aSCK3HnDq0yhEnns7vcmOq/jA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/core": "14.2.5" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.5.tgz", - "integrity": "sha512-3GYzTPw96TfJjw7Aso+f+uN6VFBWedqRATUQ6v+BAEyZIboirdLI1JQFOcCfuKWUM2B48RW+pdIduZmG3ckotA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.17.2", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.26.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/main-ngcc.js" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/compiler": "14.2.5", - "typescript": ">=4.6.2 <4.9" - } - }, - "node_modules/@angular/core": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.5.tgz", - "integrity": "sha512-Ok78Abq0puMGlolvNVzKFvsX7ePDkyxpZzztDzXDdRA4x4o6bAuuDG9Y7Wab2+wsdY6NktO+dFQjq1UBWClgSg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.11.4" - } - }, - "node_modules/@angular/forms": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.5.tgz", - "integrity": "sha512-aMH5Vrftny0KF0XzWQIGfHoI0LVQ2aatpWzdUWiUqBeX/Q+ucmxeP5rZyKtUsi0flETWxdRZSBTjbXZ3dsIcTA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "14.2.5", - "@angular/core": "14.2.5", - "@angular/platform-browser": "14.2.5", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.5.tgz", - "integrity": "sha512-FDZm23N9veSEouQX1YuZUjv7Nillroi+v0VbN1x5iPpFZEudaoZYT3A7bpJwdlxUx/4rGS0caaXNhN3CowtIeQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/animations": "14.2.5", - "@angular/common": "14.2.5", - "@angular/core": "14.2.5" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.5.tgz", - "integrity": "sha512-7W8oLs8YEGRr8izgUlpHgBfg3vUb5H0yicTHJY4zIqHJJbG1rTl46CjULaMjYM/FWcS8o7y6XJJcHx0c7pKNsw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "14.2.5", - "@angular/compiler": "14.2.5", - "@angular/core": "14.2.5", - "@angular/platform-browser": "14.2.5" - } - }, - "node_modules/@angular/router": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.5.tgz", - "integrity": "sha512-AUHcr9Lln7emJ/aete08UoqWQFZOLH1MhuP78r2pixvnNiZ9C8hcevX1rGGax0Po/Gy4PSJ4wnFhZPgifqCguQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "14.2.5", - "@angular/core": "14.2.5", - "@angular/platform-browser": "14.2.5", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", - "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.19.3", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", - "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "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", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", - "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "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", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "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", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.19.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "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", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", - "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.4", - "@babel/types": "^7.19.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", - "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "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", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", - "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "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", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", - "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.19.4", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "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", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "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", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "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" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "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", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", - "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", - "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.19.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", - "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "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", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", - "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", - "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", - "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "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", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", - "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.4", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.4", - "@babel/types": "^7.19.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.19.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", - "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.19.4", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", - "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2", - "postcss-selector-parser": "^6.0.10" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz", - "integrity": "sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", - "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@ngtools/webpack": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.5.tgz", - "integrity": "sha512-Thwq1WyOOq1PIWMcjAAqKI1hbvGC0ywxbNoDadOlWpEFm6k0dvXC6Zm9lnVkePjxlPfagvbnv55+Lv9Vmygc1g==", - "dev": true, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^14.0.0", - "typescript": ">=4.6.2 <4.9", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "dependencies": { - "infer-owner": "^1.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@schematics/angular": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.5.tgz", - "integrity": "sha512-oYtQJi68EcDK940fny9t12JGE6z/ZbLeCZs+cPh4XT7ytRdO4anypBtKx18+E+b6jUnox4FxIGOf2WpkSAosYA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "14.2.5", - "@angular-devkit/schematics": "14.2.5", - "jsonc-parser": "3.1.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "node_modules/@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "dependencies": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", - "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", - "integrity": "sha512-Opp1LvvEuZdk8fSSvchK2mZwhVrsNT0JgJE9Di6MjnaIpmEXM8TLCPPrVtNTYh8+5MPdY8j9bAHMu2SSfwpZJg==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.4.tgz", - "integrity": "sha512-WdlVphvfR/GJCLEMbNA8lJ0lhFNBj4SW3O+O5/cEGw9oYrv0al9zTwuQsq+myDUXgNx2jgBynoVgZ2MMJ6pbow==", - "dev": true - }, - "node_modules/@types/parse-json": { - "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 - }, - "node_modules/@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dev": true, - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/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/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/agentkeepalive/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/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/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "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", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "16.1.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", - "integrity": "sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001418", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", - "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/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==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "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", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/core-js-compat": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", - "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/critters": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", - "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^4.2.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "postcss": "^8.3.7", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/critters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/critters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/critters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/critters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true, - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.0.1.tgz", - "integrity": "sha512-pT3nzyGM78poCKLAEy2zWIVX2hikq6dIrjuZzLV98MumBg+xMTNYfHx7paUlfiRTgg91O/vR889CIf+qiv79Rw==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.277", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.277.tgz", - "integrity": "sha512-Ej4VyUfGdVY5D2J5WHAVNqrEFBKgeNcX7p/bBQU4x/VKwvnyEvGd62NEkIK3lykLEe9Cg4MCcoWAa+u97o0u/A==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", - "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", - "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", - "dev": true - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "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, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz", - "integrity": "sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/linux-loong64": "0.15.5", - "esbuild-android-64": "0.15.5", - "esbuild-android-arm64": "0.15.5", - "esbuild-darwin-64": "0.15.5", - "esbuild-darwin-arm64": "0.15.5", - "esbuild-freebsd-64": "0.15.5", - "esbuild-freebsd-arm64": "0.15.5", - "esbuild-linux-32": "0.15.5", - "esbuild-linux-64": "0.15.5", - "esbuild-linux-arm": "0.15.5", - "esbuild-linux-arm64": "0.15.5", - "esbuild-linux-mips64le": "0.15.5", - "esbuild-linux-ppc64le": "0.15.5", - "esbuild-linux-riscv64": "0.15.5", - "esbuild-linux-s390x": "0.15.5", - "esbuild-netbsd-64": "0.15.5", - "esbuild-openbsd-64": "0.15.5", - "esbuild-sunos-64": "0.15.5", - "esbuild-windows-32": "0.15.5", - "esbuild-windows-64": "0.15.5", - "esbuild-windows-arm64": "0.15.5" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz", - "integrity": "sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz", - "integrity": "sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz", - "integrity": "sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz", - "integrity": "sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz", - "integrity": "sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz", - "integrity": "sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz", - "integrity": "sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz", - "integrity": "sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz", - "integrity": "sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz", - "integrity": "sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz", - "integrity": "sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz", - "integrity": "sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz", - "integrity": "sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz", - "integrity": "sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz", - "integrity": "sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz", - "integrity": "sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz", - "integrity": "sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz", - "integrity": "sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz", - "integrity": "sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz", - "integrity": "sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz", - "integrity": "sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", - "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "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", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jasmine-core": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.3.0.tgz", - "integrity": "sha512-qybtBUesniQdW6n+QIHMng2vDOHscIC/dEXjW+JzO9+LoAZMb03RCUC5xFOv/btSKPm1xL42fn+RjlU4oB42Lg==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "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 - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/karma": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", - "integrity": "sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA==", - "dev": true, - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", - "dev": true, - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", - "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/karma-coverage/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/karma-jasmine": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", - "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", - "dev": true, - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", - "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", - "dev": true, - "peerDependencies": { - "jasmine-core": "^4.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/karma/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/karma/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/karma/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/karma/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/karma/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dev": true, - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.0.0.tgz", - "integrity": "sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw==", - "dev": true, - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/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, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", - "dev": true, - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "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 - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "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 - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz", - "integrity": "sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.3" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "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==", - "dev": true - }, - "node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/needle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz", - "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", - "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.22 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist/node_modules/npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", - "dev": true, - "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", - "dev": true, - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1", - "parse5-sax-parser": "^6.0.1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "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" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, - "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" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-custom-properties": { - "version": "12.1.9", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.9.tgz", - "integrity": "sha512-/E7PRvK8DAVljBbeWrcEQJPG72jaImxF3vvCNFwv9cC8CzigVoNIpeyfnJzphnN3Fd8/auBf5wvkw6W9MfmTyg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-import": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz", - "integrity": "sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", - "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", - "dev": true, - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "engines": { - "node": "^12 || ^14 || >=16" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-preset-env": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz", - "integrity": "sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA==", - "dev": true, - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.0.5", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.8", - "browserslist": "^4.21.3", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.0.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.8", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.10", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true, - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "optional": true - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "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 - }, - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "node_modules/regexpu-core": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", - "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true - }, - "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" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "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" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/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/resolve-url-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/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true - }, - "node_modules/sass": { - "version": "1.54.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz", - "integrity": "sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/sass-loader": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", - "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", - "dev": true, - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.2.tgz", - "integrity": "sha512-6fCnk4ARMPZN448+SQcnn1u8OHUC72puJcNtSgg2xS34Cu7br1gQ09YKkO1PFfDn/wyUE9ZgMAwosJed003+NQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", - "dev": true - }, - "node_modules/socket.io-parser": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz", - "integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==", - "dev": true, - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "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/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.0.tgz", - "integrity": "sha512-i3KVgM3+QPAHNbGavK+VBq03YoJl24m9JWNbLgsjTj8aJzXG9M61bantBTNBt7CNwY2FYf+RJRYJ3pzalKjIrw==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "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==", - "dev": 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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.3.tgz", - "integrity": "sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/stylus": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz", - "integrity": "sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==", - "dev": true, - "dependencies": { - "@adobe/css-tools": "^4.0.1", - "debug": "^4.3.2", - "glob": "^7.1.6", - "sax": "~1.2.4", - "source-map": "^0.7.3" - }, - "bin": { - "stylus": "bin/stylus" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://opencollective.com/stylus" - } - }, - "node_modules/stylus-loader": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz", - "integrity": "sha512-WTbtLrNfOfLgzTaR9Lj/BPhQroKk/LC1hfTXSUbrxmxgfUo3Y3LpmKRVA2R1XbjvTAvOfaian9vOyfv1z99E+A==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "klona": "^2.0.5", - "normalize-path": "^3.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "stylus": ">=0.52.4", - "webpack": "^5.0.0" - } - }, - "node_modules/stylus/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/stylus/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/stylus/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "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==", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.34.tgz", - "integrity": "sha512-cJMeh/eOILyGu0ejgTKB95yKT3zOenSe9UGE3vj6WfiOwgGYnmATUsnDixMFvdU+rNMvWih83hrUP8VwhF9yXQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "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", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz", - "integrity": "sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", - "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", - "dev": 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/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", - "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", - "dev": true, - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": 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/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/zone.js": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", - "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", - "dependencies": { - "tslib": "^2.3.0" - } - } - }, - "dependencies": { - "@adobe/css-tools": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", - "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@angular-devkit/architect": { - "version": "0.1402.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.5.tgz", - "integrity": "sha512-vtJEwB51UEY1Q7FCI7xGLdhdb2SRTtI1Qs0or95momn85NuxlaMQsXK1Wxu9/EwtWKZK8dXePXbB/hpiNt61JQ==", - "dev": true, - "requires": { - "@angular-devkit/core": "14.2.5", - "rxjs": "6.6.7" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/build-angular": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.5.tgz", - "integrity": "sha512-jSgH11E+zs1C24lXj7R/PgXsTUpoYoMr1GtO6mpVROgXL5czVlL+b/B1p2HwbcAKuI9WXb48X6OZ6fOZhDQlSg==", - "dev": true, - "requires": { - "@ampproject/remapping": "2.2.0", - "@angular-devkit/architect": "0.1402.5", - "@angular-devkit/build-webpack": "0.1402.5", - "@angular-devkit/core": "14.2.5", - "@babel/core": "7.18.10", - "@babel/generator": "7.18.12", - "@babel/helper-annotate-as-pure": "7.18.6", - "@babel/plugin-proposal-async-generator-functions": "7.18.10", - "@babel/plugin-transform-async-to-generator": "7.18.6", - "@babel/plugin-transform-runtime": "7.18.10", - "@babel/preset-env": "7.18.10", - "@babel/runtime": "7.18.9", - "@babel/template": "7.18.10", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "14.2.5", - "ansi-colors": "4.1.3", - "babel-loader": "8.2.5", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "^4.9.1", - "cacache": "16.1.2", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.16", - "css-loader": "6.7.1", - "esbuild": "0.15.5", - "esbuild-wasm": "0.15.5", - "glob": "8.0.3", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.1.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.0.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.0", - "mini-css-extract-plugin": "2.6.1", - "minimatch": "5.1.0", - "open": "8.4.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "6.0.1", - "piscina": "3.2.0", - "postcss": "8.4.16", - "postcss-import": "15.0.0", - "postcss-loader": "7.0.1", - "postcss-preset-env": "7.8.0", - "regenerator-runtime": "0.13.9", - "resolve-url-loader": "5.0.0", - "rxjs": "6.6.7", - "sass": "1.54.4", - "sass-loader": "13.0.2", - "semver": "7.3.7", - "source-map-loader": "4.0.0", - "source-map-support": "0.5.21", - "stylus": "0.59.0", - "stylus-loader": "7.0.0", - "terser": "5.14.2", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.4.0", - "webpack": "5.74.0", - "webpack-dev-middleware": "5.3.3", - "webpack-dev-server": "4.11.0", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "5.1.0" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - } - } - }, - "@angular-devkit/build-webpack": { - "version": "0.1402.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.5.tgz", - "integrity": "sha512-h+o0GZD9iATwWjaTiUR0lJ3QZ9twUOJ1sotRchXHzAXMuaDk8wqqPriL5S0qDMlA2QqpNt4OD9rodUCRwae7fw==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1402.5", - "rxjs": "6.6.7" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/core": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.5.tgz", - "integrity": "sha512-lSje+HX0fx9Y2A4k63jVHrWdGT4wellhwcZpTCv9P6LvdfTkAlrfra3TaYhUPjavCsPwlRC/VVQN3Qkzk5m6gA==", - "dev": true, - "requires": { - "ajv": "8.11.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.1.0", - "rxjs": "6.6.7", - "source-map": "0.7.4" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.5.tgz", - "integrity": "sha512-3a//d8f/yuR1F2QXAyX4pShWdkHBWbY1qpqqVnN9gRJ+ye6pY098gsCQKpKXPZGeV08ugu5v79f5JELMthBBSQ==", - "dev": true, - "requires": { - "@angular-devkit/core": "14.2.5", - "jsonc-parser": "3.1.0", - "magic-string": "0.26.2", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular/animations": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.2.5.tgz", - "integrity": "sha512-4BhR9jSjgIwoK/alu7FSwSU5SxISMVFBAl/4cEYchfCqnflMNkZ8WwRVKTQjyeuYW5KtQTw9jRNp4tGK1YQWYw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/cli": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.5.tgz", - "integrity": "sha512-jrvQ7nv/8k8i6D7LXrZi+DXQQkpmqoxC/NZL7hH1zyB9shlnG/ekMl+T4y7tvg3MWKxJuIfWVtz/EwOkMKmEaA==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1402.5", - "@angular-devkit/core": "14.2.5", - "@angular-devkit/schematics": "14.2.5", - "@schematics/angular": "14.2.5", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "debug": "4.3.4", - "ini": "3.0.0", - "inquirer": "8.2.4", - "jsonc-parser": "3.1.0", - "npm-package-arg": "9.1.0", - "npm-pick-manifest": "7.0.1", - "open": "8.4.0", - "ora": "5.4.1", - "pacote": "13.6.2", - "resolve": "1.22.1", - "semver": "7.3.7", - "symbol-observable": "4.0.0", - "uuid": "8.3.2", - "yargs": "17.5.1" - } - }, - "@angular/common": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.5.tgz", - "integrity": "sha512-v2fIK6imfMkUvYNjZQO+drE39QO3eSS95Yy7UN+6inb47DkAfzx6hipA9zKrMENjsS3kDv1d7cgDHE7WuOCzIw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.5.tgz", - "integrity": "sha512-L7d2/D6o9wlB2ugqRYpev6a8JntqS+7lF2o6z8y7RR2YAlAu71nq0BDsQez4/aSCK3HnDq0yhEnns7vcmOq/jA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler-cli": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.5.tgz", - "integrity": "sha512-3GYzTPw96TfJjw7Aso+f+uN6VFBWedqRATUQ6v+BAEyZIboirdLI1JQFOcCfuKWUM2B48RW+pdIduZmG3ckotA==", - "dev": true, - "requires": { - "@babel/core": "^7.17.2", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.26.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - } - }, - "@angular/core": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.5.tgz", - "integrity": "sha512-Ok78Abq0puMGlolvNVzKFvsX7ePDkyxpZzztDzXDdRA4x4o6bAuuDG9Y7Wab2+wsdY6NktO+dFQjq1UBWClgSg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/forms": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.5.tgz", - "integrity": "sha512-aMH5Vrftny0KF0XzWQIGfHoI0LVQ2aatpWzdUWiUqBeX/Q+ucmxeP5rZyKtUsi0flETWxdRZSBTjbXZ3dsIcTA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.5.tgz", - "integrity": "sha512-FDZm23N9veSEouQX1YuZUjv7Nillroi+v0VbN1x5iPpFZEudaoZYT3A7bpJwdlxUx/4rGS0caaXNhN3CowtIeQ==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.5.tgz", - "integrity": "sha512-7W8oLs8YEGRr8izgUlpHgBfg3vUb5H0yicTHJY4zIqHJJbG1rTl46CjULaMjYM/FWcS8o7y6XJJcHx0c7pKNsw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/router": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.5.tgz", - "integrity": "sha512-AUHcr9Lln7emJ/aete08UoqWQFZOLH1MhuP78r2pixvnNiZ9C8hcevX1rGGax0Po/Gy4PSJ4wnFhZPgifqCguQ==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", - "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", - "dev": true - }, - "@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "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" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "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" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.19.3", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", - "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "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" - } - }, - "@babel/helper-define-polyfill-provider": { - "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", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-explode-assignable-expression": { - "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" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "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" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", - "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-optimise-call-expression": { - "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" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "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", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "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", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", - "dev": true, - "requires": { - "@babel/types": "^7.19.4" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "dev": true, - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "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", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/helpers": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", - "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.4", - "@babel/types": "^7.19.4" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", - "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "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" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "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", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", - "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "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" - } - }, - "@babel/plugin-proposal-class-static-block": { - "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", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "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" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "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" - } - }, - "@babel/plugin-proposal-json-strings": { - "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" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "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" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "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" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "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" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", - "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.19.4", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "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" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "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", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "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" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "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", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "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" - } - }, - "@babel/plugin-syntax-async-generators": { - "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" - } - }, - "@babel/plugin-syntax-class-properties": { - "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" - } - }, - "@babel/plugin-syntax-class-static-block": { - "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" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "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" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "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" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-json-strings": { - "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" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "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" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "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" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "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" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "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" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "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" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "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" - } - }, - "@babel/plugin-syntax-top-level-await": { - "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" - } - }, - "@babel/plugin-transform-arrow-functions": { - "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" - } - }, - "@babel/plugin-transform-async-to-generator": { - "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", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "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" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", - "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", - "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.19.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "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" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", - "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "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" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "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" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "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" - } - }, - "@babel/plugin-transform-for-of": { - "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" - } - }, - "@babel/plugin-transform-function-name": { - "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", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "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" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "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" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", - "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "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" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "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" - } - }, - "@babel/plugin-transform-new-target": { - "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" - } - }, - "@babel/plugin-transform-object-super": { - "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" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-property-literals": { - "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" - } - }, - "@babel/plugin-transform-regenerator": { - "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" - } - }, - "@babel/plugin-transform-reserved-words": { - "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" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", - "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "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" - } - }, - "@babel/plugin-transform-spread": { - "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" - } - }, - "@babel/plugin-transform-sticky-regex": { - "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" - } - }, - "@babel/plugin-transform-template-literals": { - "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" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "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" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "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" - } - }, - "@babel/plugin-transform-unicode-regex": { - "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" - } - }, - "@babel/preset-env": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", - "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "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", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", - "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.4", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.4", - "@babel/types": "^7.19.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.19.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", - "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", - "dev": true, - "requires": { - "@babel/types": "^7.19.4", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/types": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", - "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true - }, - "@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true, - "requires": {} - }, - "@csstools/selector-specificity": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", - "dev": true, - "requires": {} - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@esbuild/linux-loong64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz", - "integrity": "sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A==", - "dev": true, - "optional": true - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", - "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@ngtools/webpack": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.5.tgz", - "integrity": "sha512-Thwq1WyOOq1PIWMcjAAqKI1hbvGC0ywxbNoDadOlWpEFm6k0dvXC6Zm9lnVkePjxlPfagvbnv55+Lv9Vmygc1g==", - "dev": true, - "requires": {} - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@schematics/angular": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.5.tgz", - "integrity": "sha512-oYtQJi68EcDK940fny9t12JGE6z/ZbLeCZs+cPh4XT7ytRdO4anypBtKx18+E+b6jUnox4FxIGOf2WpkSAosYA==", - "dev": true, - "requires": { - "@angular-devkit/core": "14.2.5", - "@angular-devkit/schematics": "14.2.5", - "jsonc-parser": "3.1.0" - } - }, - "@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "requires": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true - }, - "@types/eslint": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", - "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/jasmine": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", - "integrity": "sha512-Opp1LvvEuZdk8fSSvchK2mZwhVrsNT0JgJE9Di6MjnaIpmEXM8TLCPPrVtNTYh8+5MPdY8j9bAHMu2SSfwpZJg==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "@types/node": { - "version": "18.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.4.tgz", - "integrity": "sha512-WdlVphvfR/GJCLEMbNA8lJ0lhFNBj4SW3O+O5/cEGw9oYrv0al9zTwuQsq+myDUXgNx2jgBynoVgZ2MMJ6pbow==", - "dev": true - }, - "@types/parse-json": { - "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 - }, - "@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@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==", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "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" - } - } - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "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" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "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", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "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" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "cacache": { - "version": "16.1.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", - "integrity": "sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001418", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", - "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "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==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", - "dev": true - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "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==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dev": true, - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "core-js-compat": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", - "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", - "dev": true, - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "critters": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", - "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "css-select": "^4.2.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "postcss": "^8.3.7", - "pretty-bytes": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - } - }, - "css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true, - "requires": {} - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssdb": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.0.1.tgz", - "integrity": "sha512-pT3nzyGM78poCKLAEy2zWIVX2hikq6dIrjuZzLV98MumBg+xMTNYfHx7paUlfiRTgg91O/vR889CIf+qiv79Rw==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.277", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.277.tgz", - "integrity": "sha512-Ej4VyUfGdVY5D2J5WHAVNqrEFBKgeNcX7p/bBQU4x/VKwvnyEvGd62NEkIK3lykLEe9Cg4MCcoWAa+u97o0u/A==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "engine.io": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", - "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", - "dev": true, - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" - } - }, - "engine.io-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "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, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "esbuild": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz", - "integrity": "sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg==", - "dev": true, - "optional": true, - "requires": { - "@esbuild/linux-loong64": "0.15.5", - "esbuild-android-64": "0.15.5", - "esbuild-android-arm64": "0.15.5", - "esbuild-darwin-64": "0.15.5", - "esbuild-darwin-arm64": "0.15.5", - "esbuild-freebsd-64": "0.15.5", - "esbuild-freebsd-arm64": "0.15.5", - "esbuild-linux-32": "0.15.5", - "esbuild-linux-64": "0.15.5", - "esbuild-linux-arm": "0.15.5", - "esbuild-linux-arm64": "0.15.5", - "esbuild-linux-mips64le": "0.15.5", - "esbuild-linux-ppc64le": "0.15.5", - "esbuild-linux-riscv64": "0.15.5", - "esbuild-linux-s390x": "0.15.5", - "esbuild-netbsd-64": "0.15.5", - "esbuild-openbsd-64": "0.15.5", - "esbuild-sunos-64": "0.15.5", - "esbuild-windows-32": "0.15.5", - "esbuild-windows-64": "0.15.5", - "esbuild-windows-arm64": "0.15.5" - } - }, - "esbuild-android-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz", - "integrity": "sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz", - "integrity": "sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz", - "integrity": "sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz", - "integrity": "sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz", - "integrity": "sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz", - "integrity": "sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz", - "integrity": "sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz", - "integrity": "sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz", - "integrity": "sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz", - "integrity": "sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz", - "integrity": "sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz", - "integrity": "sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz", - "integrity": "sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz", - "integrity": "sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz", - "integrity": "sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz", - "integrity": "sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz", - "integrity": "sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA==", - "dev": true, - "optional": true - }, - "esbuild-wasm": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz", - "integrity": "sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A==", - "dev": true - }, - "esbuild-windows-32": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz", - "integrity": "sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz", - "integrity": "sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz", - "integrity": "sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA==", - "dev": true, - "optional": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "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 - }, - "globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "requires": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - } - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "optional": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "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==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", - "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", - "dev": true - }, - "inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "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 - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "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": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jasmine-core": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.3.0.tgz", - "integrity": "sha512-qybtBUesniQdW6n+QIHMng2vDOHscIC/dEXjW+JzO9+LoAZMb03RCUC5xFOv/btSKPm1xL42fn+RjlU4oB42Lg==", - "dev": true - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "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 - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "karma": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", - "integrity": "sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "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 - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", - "dev": true, - "requires": { - "which": "^1.2.1" - } - }, - "karma-coverage": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", - "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "karma-jasmine": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", - "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", - "dev": true, - "requires": { - "jasmine-core": "^4.1.0" - } - }, - "karma-jasmine-html-reporter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", - "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", - "dev": true, - "requires": {} - }, - "karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "requires": { - "source-map-support": "^0.5.5" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true - }, - "less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dev": true, - "requires": { - "copy-anything": "^2.0.1", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": 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, - "optional": true - } - } - }, - "less-loader": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.0.0.tgz", - "integrity": "sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw==", - "dev": true, - "requires": { - "klona": "^2.0.4" - } - }, - "license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", - "dev": true, - "requires": { - "webpack-sources": "^3.0.0" - } - }, - "lines-and-columns": { - "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 - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "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 - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log4js": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz", - "integrity": "sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q==", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.3" - } - }, - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "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==", - "dev": true - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "needle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz", - "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "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==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "optional": true, - "requires": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-gyp": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", - "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^2.0.0" - } - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } - } - }, - "npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", - "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - } - }, - "npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "dependencies": { - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - } - } - }, - "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==", - "dev": true - }, - "pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "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, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-html-rewriting-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, - "requires": { - "parse5": "^6.0.1", - "parse5-sax-parser": "^6.0.1" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": 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==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "requires": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0", - "nice-napi": "^1.0.2" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-properties": { - "version": "12.1.9", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.9.tgz", - "integrity": "sha512-/E7PRvK8DAVljBbeWrcEQJPG72jaImxF3vvCNFwv9cC8CzigVoNIpeyfnJzphnN3Fd8/auBf5wvkw6W9MfmTyg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true, - "requires": {} - }, - "postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true, - "requires": {} - }, - "postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-import": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz", - "integrity": "sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "requires": {} - }, - "postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - } - }, - "postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true, - "requires": {} - }, - "postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true, - "requires": {} - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-opacity-percentage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", - "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", - "dev": true - }, - "postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true, - "requires": {} - }, - "postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-preset-env": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz", - "integrity": "sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA==", - "dev": true, - "requires": { - "@csstools/postcss-cascade-layers": "^1.0.5", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.8", - "browserslist": "^4.21.3", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.0.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.8", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.10", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true, - "requires": {} - }, - "postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - } - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "optional": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "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 - }, - "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" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "regexpu-core": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", - "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true - }, - "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" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "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.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "requires": { - "tslib": "^2.1.0" - } - }, - "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==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true - }, - "sass": { - "version": "1.54.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz", - "integrity": "sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "sass-loader": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", - "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", - "dev": true, - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "dependencies": { - "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", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socket.io": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.2.tgz", - "integrity": "sha512-6fCnk4ARMPZN448+SQcnn1u8OHUC72puJcNtSgg2xS34Cu7br1gQ09YKkO1PFfDn/wyUE9ZgMAwosJed003+NQ==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.0" - } - }, - "socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", - "dev": true - }, - "socket.io-parser": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz", - "integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==", - "dev": true, - "requires": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - } - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.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 - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "source-map-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.0.tgz", - "integrity": "sha512-i3KVgM3+QPAHNbGavK+VBq03YoJl24m9JWNbLgsjTj8aJzXG9M61bantBTNBt7CNwY2FYf+RJRYJ3pzalKjIrw==", - "dev": true, - "requires": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "source-map-support": { - "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==", - "dev": 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==", - "dev": true - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - }, - "streamroller": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.3.tgz", - "integrity": "sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w==", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "stylus": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz", - "integrity": "sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==", - "dev": true, - "requires": { - "@adobe/css-tools": "^4.0.1", - "debug": "^4.3.2", - "glob": "^7.1.6", - "sax": "~1.2.4", - "source-map": "^0.7.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "stylus-loader": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz", - "integrity": "sha512-WTbtLrNfOfLgzTaR9Lj/BPhQroKk/LC1hfTXSUbrxmxgfUo3Y3LpmKRVA2R1XbjvTAvOfaian9vOyfv1z99E+A==", - "dev": true, - "requires": { - "fast-glob": "^3.2.11", - "klona": "^2.0.5", - "normalize-path": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "dependencies": { - "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", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.34.tgz", - "integrity": "sha512-cJMeh/eOILyGu0ejgTKB95yKT3zOenSe9UGE3vj6WfiOwgGYnmATUsnDixMFvdU+rNMvWih83hrUP8VwhF9yXQ==", - "dev": true - }, - "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 - }, - "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" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "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 - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "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", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "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", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "webpack-dev-server": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz", - "integrity": "sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw==", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "dependencies": { - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "ws": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", - "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", - "dev": true, - "requires": {} - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, - "webpack-subresource-integrity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", - "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", - "dev": true, - "requires": { - "typed-assert": "^1.0.8" - } - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "requires": {} - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "zone.js": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", - "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", - "requires": { - "tslib": "^2.3.0" - } - } - } -} diff --git a/examples/user-management/angular-user-management/package.json b/examples/user-management/angular-user-management/package.json deleted file mode 100644 index 734206c496a3d..0000000000000 --- a/examples/user-management/angular-user-management/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "angular-user-management", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test" - }, - "private": true, - "dependencies": { - "@angular/animations": "^14.2.0", - "@angular/common": "^14.2.0", - "@angular/compiler": "^14.2.0", - "@angular/core": "^14.2.0", - "@angular/forms": "^14.2.0", - "@angular/platform-browser": "^14.2.0", - "@angular/platform-browser-dynamic": "^14.2.0", - "@angular/router": "^14.2.0", - "@supabase/supabase-js": "^2.0.4", - "rxjs": "~7.5.0", - "tslib": "^2.3.0", - "zone.js": "~0.11.4" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^14.2.5", - "@angular/cli": "~14.2.5", - "@angular/compiler-cli": "^14.2.0", - "@types/jasmine": "~4.0.0", - "jasmine-core": "~4.3.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "typescript": "~4.7.2" - } -} diff --git a/examples/user-management/angular-user-management/src/app/account/account.component.css b/examples/user-management/angular-user-management/src/app/account/account.component.css deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/examples/user-management/angular-user-management/src/app/account/account.component.html b/examples/user-management/angular-user-management/src/app/account/account.component.html deleted file mode 100644 index 8fe25ff699b0d..0000000000000 --- a/examples/user-management/angular-user-management/src/app/account/account.component.html +++ /dev/null @@ -1,40 +0,0 @@ -
    - - -
    - - -
    -
    - - -
    -
    - - -
    - -
    - -
    - -
    - -
    -
    diff --git a/examples/user-management/angular-user-management/src/app/account/account.component.spec.ts b/examples/user-management/angular-user-management/src/app/account/account.component.spec.ts deleted file mode 100644 index d954515dd331d..0000000000000 --- a/examples/user-management/angular-user-management/src/app/account/account.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AccountComponent } from './account.component'; - -describe('AccountComponent', () => { - let component: AccountComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ AccountComponent ] - }) - .compileComponents(); - - fixture = TestBed.createComponent(AccountComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/examples/user-management/angular-user-management/src/app/account/account.component.ts b/examples/user-management/angular-user-management/src/app/account/account.component.ts deleted file mode 100644 index 8024df9328fa5..0000000000000 --- a/examples/user-management/angular-user-management/src/app/account/account.component.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; -import { AuthSession } from '@supabase/supabase-js'; -import { Profile, SupabaseService } from '../supabase.service'; - -@Component({ - selector: 'app-account', - templateUrl: './account.component.html', - styleUrls: ['./account.component.css'], -}) -export class AccountComponent implements OnInit { - loading = false; - profile!: Profile; - - @Input() - session!: AuthSession; - - updateProfileForm = this.formBuilder.group({ - username: '', - website: '', - avatar_url: '', - }); - - constructor( - private readonly supabase: SupabaseService, - private formBuilder: FormBuilder - ) {} - - async ngOnInit(): Promise { - await this.getProfile(); - - const { username, website, avatar_url } = this.profile; - this.updateProfileForm.patchValue({ - username, - website, - avatar_url, - }); - } - - get avatarUrl() { - return this.updateProfileForm.value.avatar_url as string; - } - - async getProfile() { - try { - this.loading = true; - const { user } = this.session; - let { data: profile, error, status } = await this.supabase.profile(user); - - if (error && status !== 406) { - throw error; - } - - if (profile) { - this.profile = profile; - } - } catch (error) { - if (error instanceof Error) { - alert(error.message); - } - } finally { - this.loading = false; - } - } - - async updateAvatar(event: string): Promise { - this.updateProfileForm.patchValue({ - avatar_url: event, - }); - await this.updateProfile(); - } - - async updateProfile(): Promise { - try { - this.loading = true; - const { user } = this.session; - - const username = this.updateProfileForm.value.username as string; - const website = this.updateProfileForm.value.website as string; - const avatar_url = this.updateProfileForm.value.avatar_url as string; - - const { error } = await this.supabase.updateProfile({ - id: user.id, - username, - website, - avatar_url, - }); - if (error) throw error; - } catch (error) { - if (error instanceof Error) { - alert(error.message); - } - } finally { - this.loading = false; - } - } - - async signOut() { - await this.supabase.signOut(); - } -} diff --git a/examples/user-management/angular-user-management/src/app/app.component.css b/examples/user-management/angular-user-management/src/app/app.component.css deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/examples/user-management/angular-user-management/src/app/app.component.html b/examples/user-management/angular-user-management/src/app/app.component.html deleted file mode 100644 index d07c0e04acae3..0000000000000 --- a/examples/user-management/angular-user-management/src/app/app.component.html +++ /dev/null @@ -1,6 +0,0 @@ -
    - - - - -
    diff --git a/examples/user-management/angular-user-management/src/app/app.component.spec.ts b/examples/user-management/angular-user-management/src/app/app.component.spec.ts deleted file mode 100644 index 4b068a286565a..0000000000000 --- a/examples/user-management/angular-user-management/src/app/app.component.spec.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ - AppComponent - ], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - - it(`should have as title 'angular-user-management'`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app.title).toEqual('angular-user-management'); - }); - - it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.content span')?.textContent).toContain('angular-user-management app is running!'); - }); -}); diff --git a/examples/user-management/angular-user-management/src/app/app.component.ts b/examples/user-management/angular-user-management/src/app/app.component.ts deleted file mode 100644 index d668fc68d6840..0000000000000 --- a/examples/user-management/angular-user-management/src/app/app.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { SupabaseService } from './supabase.service'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.css'], -}) -export class AppComponent implements OnInit { - title = 'angular-user-management'; - - session = this.supabase.session; - - constructor(private readonly supabase: SupabaseService) {} - - ngOnInit() { - this.supabase.authChanges((_, session) => (this.session = session)); - } -} diff --git a/examples/user-management/angular-user-management/src/app/app.module.ts b/examples/user-management/angular-user-management/src/app/app.module.ts deleted file mode 100644 index e02bd52056591..0000000000000 --- a/examples/user-management/angular-user-management/src/app/app.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; - -import { AppComponent } from './app.component'; -import { AuthComponent } from './auth/auth.component'; -import { AccountComponent } from './account/account.component'; -import { ReactiveFormsModule } from '@angular/forms'; -import { AvatarComponent } from './avatar/avatar.component'; - -@NgModule({ - declarations: [ - AppComponent, - AuthComponent, - AccountComponent, - AvatarComponent, - ], - imports: [BrowserModule, ReactiveFormsModule], - providers: [], - bootstrap: [AppComponent], -}) -export class AppModule {} diff --git a/examples/user-management/angular-user-management/src/app/auth/auth.component.css b/examples/user-management/angular-user-management/src/app/auth/auth.component.css deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/examples/user-management/angular-user-management/src/app/auth/auth.component.html b/examples/user-management/angular-user-management/src/app/auth/auth.component.html deleted file mode 100644 index 874130cccc71a..0000000000000 --- a/examples/user-management/angular-user-management/src/app/auth/auth.component.html +++ /dev/null @@ -1,27 +0,0 @@ -
    -
    -

    Supabase + Angular

    -

    Sign in via magic link with your email below

    -
    -
    - - -
    -
    - -
    -
    -
    -
    diff --git a/examples/user-management/angular-user-management/src/app/auth/auth.component.spec.ts b/examples/user-management/angular-user-management/src/app/auth/auth.component.spec.ts deleted file mode 100644 index ce785350ec7d7..0000000000000 --- a/examples/user-management/angular-user-management/src/app/auth/auth.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AuthComponent } from './auth.component'; - -describe('AuthComponent', () => { - let component: AuthComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ AuthComponent ] - }) - .compileComponents(); - - fixture = TestBed.createComponent(AuthComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/examples/user-management/angular-user-management/src/app/auth/auth.component.ts b/examples/user-management/angular-user-management/src/app/auth/auth.component.ts deleted file mode 100644 index 6e80c347ac7d8..0000000000000 --- a/examples/user-management/angular-user-management/src/app/auth/auth.component.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; -import { SupabaseService } from '../supabase.service'; - -@Component({ - selector: 'app-auth', - templateUrl: './auth.component.html', - styleUrls: ['./auth.component.css'], -}) -export class AuthComponent implements OnInit { - loading = false; - - signInForm = this.formBuilder.group({ - email: '', - }); - - constructor( - private readonly supabase: SupabaseService, - private readonly formBuilder: FormBuilder - ) {} - - ngOnInit(): void {} - - async onSubmit(): Promise { - try { - this.loading = true; - const email = this.signInForm.value.email as string; - const { error } = await this.supabase.signIn(email); - if (error) throw error; - alert('Check your email for the login link!'); - } catch (error) { - if (error instanceof Error) { - alert(error.message); - } - } finally { - this.signInForm.reset(); - this.loading = false; - } - } -} diff --git a/examples/user-management/angular-user-management/src/app/avatar/avatar.component.css b/examples/user-management/angular-user-management/src/app/avatar/avatar.component.css deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/examples/user-management/angular-user-management/src/app/avatar/avatar.component.html b/examples/user-management/angular-user-management/src/app/avatar/avatar.component.html deleted file mode 100644 index b86e45f254c35..0000000000000 --- a/examples/user-management/angular-user-management/src/app/avatar/avatar.component.html +++ /dev/null @@ -1,27 +0,0 @@ -
    - Avatar -
    -
    -
    - - -
    diff --git a/examples/user-management/angular-user-management/src/app/avatar/avatar.component.spec.ts b/examples/user-management/angular-user-management/src/app/avatar/avatar.component.spec.ts deleted file mode 100644 index 1e7da9687a898..0000000000000 --- a/examples/user-management/angular-user-management/src/app/avatar/avatar.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AvatarComponent } from './avatar.component'; - -describe('AvatarComponent', () => { - let component: AvatarComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ AvatarComponent ] - }) - .compileComponents(); - - fixture = TestBed.createComponent(AvatarComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/examples/user-management/angular-user-management/src/app/avatar/avatar.component.ts b/examples/user-management/angular-user-management/src/app/avatar/avatar.component.ts deleted file mode 100644 index f89dfaa2054ed..0000000000000 --- a/examples/user-management/angular-user-management/src/app/avatar/avatar.component.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { SafeResourceUrl, DomSanitizer } from '@angular/platform-browser'; -import { SupabaseService } from '../supabase.service'; - -@Component({ - selector: 'app-avatar', - templateUrl: './avatar.component.html', - styleUrls: ['./avatar.component.css'], -}) -export class AvatarComponent implements OnInit { - _avatarUrl: SafeResourceUrl | undefined; - uploading = false; - - @Input() - set avatarUrl(url: string | null) { - if (url) { - this.downloadImage(url); - } - } - - @Output() upload = new EventEmitter(); - - constructor( - private readonly supabase: SupabaseService, - private readonly dom: DomSanitizer - ) {} - - ngOnInit(): void {} - - async downloadImage(path: string) { - try { - const { data } = await this.supabase.downLoadImage(path); - if (data instanceof Blob) { - this._avatarUrl = this.dom.bypassSecurityTrustResourceUrl( - URL.createObjectURL(data) - ); - } - } catch (error) { - if (error instanceof Error) { - console.error('Error downloading image: ', error.message); - } - } - } - - async uploadAvatar(event: any) { - try { - this.uploading = 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 filePath = `${Math.random()}.${fileExt}`; - - await this.supabase.uploadAvatar(filePath, file); - this.upload.emit(filePath); - } catch (error) { - if (error instanceof Error) { - alert(error.message); - } - } finally { - this.uploading = false; - } - } -} diff --git a/examples/user-management/angular-user-management/src/app/supabase.service.spec.ts b/examples/user-management/angular-user-management/src/app/supabase.service.spec.ts deleted file mode 100644 index 6e1ce7dba080b..0000000000000 --- a/examples/user-management/angular-user-management/src/app/supabase.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { SupabaseService } from './supabase.service'; - -describe('SupabaseService', () => { - let service: SupabaseService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(SupabaseService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/examples/user-management/angular-user-management/src/app/supabase.service.ts b/examples/user-management/angular-user-management/src/app/supabase.service.ts deleted file mode 100644 index efb0dfde211a2..0000000000000 --- a/examples/user-management/angular-user-management/src/app/supabase.service.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { Injectable } from '@angular/core'; -import { - AuthChangeEvent, - AuthSession, - createClient, - Session, - SupabaseClient, - User, -} from '@supabase/supabase-js'; -import { environment } from 'src/environments/environment'; -import { Database } from 'src/schema'; - -export interface Profile { - id?: string; - username: string; - website: string; - avatar_url: string; -} - -@Injectable({ - providedIn: 'root', -}) -export class SupabaseService { - private supabase: SupabaseClient; - _session: AuthSession | null = null; - - constructor() { - this.supabase = createClient( - environment.supabaseUrl, - environment.supabaseKey - ); - } - - get session() { - this.supabase.auth.getSession().then(({ data }) => { - this._session = data.session; - }); - return this._session; - } - - profile(user: User) { - return this.supabase - .from('profiles') - .select(`username, website, avatar_url`) - .eq('id', user.id) - .single(); - } - - authChanges( - callback: (event: AuthChangeEvent, session: Session | null) => void - ) { - return this.supabase.auth.onAuthStateChange(callback); - } - - signIn(email: string) { - return this.supabase.auth.signInWithOtp({ email }); - } - - signOut() { - return this.supabase.auth.signOut(); - } - - updateProfile(profile: Profile) { - const update = { - ...profile, - updated_at: new Date(), - }; - - return this.supabase.from('profiles').upsert(update); - } - - downLoadImage(path: string) { - return this.supabase.storage.from('avatars').download(path); - } - - uploadAvatar(filePath: string, file: File) { - return this.supabase.storage.from('avatars').upload(filePath, file); - } -} diff --git a/examples/user-management/angular-user-management/src/assets/.gitkeep b/examples/user-management/angular-user-management/src/assets/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/examples/user-management/angular-user-management/src/environments/environment.prod.ts b/examples/user-management/angular-user-management/src/environments/environment.prod.ts deleted file mode 100644 index b500a8b592433..0000000000000 --- a/examples/user-management/angular-user-management/src/environments/environment.prod.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const environment = { - production: true, - supabaseUrl: '', - supabaseKey: '', -}; diff --git a/examples/user-management/angular-user-management/src/environments/environment.ts b/examples/user-management/angular-user-management/src/environments/environment.ts deleted file mode 100644 index 5186483ed5c3c..0000000000000 --- a/examples/user-management/angular-user-management/src/environments/environment.ts +++ /dev/null @@ -1,18 +0,0 @@ -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. - -export const environment = { - production: false, - supabaseUrl: '', - supabaseKey: '', -}; - -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/examples/user-management/angular-user-management/src/favicon.ico b/examples/user-management/angular-user-management/src/favicon.ico deleted file mode 100644 index 997406ad22c29..0000000000000 Binary files a/examples/user-management/angular-user-management/src/favicon.ico and /dev/null differ diff --git a/examples/user-management/angular-user-management/src/index.html b/examples/user-management/angular-user-management/src/index.html deleted file mode 100644 index 8e43ba6617266..0000000000000 --- a/examples/user-management/angular-user-management/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - AngularUserManagement - - - - - - - - diff --git a/examples/user-management/angular-user-management/src/main.ts b/examples/user-management/angular-user-management/src/main.ts deleted file mode 100644 index c7b673cf44b38..0000000000000 --- a/examples/user-management/angular-user-management/src/main.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; - -if (environment.production) { - enableProdMode(); -} - -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); diff --git a/examples/user-management/angular-user-management/src/polyfills.ts b/examples/user-management/angular-user-management/src/polyfills.ts deleted file mode 100644 index 429bb9ef2d340..0000000000000 --- a/examples/user-management/angular-user-management/src/polyfills.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes recent versions of Safari, Chrome (including - * Opera), Edge on the desktop, and iOS and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; // Included with Angular CLI. - - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ diff --git a/examples/user-management/angular-user-management/src/schema.ts b/examples/user-management/angular-user-management/src/schema.ts deleted file mode 100644 index 4593c033977d6..0000000000000 --- a/examples/user-management/angular-user-management/src/schema.ts +++ /dev/null @@ -1,40 +0,0 @@ -export type Json = string | number | boolean | null | { [key: string]: Json } | Json[] - -export interface Database { - public: { - Tables: { - profiles: { - Row: { - id: string - updated_at: string | null - username: string | null - avatar_url: string | null - website: string | null - } - Insert: { - id: string - updated_at?: string | null - username?: string | null - avatar_url?: string | null - website?: string | null - } - Update: { - id?: string - updated_at?: string | null - username?: string | null - avatar_url?: string | null - website?: string | null - } - } - } - Views: { - [_ in never]: never - } - Functions: { - [_ in never]: never - } - Enums: { - [_ in never]: never - } - } -} diff --git a/examples/user-management/angular-user-management/src/styles.css b/examples/user-management/angular-user-management/src/styles.css deleted file mode 100644 index 54b465ff8c053..0000000000000 --- a/examples/user-management/angular-user-management/src/styles.css +++ /dev/null @@ -1,372 +0,0 @@ -html, -body { - --custom-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, - Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; - --custom-bg-color: #101010; - --custom-panel-color: #222; - --custom-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.8); - --custom-color: #fff; - --custom-color-brand: #24b47e; - --custom-color-secondary: #666; - --custom-border: 1px solid #333; - --custom-border-radius: 5px; - --custom-spacing: 5px; - - padding: 0; - margin: 0; - font-family: var(--custom-font-family); - background-color: var(--custom-bg-color); -} - -* { - color: var(--custom-color); - font-family: var(--custom-font-family); - box-sizing: border-box; -} - -html, -body, -#__next { - height: 100vh; - width: 100vw; - overflow-x: hidden; -} - -/* Grid */ - -.container { - width: 90%; - margin-left: auto; - margin-right: auto; -} -.row { - position: relative; - width: 100%; -} -.row [class^="col"] { - float: left; - margin: 0.5rem 2%; - min-height: 0.125rem; -} -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-10, -.col-11, -.col-12 { - width: 96%; -} -.col-1-sm { - width: 4.33%; -} -.col-2-sm { - width: 12.66%; -} -.col-3-sm { - width: 21%; -} -.col-4-sm { - width: 29.33%; -} -.col-5-sm { - width: 37.66%; -} -.col-6-sm { - width: 46%; -} -.col-7-sm { - width: 54.33%; -} -.col-8-sm { - width: 62.66%; -} -.col-9-sm { - width: 71%; -} -.col-10-sm { - width: 79.33%; -} -.col-11-sm { - width: 87.66%; -} -.col-12-sm { - width: 96%; -} -.row::after { - content: ""; - display: table; - clear: both; -} -.hidden-sm { - display: none; -} - -@media only screen and (min-width: 33.75em) { - /* 540px */ - .container { - width: 80%; - } -} - -@media only screen and (min-width: 45em) { - /* 720px */ - .col-1 { - width: 4.33%; - } - .col-2 { - width: 12.66%; - } - .col-3 { - width: 21%; - } - .col-4 { - width: 29.33%; - } - .col-5 { - width: 37.66%; - } - .col-6 { - width: 46%; - } - .col-7 { - width: 54.33%; - } - .col-8 { - width: 62.66%; - } - .col-9 { - width: 71%; - } - .col-10 { - width: 79.33%; - } - .col-11 { - width: 87.66%; - } - .col-12 { - width: 96%; - } - .hidden-sm { - display: block; - } -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .container { - width: 75%; - max-width: 60rem; - } -} - -/* Forms */ - -label { - display: block; - margin: 5px 0; - color: var(--custom-color-secondary); - font-size: 0.8rem; - text-transform: uppercase; -} - -input { - width: 100%; - border-radius: 5px; - border: var(--custom-border); - padding: 8px; - font-size: 0.9rem; - background-color: var(--custom-bg-color); - color: var(--custom-color); -} - -input[disabled] { - color: var(--custom-color-secondary); -} - -/* Utils */ - -.block { - display: block; - width: 100%; -} -.inline-block { - display: inline-block; - width: 100%; -} -.flex { - display: flex; -} -.flex.column { - flex-direction: column; -} -.flex.row { - flex-direction: row; -} -.flex.flex-1 { - flex: 1 1 0; -} -.flex-end { - justify-content: flex-end; -} -.flex-center { - justify-content: center; -} -.items-center { - align-items: center; -} -.text-sm { - font-size: 0.8rem; - font-weight: 300; -} -.text-right { - text-align: right; -} -.font-light { - font-weight: 300; -} -.opacity-half { - opacity: 50%; -} - -/* Button */ - -button, -.button { - color: var(--custom-color); - border: var(--custom-border); - background-color: var(--custom-bg-color); - display: inline-block; - text-align: center; - border-radius: var(--custom-border-radius); - padding: 0.5rem 1rem; - cursor: pointer; - text-align: center; - font-size: 0.9rem; - text-transform: uppercase; -} - -button.primary, -.button.primary { - background-color: var(--custom-color-brand); - border: 1px solid var(--custom-color-brand); -} - -/* Widgets */ - -.card { - width: 100%; - display: block; - border: var(--custom-border); - border-radius: var(--custom-border-radius); - padding: var(--custom-spacing); -} - -.avatar { - border-radius: var(--custom-border-radius); - overflow: hidden; - max-width: 100%; -} -.avatar.image { - object-fit: cover; -} -.avatar.no-image { - background-color: #333; - border: 1px solid rgb(200, 200, 200); - border-radius: 5px; -} - -.footer { - position: absolute; - max-width: 100%; - bottom: 0; - left: 0; - right: 0; - display: flex; - flex-flow: row; - border-top: var(--custom-border); - background-color: var(--custom-bg-color); -} -.footer div { - padding: var(--custom-spacing); - display: flex; - align-items: center; - width: 100%; -} -.footer div > img { - height: 20px; - margin-left: 10px; -} -.footer > div:first-child { - display: none; -} -.footer > div:nth-child(2) { - justify-content: left; -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .footer > div:first-child { - display: flex; - } - .footer > div:nth-child(2) { - justify-content: center; - } -} - -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -.mainHeader { - width: 100%; - font-size: 1.3rem; - margin-bottom: 20px; -} - -.avatarPlaceholder { - border: var(--custom-border); - border-radius: var(--custom-border-radius); - width: 35px; - height: 35px; - background-color: rgba(255, 255, 255, 0.2); - display: flex; - align-items: center; - justify-content: center; -} - -.form-widget { - display: flex; - flex-direction: column; - gap: 20px; -} - -.form-widget > .button { - display: flex; - align-items: center; - justify-content: center; - border: none; - background-color: #444444; - text-transform: none !important; - transition: all 0.2s ease; -} - -.form-widget .button:hover { - background-color: #2a2a2a; -} - -.form-widget .button > .loader { - width: 17px; - animation: spin 1s linear infinite; - filter: invert(1); -} diff --git a/examples/user-management/angular-user-management/src/test.ts b/examples/user-management/angular-user-management/src/test.ts deleted file mode 100644 index c04c876075f97..0000000000000 --- a/examples/user-management/angular-user-management/src/test.ts +++ /dev/null @@ -1,26 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js/testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: { - context(path: string, deep?: boolean, filter?: RegExp): { - (id: string): T; - keys(): string[]; - }; -}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), -); - -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().forEach(context); diff --git a/examples/user-management/angular-user-management/tsconfig.app.json b/examples/user-management/angular-user-management/tsconfig.app.json deleted file mode 100644 index 82d91dc4a4de5..0000000000000 --- a/examples/user-management/angular-user-management/tsconfig.app.json +++ /dev/null @@ -1,15 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/app", - "types": [] - }, - "files": [ - "src/main.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/examples/user-management/angular-user-management/tsconfig.json b/examples/user-management/angular-user-management/tsconfig.json deleted file mode 100644 index ff06eae10c542..0000000000000 --- a/examples/user-management/angular-user-management/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "importHelpers": true, - "target": "es2020", - "module": "es2020", - "lib": [ - "es2020", - "dom" - ] - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/examples/user-management/angular-user-management/tsconfig.spec.json b/examples/user-management/angular-user-management/tsconfig.spec.json deleted file mode 100644 index 092345b02e807..0000000000000 --- a/examples/user-management/angular-user-management/tsconfig.spec.json +++ /dev/null @@ -1,18 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/examples/user-management/expo-user-management/.expo-shared/assets.json b/examples/user-management/expo-user-management/.expo-shared/assets.json deleted file mode 100644 index 1e6decfbb52a2..0000000000000 --- a/examples/user-management/expo-user-management/.expo-shared/assets.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "12bb71342c6255bbf50437ec8f4441c083f47cdb74bd89160c15e4f43e52a1cb": true, - "40b842e832070c58deac6aa9e08fa459302ee3f9da492c7e77d93d2fbf4a56fd": true -} diff --git a/examples/user-management/expo-user-management/.gitignore b/examples/user-management/expo-user-management/.gitignore deleted file mode 100644 index 8e382ba821376..0000000000000 --- a/examples/user-management/expo-user-management/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -node_modules/ -.expo/ -dist/ -npm-debug.* -*.jks -*.p8 -*.p12 -*.key -*.mobileprovision -*.orig.* -web-build/ -ios -android - -# macOS -.DS_Store diff --git a/examples/user-management/expo-user-management/.prettierrc b/examples/user-management/expo-user-management/.prettierrc deleted file mode 100644 index 76aea4cb1f2ae..0000000000000 --- a/examples/user-management/expo-user-management/.prettierrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "arrowParens": "always", - "bracketSpacing": true, - "bracketSameLine": false, - "endOfLine": "lf", - "jsxSingleQuote": false, - "htmlWhitespaceSensitivity": "ignore", - "printWidth": 100, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "all", - "useTabs": false -} \ No newline at end of file diff --git a/examples/user-management/expo-user-management/App.tsx b/examples/user-management/expo-user-management/App.tsx deleted file mode 100644 index 7eba4422a8319..0000000000000 --- a/examples/user-management/expo-user-management/App.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import 'react-native-url-polyfill/auto' -import { useState, useEffect } from 'react' -import { supabase } from './lib/supabase' -import Auth from './components/Auth' -import Account from './components/Account' -import { View } from 'react-native' -import { Session } from '@supabase/supabase-js' - -export default function App() { - const [session, setSession] = useState(null) - - useEffect(() => { - supabase.auth.getSession().then(({ data: { session } }) => { - setSession(session) - }) - - supabase.auth.onAuthStateChange((_event, session) => { - setSession(session) - }) - }, []) - - return ( - - {session && session.user ? : } - - ) -} diff --git a/examples/user-management/expo-user-management/README.md b/examples/user-management/expo-user-management/README.md deleted file mode 100644 index 69dd32c9fa4b6..0000000000000 --- a/examples/user-management/expo-user-management/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# React Native User Management example with Expo - -## Requirements - -- Install the [Expo CLI](https://docs.expo.io/get-started/installation/) - -## Setup & run locally - -### 1. Create new project - -Sign up to Supabase - [https://supabase.com/dashboard](https://supabase.com/dashboard) and create a new project. Wait for your database to start. - -### 2. Run "User Management Starter" Quickstart - -Once your database has started, run the "User Management Starter" quickstart. Inside of your project, enter the `SQL editor` tab and scroll down until you see `User Management Starter`. - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). - -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) - -**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. - -Set the details in the `/lib/supabase.js` file. - -### 4. Install the dependencies & run the project: - -Install the dependencies: - -```bash -npm install -``` - -### 4a. For file picker - -In order to get the file picker to work you must first prebuild the project before running it. - -```bash -expo prebuild -``` - -### 5. Run the application - -Run the application: `npm start`. - -## Supabase details - -### Postgres Row level security - -This project uses very high-level Authorization using Postgres' Role Level Security. -When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. -When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. -We can use these details to provide fine-grained control over what each user can and cannot do. - -This is a trimmed-down schema, with the policies: - -```sql --- Create a table for Public Profiles -create table - profiles ( - id uuid references auth.users not null, - updated_at timestamp - with - time zone, - username text unique, - avatar_url text, - website text, - primary key (id), - unique (username), - constraint username_length check (char_length(username) >= 3) - ); - -alter table - profiles enable row level security; - -create policy "Public profiles are viewable by everyone." on profiles for -select - using (true); - -create policy "Users can insert their own profile." on profiles for insert -with - check (auth.uid () = id); - -create policy "Users can update own profile." on profiles for -update - using (auth.uid () = id); - --- Set up Realtime! -begin; - -drop - publication if exists supabase_realtime; - -create publication supabase_realtime; - -commit; - -alter - publication supabase_realtime add table profiles; - --- Set up Storage! -insert into - storage.buckets (id, name) -values - ('avatars', 'avatars'); - -create policy "Avatar images are publicly accessible." on storage.objects for -select - using (bucket_id = 'avatars'); - -create policy "Anyone can upload an avatar." on storage.objects for insert -with - check (bucket_id = 'avatars'); -``` - -## Authors - -- [Supabase](https://supabase.com) - -Supabase is open source, we'd love for you to follow along and get involved at https://github.com/supabase/supabase diff --git a/examples/user-management/expo-user-management/app.json b/examples/user-management/expo-user-management/app.json deleted file mode 100644 index 4994cecfad640..0000000000000 --- a/examples/user-management/expo-user-management/app.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "expo": { - "name": "expo-user-management", - "slug": "expo-user-management", - "version": "1.0.0", - "orientation": "portrait", - "icon": "./assets/icon.png", - "userInterfaceStyle": "light", - "splash": { - "image": "./assets/splash.png", - "resizeMode": "contain", - "backgroundColor": "#ffffff" - }, - "updates": { - "fallbackToCacheTimeout": 0 - }, - "assetBundlePatterns": [ - "**/*" - ], - "ios": { - "supportsTablet": true, - "bundleIdentifier": "com.supabase.expousermanagement" - }, - "android": { - "adaptiveIcon": { - "foregroundImage": "./assets/adaptive-icon.png", - "backgroundColor": "#FFFFFF" - }, - "package": "com.supabase.expousermanagement" - }, - "web": { - "favicon": "./assets/favicon.png" - } - } -} diff --git a/examples/user-management/expo-user-management/assets/adaptive-icon.png b/examples/user-management/expo-user-management/assets/adaptive-icon.png deleted file mode 100644 index 03d6f6b6c6727..0000000000000 Binary files a/examples/user-management/expo-user-management/assets/adaptive-icon.png and /dev/null differ diff --git a/examples/user-management/expo-user-management/assets/favicon.png b/examples/user-management/expo-user-management/assets/favicon.png deleted file mode 100644 index e75f697b18018..0000000000000 Binary files a/examples/user-management/expo-user-management/assets/favicon.png and /dev/null differ diff --git a/examples/user-management/expo-user-management/assets/icon.png b/examples/user-management/expo-user-management/assets/icon.png deleted file mode 100644 index a0b1526fc7b78..0000000000000 Binary files a/examples/user-management/expo-user-management/assets/icon.png and /dev/null differ diff --git a/examples/user-management/expo-user-management/assets/splash.png b/examples/user-management/expo-user-management/assets/splash.png deleted file mode 100644 index 0e89705a94367..0000000000000 Binary files a/examples/user-management/expo-user-management/assets/splash.png and /dev/null differ diff --git a/examples/user-management/expo-user-management/babel.config.js b/examples/user-management/expo-user-management/babel.config.js deleted file mode 100644 index e1e3637afdf18..0000000000000 --- a/examples/user-management/expo-user-management/babel.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = function (api) { - api.cache(true) - return { - presets: ['babel-preset-expo'], - } -} diff --git a/examples/user-management/expo-user-management/components/Account.tsx b/examples/user-management/expo-user-management/components/Account.tsx deleted file mode 100644 index f9512ff9af714..0000000000000 --- a/examples/user-management/expo-user-management/components/Account.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import { useState, useEffect } from 'react' -import { supabase } from '../lib/supabase' -import { StyleSheet, View, Alert } from 'react-native' -import { Button, Input } from 'react-native-elements' -import { Session } from '@supabase/supabase-js' -import Avatar from './Avatar' - -export default function Account({ session }: { session: Session }) { - const [loading, setLoading] = useState(true) - const [username, setUsername] = useState('') - const [website, setWebsite] = useState('') - const [avatarUrl, setAvatarUrl] = useState('') - - useEffect(() => { - if (session) getProfile() - }, [session]) - - async function getProfile() { - try { - setLoading(true) - if (!session?.user) throw new Error('No user on the session!') - - let { data, error, status } = await supabase - .from('profiles') - .select(`username, website, avatar_url`) - .eq('id', session?.user.id) - .single() - if (error && status !== 406) { - throw error - } - - if (data) { - setUsername(data.username) - setWebsite(data.website) - setAvatarUrl(data.avatar_url) - } - } catch (error) { - if (error instanceof Error) { - Alert.alert(error.message) - } - } finally { - setLoading(false) - } - } - - async function updateProfile({ - username, - website, - avatar_url, - }: { - username: string - website: string - avatar_url: string - }) { - try { - setLoading(true) - if (!session?.user) throw new Error('No user on the session!') - - const updates = { - id: session?.user.id, - username, - website, - avatar_url, - updated_at: new Date(), - } - - let { error } = await supabase.from('profiles').upsert(updates) - - if (error) { - throw error - } - } catch (error) { - if (error instanceof Error) { - Alert.alert(error.message) - } - } finally { - setLoading(false) - } - } - - return ( - - - { - setAvatarUrl(url) - updateProfile({ username, website, avatar_url: url }) - }} - /> - - - - - - setUsername(text)} /> - - - setWebsite(text)} /> - - - - -
    - -
    -
    - -
    -
    -
    - ) -} diff --git a/examples/user-management/nextjs-user-management/app/account/avatar.tsx b/examples/user-management/nextjs-user-management/app/account/avatar.tsx deleted file mode 100644 index 194900e6b0817..0000000000000 --- a/examples/user-management/nextjs-user-management/app/account/avatar.tsx +++ /dev/null @@ -1,99 +0,0 @@ -'use client' -import React, { useEffect, useState } from 'react' -import { Database } from '../database.types' -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' -import Image from 'next/image' -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 = createClientComponentClient() - const [avatarUrl, setAvatarUrl] = useState(url) - const [uploading, setUploading] = useState(false) - - useEffect(() => { - 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) - } - } - - if (url) downloadImage(url) - }, [url, supabase]) - - 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 filePath = `${uid}-${Math.random()}.${fileExt}` - - let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file) - - if (uploadError) { - throw uploadError - } - - onUpload(filePath) - } catch (error) { - alert('Error uploading avatar!') - } finally { - setUploading(false) - } - } - - return ( -
    - {avatarUrl ? ( - Avatar - ) : ( -
    - )} -
    - - -
    -
    - ) -} diff --git a/examples/user-management/nextjs-user-management/app/account/page.tsx b/examples/user-management/nextjs-user-management/app/account/page.tsx deleted file mode 100644 index 101785f351882..0000000000000 --- a/examples/user-management/nextjs-user-management/app/account/page.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { createServerComponentClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { Database } from '../database.types' -import AccountForm from './account-form' - -export default async function Account() { - const supabase = createServerComponentClient({ cookies }) - - const { - data: { session }, - } = await supabase.auth.getSession() - - return -} diff --git a/examples/user-management/nextjs-user-management/app/auth-form.tsx b/examples/user-management/nextjs-user-management/app/auth-form.tsx deleted file mode 100644 index 08ef3ac663031..0000000000000 --- a/examples/user-management/nextjs-user-management/app/auth-form.tsx +++ /dev/null @@ -1,20 +0,0 @@ -'use client' -import { Auth } from '@supabase/auth-ui-react' -import { ThemeSupa } from '@supabase/auth-ui-shared' -import { createClientComponentClient } from '@supabase/auth-helpers-nextjs' -import { Database } from './database.types' - -export default function AuthForm() { - const supabase = createClientComponentClient() - return ( - - ) -} diff --git a/examples/user-management/nextjs-user-management/app/auth/callback/route.ts b/examples/user-management/nextjs-user-management/app/auth/callback/route.ts deleted file mode 100644 index 4939cfc561fcb..0000000000000 --- a/examples/user-management/nextjs-user-management/app/auth/callback/route.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { NextRequest, NextResponse } from 'next/server' - -export async function GET(req: NextRequest) { - const supabase = createRouteHandlerClient({ cookies }) - const { searchParams } = new URL(req.url) - const code = searchParams.get('code') - - if (code) { - await supabase.auth.exchangeCodeForSession(code) - } - - return NextResponse.redirect(new URL('/account', req.url)) -} diff --git a/examples/user-management/nextjs-user-management/app/auth/signout/route.ts b/examples/user-management/nextjs-user-management/app/auth/signout/route.ts deleted file mode 100644 index 00501fd1f97b9..0000000000000 --- a/examples/user-management/nextjs-user-management/app/auth/signout/route.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' -import { cookies } from 'next/headers' -import { type NextRequest, NextResponse } from 'next/server' - -export async function POST(req: NextRequest) { - const supabase = createRouteHandlerClient({ cookies }) - - // Check if we have a session - const { - data: { session }, - } = await supabase.auth.getSession() - - if (session) { - await supabase.auth.signOut() - } - - return NextResponse.redirect(new URL('/', req.url), { - status: 302, - }) -} diff --git a/examples/user-management/nextjs-user-management/app/database.types.ts b/examples/user-management/nextjs-user-management/app/database.types.ts deleted file mode 100644 index 441502c3f8fd0..0000000000000 --- a/examples/user-management/nextjs-user-management/app/database.types.ts +++ /dev/null @@ -1,50 +0,0 @@ -export type Json = - | string - | number - | boolean - | null - | { [key: string]: Json } - | Json[] - -export interface Database { - public: { - Tables: { - profiles: { - Row: { - id: string - updated_at: string | null - username: string | null - full_name: string | null - avatar_url: string | null - website: string | null - } - Insert: { - id: string - updated_at?: string | null - username?: string | null - full_name?: string | null - avatar_url?: string | null - website?: string | null - } - Update: { - id?: string - updated_at?: string | null - username?: string | null - full_name?: string | null - avatar_url?: string | null - website?: string | null - } - } - } - Views: { - [_ in never]: never - } - Functions: { - [_ in never]: never - } - Enums: { - [_ in never]: never - } - } -} - diff --git a/examples/user-management/nextjs-user-management/app/favicon.ico b/examples/user-management/nextjs-user-management/app/favicon.ico deleted file mode 100644 index 718d6fea4835e..0000000000000 Binary files a/examples/user-management/nextjs-user-management/app/favicon.ico and /dev/null differ diff --git a/examples/user-management/nextjs-user-management/app/globals.css b/examples/user-management/nextjs-user-management/app/globals.css deleted file mode 100644 index 54b465ff8c053..0000000000000 --- a/examples/user-management/nextjs-user-management/app/globals.css +++ /dev/null @@ -1,372 +0,0 @@ -html, -body { - --custom-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, - Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; - --custom-bg-color: #101010; - --custom-panel-color: #222; - --custom-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.8); - --custom-color: #fff; - --custom-color-brand: #24b47e; - --custom-color-secondary: #666; - --custom-border: 1px solid #333; - --custom-border-radius: 5px; - --custom-spacing: 5px; - - padding: 0; - margin: 0; - font-family: var(--custom-font-family); - background-color: var(--custom-bg-color); -} - -* { - color: var(--custom-color); - font-family: var(--custom-font-family); - box-sizing: border-box; -} - -html, -body, -#__next { - height: 100vh; - width: 100vw; - overflow-x: hidden; -} - -/* Grid */ - -.container { - width: 90%; - margin-left: auto; - margin-right: auto; -} -.row { - position: relative; - width: 100%; -} -.row [class^="col"] { - float: left; - margin: 0.5rem 2%; - min-height: 0.125rem; -} -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-10, -.col-11, -.col-12 { - width: 96%; -} -.col-1-sm { - width: 4.33%; -} -.col-2-sm { - width: 12.66%; -} -.col-3-sm { - width: 21%; -} -.col-4-sm { - width: 29.33%; -} -.col-5-sm { - width: 37.66%; -} -.col-6-sm { - width: 46%; -} -.col-7-sm { - width: 54.33%; -} -.col-8-sm { - width: 62.66%; -} -.col-9-sm { - width: 71%; -} -.col-10-sm { - width: 79.33%; -} -.col-11-sm { - width: 87.66%; -} -.col-12-sm { - width: 96%; -} -.row::after { - content: ""; - display: table; - clear: both; -} -.hidden-sm { - display: none; -} - -@media only screen and (min-width: 33.75em) { - /* 540px */ - .container { - width: 80%; - } -} - -@media only screen and (min-width: 45em) { - /* 720px */ - .col-1 { - width: 4.33%; - } - .col-2 { - width: 12.66%; - } - .col-3 { - width: 21%; - } - .col-4 { - width: 29.33%; - } - .col-5 { - width: 37.66%; - } - .col-6 { - width: 46%; - } - .col-7 { - width: 54.33%; - } - .col-8 { - width: 62.66%; - } - .col-9 { - width: 71%; - } - .col-10 { - width: 79.33%; - } - .col-11 { - width: 87.66%; - } - .col-12 { - width: 96%; - } - .hidden-sm { - display: block; - } -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .container { - width: 75%; - max-width: 60rem; - } -} - -/* Forms */ - -label { - display: block; - margin: 5px 0; - color: var(--custom-color-secondary); - font-size: 0.8rem; - text-transform: uppercase; -} - -input { - width: 100%; - border-radius: 5px; - border: var(--custom-border); - padding: 8px; - font-size: 0.9rem; - background-color: var(--custom-bg-color); - color: var(--custom-color); -} - -input[disabled] { - color: var(--custom-color-secondary); -} - -/* Utils */ - -.block { - display: block; - width: 100%; -} -.inline-block { - display: inline-block; - width: 100%; -} -.flex { - display: flex; -} -.flex.column { - flex-direction: column; -} -.flex.row { - flex-direction: row; -} -.flex.flex-1 { - flex: 1 1 0; -} -.flex-end { - justify-content: flex-end; -} -.flex-center { - justify-content: center; -} -.items-center { - align-items: center; -} -.text-sm { - font-size: 0.8rem; - font-weight: 300; -} -.text-right { - text-align: right; -} -.font-light { - font-weight: 300; -} -.opacity-half { - opacity: 50%; -} - -/* Button */ - -button, -.button { - color: var(--custom-color); - border: var(--custom-border); - background-color: var(--custom-bg-color); - display: inline-block; - text-align: center; - border-radius: var(--custom-border-radius); - padding: 0.5rem 1rem; - cursor: pointer; - text-align: center; - font-size: 0.9rem; - text-transform: uppercase; -} - -button.primary, -.button.primary { - background-color: var(--custom-color-brand); - border: 1px solid var(--custom-color-brand); -} - -/* Widgets */ - -.card { - width: 100%; - display: block; - border: var(--custom-border); - border-radius: var(--custom-border-radius); - padding: var(--custom-spacing); -} - -.avatar { - border-radius: var(--custom-border-radius); - overflow: hidden; - max-width: 100%; -} -.avatar.image { - object-fit: cover; -} -.avatar.no-image { - background-color: #333; - border: 1px solid rgb(200, 200, 200); - border-radius: 5px; -} - -.footer { - position: absolute; - max-width: 100%; - bottom: 0; - left: 0; - right: 0; - display: flex; - flex-flow: row; - border-top: var(--custom-border); - background-color: var(--custom-bg-color); -} -.footer div { - padding: var(--custom-spacing); - display: flex; - align-items: center; - width: 100%; -} -.footer div > img { - height: 20px; - margin-left: 10px; -} -.footer > div:first-child { - display: none; -} -.footer > div:nth-child(2) { - justify-content: left; -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .footer > div:first-child { - display: flex; - } - .footer > div:nth-child(2) { - justify-content: center; - } -} - -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -.mainHeader { - width: 100%; - font-size: 1.3rem; - margin-bottom: 20px; -} - -.avatarPlaceholder { - border: var(--custom-border); - border-radius: var(--custom-border-radius); - width: 35px; - height: 35px; - background-color: rgba(255, 255, 255, 0.2); - display: flex; - align-items: center; - justify-content: center; -} - -.form-widget { - display: flex; - flex-direction: column; - gap: 20px; -} - -.form-widget > .button { - display: flex; - align-items: center; - justify-content: center; - border: none; - background-color: #444444; - text-transform: none !important; - transition: all 0.2s ease; -} - -.form-widget .button:hover { - background-color: #2a2a2a; -} - -.form-widget .button > .loader { - width: 17px; - animation: spin 1s linear infinite; - filter: invert(1); -} diff --git a/examples/user-management/nextjs-user-management/app/layout.tsx b/examples/user-management/nextjs-user-management/app/layout.tsx deleted file mode 100644 index 4be020f9c92a3..0000000000000 --- a/examples/user-management/nextjs-user-management/app/layout.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import './globals.css' - -export const metadata = { - title: 'User Management', - description: 'Generated by create next app', -} - -export default async function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - -
    - {children} -
    - - - ) -} diff --git a/examples/user-management/nextjs-user-management/app/page.module.css b/examples/user-management/nextjs-user-management/app/page.module.css deleted file mode 100644 index 9411a5e6f26a5..0000000000000 --- a/examples/user-management/nextjs-user-management/app/page.module.css +++ /dev/null @@ -1,229 +0,0 @@ -.main { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - padding: 6rem; - min-height: 100vh; -} - -.description { - display: inherit; - justify-content: inherit; - align-items: inherit; - font-size: 0.85rem; - max-width: var(--max-width); - width: 100%; - z-index: 2; - font-family: var(--font-mono); -} - -.description a { - display: flex; - justify-content: center; - align-items: center; - gap: 0.5rem; -} - -.description p { - position: relative; - margin: 0; - padding: 1rem; - background-color: rgba(var(--callout-rgb), 0.5); - border: 1px solid rgba(var(--callout-border-rgb), 0.3); - border-radius: var(--border-radius); -} - -.code { - font-weight: 700; - font-family: var(--font-mono); -} - -.grid { - display: grid; - grid-template-columns: repeat(4, minmax(25%, auto)); - width: var(--max-width); - max-width: 100%; -} - -.card { - padding: 1rem 1.2rem; - border-radius: var(--border-radius); - background: rgba(var(--card-rgb), 0); - border: 1px solid rgba(var(--card-border-rgb), 0); - transition: background 200ms, border 200ms; -} - -.card span { - display: inline-block; - transition: transform 200ms; -} - -.card h2 { - font-weight: 600; - margin-bottom: 0.7rem; -} - -.card p { - margin: 0; - opacity: 0.6; - font-size: 0.9rem; - line-height: 1.5; - max-width: 30ch; -} - -.center { - display: flex; - justify-content: center; - align-items: center; - position: relative; - padding: 4rem 0; -} - -.center::before { - background: var(--secondary-glow); - border-radius: 50%; - width: 480px; - height: 360px; - margin-left: -400px; -} - -.center::after { - background: var(--primary-glow); - width: 240px; - height: 180px; - z-index: -1; -} - -.center::before, -.center::after { - content: ''; - left: 50%; - position: absolute; - filter: blur(45px); - transform: translateZ(0); -} - -.logo { - position: relative; -} -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - .card:hover { - background: rgba(var(--card-rgb), 0.1); - border: 1px solid rgba(var(--card-border-rgb), 0.15); - } - - .card:hover span { - transform: translateX(4px); - } -} - -@media (prefers-reduced-motion) { - .card:hover span { - transform: none; - } -} - -/* Mobile */ -@media (max-width: 700px) { - .content { - padding: 4rem; - } - - .grid { - grid-template-columns: 1fr; - margin-bottom: 120px; - max-width: 320px; - text-align: center; - } - - .card { - padding: 1rem 2.5rem; - } - - .card h2 { - margin-bottom: 0.5rem; - } - - .center { - padding: 8rem 0 6rem; - } - - .center::before { - transform: none; - height: 300px; - } - - .description { - font-size: 0.8rem; - } - - .description a { - padding: 1rem; - } - - .description p, - .description div { - display: flex; - justify-content: center; - position: fixed; - width: 100%; - } - - .description p { - align-items: center; - inset: 0 0 auto; - padding: 2rem 1rem 1.4rem; - border-radius: 0; - border: none; - border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); - background: linear-gradient( - to bottom, - rgba(var(--background-start-rgb), 1), - rgba(var(--callout-rgb), 0.5) - ); - background-clip: padding-box; - backdrop-filter: blur(24px); - } - - .description div { - align-items: flex-end; - pointer-events: none; - inset: auto 0 0; - padding: 2rem; - height: 200px; - background: linear-gradient( - to bottom, - transparent 0%, - rgb(var(--background-end-rgb)) 40% - ); - z-index: 1; - } -} - -/* Tablet and Smaller Desktop */ -@media (min-width: 701px) and (max-width: 1120px) { - .grid { - grid-template-columns: repeat(2, 50%); - } -} - -@media (prefers-color-scheme: dark) { - .vercelLogo { - filter: invert(1); - } - - .logo { - filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); - } -} - -@keyframes rotate { - from { - transform: rotate(360deg); - } - to { - transform: rotate(0deg); - } -} diff --git a/examples/user-management/nextjs-user-management/app/page.tsx b/examples/user-management/nextjs-user-management/app/page.tsx deleted file mode 100644 index 7c7fb99a3e61e..0000000000000 --- a/examples/user-management/nextjs-user-management/app/page.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import AuthForm from './auth-form' - -export default function Home() { - return ( -
    -
    -

    Supabase Auth + Storage

    -

    - Experience our Auth and Storage through a simple profile management example. Create a user - profile and upload an avatar image. Fast, simple, secure. -

    -
    -
    - -
    -
    - ) -} diff --git a/examples/user-management/nextjs-user-management/app/supabase-provider.tsx b/examples/user-management/nextjs-user-management/app/supabase-provider.tsx deleted file mode 100644 index e0c2e511f027b..0000000000000 --- a/examples/user-management/nextjs-user-management/app/supabase-provider.tsx +++ /dev/null @@ -1,71 +0,0 @@ -'use client' - -import { createContext, useContext, useEffect, useState } from 'react' -import { Session, SupabaseClient, createClientComponentClient } from '@supabase/auth-helpers-nextjs' -import { useRouter } from 'next/navigation' -import { Database } from './database.types' - -type MaybeSession = Session | null - -type SupabaseContext = { - supabase: SupabaseClient - session: MaybeSession -} - -const Context = createContext(undefined) - -export default function SupabaseProvider({ - children, - session, -}: { - children: React.ReactNode - session: MaybeSession -}) { - const supabase = createClientComponentClient() - const router = useRouter() - - useEffect(() => { - const { - data: { subscription }, - } = supabase.auth.onAuthStateChange((_, _session) => { - if (_session?.access_token !== session?.access_token) { - router.refresh() - } - }) - - return () => { - subscription.unsubscribe() - } - }, [router, supabase, session]) - - return ( - - <>{children} - - ) -} - -export const useSupabase = < - Database = any, - SchemaName extends string & keyof Database = 'public' extends keyof Database - ? 'public' - : string & keyof Database ->() => { - let context = useContext(Context) - - if (context === undefined) { - throw new Error('useSupabase must be used inside SupabaseProvider') - } - - return context.supabase as SupabaseClient -} - -export const useSession = () => { - let context = useContext(Context) - - if (context === undefined) { - throw new Error('useSession must be used inside SupabaseProvider') - } - - return context.session -} diff --git a/examples/user-management/nextjs-user-management/middleware.ts b/examples/user-management/nextjs-user-management/middleware.ts deleted file mode 100644 index 9fcf48431e1be..0000000000000 --- a/examples/user-management/nextjs-user-management/middleware.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { createMiddlewareClient } from '@supabase/auth-helpers-nextjs' -import { NextResponse } from 'next/server' - -import type { NextRequest } from 'next/server' - -export async function middleware(req: NextRequest) { - const res = NextResponse.next() - const supabase = createMiddlewareClient({ req, res }) - - const { - data: { user }, - } = await supabase.auth.getUser() - - // if user is signed in and the current path is / redirect the user to /account - if (user && req.nextUrl.pathname === '/') { - return NextResponse.redirect(new URL('/account', req.url)) - } - - // if user is not signed in and the current path is not / redirect the user to / - if (!user && req.nextUrl.pathname !== '/') { - return NextResponse.redirect(new URL('/', req.url)) - } - - return res -} - -export const config = { - matcher: ['/', '/account'], -} diff --git a/examples/user-management/nextjs-user-management/next.config.js b/examples/user-management/nextjs-user-management/next.config.js deleted file mode 100644 index 767719fc4fba5..0000000000000 --- a/examples/user-management/nextjs-user-management/next.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = {} - -module.exports = nextConfig diff --git a/examples/user-management/nextjs-user-management/package-lock.json b/examples/user-management/nextjs-user-management/package-lock.json deleted file mode 100644 index a60260b42b492..0000000000000 --- a/examples/user-management/nextjs-user-management/package-lock.json +++ /dev/null @@ -1,3997 +0,0 @@ -{ - "name": "nextjs-user-management", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "nextjs-user-management", - "version": "0.1.0", - "dependencies": { - "@supabase/auth-helpers-nextjs": "^0.7.1", - "@supabase/auth-ui-react": "^0.4.2", - "@supabase/auth-ui-shared": "^0.1.6", - "@supabase/supabase-js": "^2.26.0", - "@types/node": "20.1.4", - "@types/react": "18.2.6", - "@types/react-dom": "18.2.4", - "encoding": "^0.1.13", - "eslint": "8.40.0", - "eslint-config-next": "13.4.2", - "next": "13.4.2", - "react": "18.2.0", - "react-dom": "18.2.0", - "typescript": "5.0.4" - } - }, - "node_modules/@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz", - "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "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==", - "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", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "node_modules/@next/env": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.2.tgz", - "integrity": "sha512-Wqvo7lDeS0KGwtwg9TT9wKQ8raelmUxt+TQKWvG/xKfcmDXNOtCuaszcfCF8JzlBG1q0VhpI6CKaRMbVPMDWgw==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.2.tgz", - "integrity": "sha512-ZeFWgrxwckxTpYM+ANeUL9E7LOGPbZKmI94LJIjbDU69iEIgqd4WD0l2pVbOJMr/+vgoZmJ9Dx1m0WJ7WScXHA==", - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.2.tgz", - "integrity": "sha512-6BBlqGu3ewgJflv9iLCwO1v1hqlecaIH2AotpKfVUEzUxuuDNJQZ2a4KLb4MBl8T9/vca1YuWhSqtbF6ZuUJJw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.2.tgz", - "integrity": "sha512-iZuYr7ZvGLPjPmfhhMl0ISm+z8EiyLBC1bLyFwGBxkWmPXqdJ60mzuTaDSr5WezDwv0fz32HB7JHmRC6JVHSZg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.2.tgz", - "integrity": "sha512-2xVabFtIge6BJTcJrW8YuUnYTuQjh4jEuRuS2mscyNVOj6zUZkom3CQg+egKOoS+zh2rrro66ffSKIS+ztFJTg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.2.tgz", - "integrity": "sha512-wKRCQ27xCUJx5d6IivfjYGq8oVngqIhlhSAJntgXLt7Uo9sRT/3EppMHqUZRfyuNBTbykEre1s5166z+pvRB5A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.2.tgz", - "integrity": "sha512-NpCa+UVhhuNeaFVUP1Bftm0uqtvLWq2JTm7+Ta48+2Uqj2mNXrDIvyn1DY/ZEfmW/1yvGBRaUAv9zkMkMRixQA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.2.tgz", - "integrity": "sha512-ZWVC72x0lW4aj44e3khvBrj2oSYj1bD0jESmyah3zG/3DplEy/FOtYkMzbMjHTdDSheso7zH8GIlW6CDQnKhmQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.2.tgz", - "integrity": "sha512-pLT+OWYpzJig5K4VKhLttlIfBcVZfr2+Xbjra0Tjs83NQSkFS+y7xx+YhCwvpEmXYLIvaggj2ONPyjbiigOvHQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.2.tgz", - "integrity": "sha512-dhpiksQCyGca4WY0fJyzK3FxMDFoqMb0Cn+uDB+9GYjpU2K5//UGPQlCwiK4JHxuhg8oLMag5Nf3/IPSJNG8jw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.2.tgz", - "integrity": "sha512-O7bort1Vld00cu8g0jHZq3cbSTUNMohOEvYqsqE10+yfohhdPHzvzO+ziJRz4Dyyr/fYKREwS7gR4JC0soSOMw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgr/utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.0.tgz", - "integrity": "sha512-2OCURAmRtdlL8iUDTypMrrxfwe8frXTeXaxGsVOaYtc/wrUyk8Z/0OBetM7cdlsy7ZFWlMX72VogKeh+A4Xcjw==", - "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.2.12", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" - }, - "node_modules/@stitches/core": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", - "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==" - }, - "node_modules/@supabase/auth-helpers-nextjs": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-nextjs/-/auth-helpers-nextjs-0.7.1.tgz", - "integrity": "sha512-IVpXsKkUGZr9KlYEyCNVmUDukALc3Yj+Tp9ALKGK655KwY6+k4kSkhw20lzJqO3T456yINR5hXz+/GQUW/5J+g==", - "dependencies": { - "@supabase/auth-helpers-shared": "0.4.0", - "set-cookie-parser": "^2.6.0" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.19.0" - } - }, - "node_modules/@supabase/auth-helpers-shared": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-shared/-/auth-helpers-shared-0.4.0.tgz", - "integrity": "sha512-5wlCGb4HZ46W2fg8tdi22ZU1GAIOe3YxXrTgvAjWVapNFN+PiH5cFIbz51ZgZRK1TokRZ01pB1GEFy4e+NZE+A==", - "dependencies": { - "jose": "^4.14.3" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.19.0" - } - }, - "node_modules/@supabase/auth-ui-react": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@supabase/auth-ui-react/-/auth-ui-react-0.4.2.tgz", - "integrity": "sha512-NLP1udNtbteWDZYUoJKD/sDzi1BeZpS+CvUk1D0FwHevlVDT1fUf27sVLtrAgchSIQxHwZHTiUPJC9auCF3Zyw==", - "dependencies": { - "@stitches/core": "^1.2.8", - "@supabase/auth-ui-shared": "0.1.6", - "prop-types": "^15.7.2", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.21.0" - } - }, - "node_modules/@supabase/auth-ui-shared": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@supabase/auth-ui-shared/-/auth-ui-shared-0.1.6.tgz", - "integrity": "sha512-dBlP2XR5KSSCBMgkWJMkc2UVA21V5AobKmekwIiHVvyVtzAiFqE5XWJiPV+kMlnRLzFXDeA0Z/CqdKTL/Kbs4A==", - "peerDependencies": { - "@supabase/supabase-js": "^2.21.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.1.tgz", - "integrity": "sha512-bIR1Puae6W+1/MzPfYBWOG/SCWGo4B5CB7c0ZZksvliNEAzhxNBJ0UFKYINcGdGtxG8ZC+1xr3utWpNZNwnoRw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.31.0.tgz", - "integrity": "sha512-YcwlbbNfedlue/HVIXtYBb4fuOrs29gNOTl6AmyxPp4zryRxzFvslVN9kmLDBRUAVU9fnPJh2bgOR3chRjJX5w==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.7.1.tgz", - "integrity": "sha512-xPRYLaZrkLbXNlzmHW6Wtf9hmcBLjjI5xUz2zj8oE2hgXGaYoZBBkpN9bmW9i17Z1f6Ujxa942AqK439XOA36A==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.3.tgz", - "integrity": "sha512-c7TzL81sx2kqyxsxcDduJcHL9KJdCOoKimGP6lQSqiZKX42ATlBZpWbyy9KFGFBjAP4nyopMf5JhPi2ZH9jyNw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "@types/websocket": "^1.0.3", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.1.tgz", - "integrity": "sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.26.0.tgz", - "integrity": "sha512-RXmTPTobaYAwkSobadHZmEVLmzX3SGrtRZIGfLWnLv92VzBRrjuXn0a+bJqKl50GUzsyqPA+j5pod7EwMkcH5A==", - "dependencies": { - "@supabase/functions-js": "^2.1.0", - "@supabase/gotrue-js": "^2.31.0", - "@supabase/postgrest-js": "^1.7.0", - "@supabase/realtime-js": "^2.7.3", - "@supabase/storage-js": "^2.5.1", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/node": { - "version": "20.1.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.4.tgz", - "integrity": "sha512-At4pvmIOki8yuwLtd7BNHl3CiWNbtclUbNtScGx4OHfBd4/oWoJC8KRCIxXwkdndzhxOsPXihrsOoydxBjlE9Q==" - }, - "node_modules/@types/phoenix": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.0.tgz", - "integrity": "sha512-qwfpsHmFuhAS/dVd4uBIraMxRd56vwBUYQGZ6GpXnFuM2XMRFJbIyruFKKlW2daQliuYZwe0qfn/UjFCDKic5g==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", - "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", - "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" - }, - "node_modules/@types/websocket": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", - "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.59.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.5.tgz", - "integrity": "sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw==", - "dependencies": { - "@typescript-eslint/scope-manager": "5.59.5", - "@typescript-eslint/types": "5.59.5", - "@typescript-eslint/typescript-estree": "5.59.5", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.5.tgz", - "integrity": "sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A==", - "dependencies": { - "@typescript-eslint/types": "5.59.5", - "@typescript-eslint/visitor-keys": "5.59.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.59.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.5.tgz", - "integrity": "sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.5.tgz", - "integrity": "sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg==", - "dependencies": { - "@typescript-eslint/types": "5.59.5", - "@typescript-eslint/visitor-keys": "5.59.5", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.5.tgz", - "integrity": "sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA==", - "dependencies": { - "@typescript-eslint/types": "5.59.5", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001487", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001487.tgz", - "integrity": "sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", - "dependencies": { - "node-fetch": "^2.6.11" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-equal": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", - "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.0", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.0.tgz", - "integrity": "sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz", - "integrity": "sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.40.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.2.tgz", - "integrity": "sha512-zjLJ9B9bbeWSo5q+iHfdt8gVYyT+y2BpWDfjR6XMBtFRSMKRGjllDKxnuKBV1q2Y/QpwLM2PXHJTMRyblCmRAg==", - "dependencies": { - "@next/eslint-plugin-next": "13.4.2", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz", - "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==", - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "get-tsconfig": "^4.5.0", - "globby": "^13.1.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.5" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", - "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.5.0.tgz", - "integrity": "sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==", - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "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==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/next": { - "version": "13.4.2", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.2.tgz", - "integrity": "sha512-aNFqLs3a3nTGvLWlO9SUhCuMUHVPSFQC0+tDNGAsDXqx+WJDFSbvc233gOJ5H19SBc7nw36A9LwQepOJ2u/8Kg==", - "dependencies": { - "@next/env": "13.4.2", - "@swc/helpers": "0.5.1", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.1", - "zod": "3.21.4" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=16.8.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "13.4.2", - "@next/swc-darwin-x64": "13.4.2", - "@next/swc-linux-arm64-gnu": "13.4.2", - "@next/swc-linux-arm64-musl": "13.4.2", - "@next/swc-linux-x64-gnu": "13.4.2", - "@next/swc-linux-x64-musl": "13.4.2", - "@next/swc-win32-arm64-msvc": "13.4.2", - "@next/swc-win32-ia32-msvc": "13.4.2", - "@next/swc-win32-x64-msvc": "13.4.2" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "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==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "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" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/run-applescript/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/run-applescript/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/run-applescript/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-applescript/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dependencies": { - "client-only": "0.0.1" - }, - "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 - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/examples/user-management/nextjs-user-management/package.json b/examples/user-management/nextjs-user-management/package.json deleted file mode 100644 index 27ebcd19f6ae6..0000000000000 --- a/examples/user-management/nextjs-user-management/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "nextjs-user-management", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "@supabase/auth-helpers-nextjs": "^0.7.1", - "@supabase/supabase-js": "^2.26.0", - "@supabase/auth-ui-react": "^0.4.2", - "@supabase/auth-ui-shared": "^0.1.6", - "@types/node": "20.1.4", - "@types/react": "18.2.6", - "@types/react-dom": "18.2.4", - "encoding": "^0.1.13", - "eslint": "8.40.0", - "eslint-config-next": "13.4.2", - "next": "13.4.2", - "react": "18.2.0", - "react-dom": "18.2.0", - "typescript": "5.0.4" - } -} diff --git a/examples/user-management/nextjs-user-management/public/next.svg b/examples/user-management/nextjs-user-management/public/next.svg deleted file mode 100644 index 5174b28c565c2..0000000000000 --- a/examples/user-management/nextjs-user-management/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/user-management/nextjs-user-management/public/vercel.svg b/examples/user-management/nextjs-user-management/public/vercel.svg deleted file mode 100644 index d2f84222734f2..0000000000000 --- a/examples/user-management/nextjs-user-management/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/user-management/nextjs-user-management/supabase/.gitignore b/examples/user-management/nextjs-user-management/supabase/.gitignore deleted file mode 100644 index 773c7c3e0a15a..0000000000000 --- a/examples/user-management/nextjs-user-management/supabase/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Supabase -.branches -.temp diff --git a/examples/user-management/nextjs-user-management/supabase/config.toml b/examples/user-management/nextjs-user-management/supabase/config.toml deleted file mode 100644 index 3cccdb575c9d3..0000000000000 --- a/examples/user-management/nextjs-user-management/supabase/config.toml +++ /dev/null @@ -1,69 +0,0 @@ -# A string used to distinguish different Supabase projects on the same host. Defaults to the working -# directory name when running `supabase init`. -project_id = "nextjs-user-management" - -[api] -# Port to use for the API URL. -port = 54321 -# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API -# endpoints. public and storage are always included. -schemas = [] -# Extra schemas to add to the search_path of every request. -extra_search_path = ["extensions"] -# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size -# for accidental or malicious requests. -max_rows = 1000 - -[db] -# Port to use for the local database URL. -port = 54322 -# The database major version to use. This has to be the same as your remote database's. Run `SHOW -# server_version;` on the remote database to check. -major_version = 14 - -[studio] -# Port to use for Supabase Studio. -port = 54323 - -# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they -# are monitored, and you can view the emails that would have been sent from the web interface. -[inbucket] -# Port to use for the email testing server web interface. -port = 54324 -smtp_port = 54325 -pop3_port = 54326 - -[storage] -# The maximum file size allowed (e.g. "5MB", "500KB"). -file_size_limit = "50MiB" - -[auth] -# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used -# in emails. -site_url = "http://localhost:3000" -# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. -additional_redirect_urls = ["https://localhost:3000"] -# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one -# week). -jwt_expiry = 3600 -# Allow/disallow new user signups to your project. -enable_signup = true - -[auth.email] -# Allow/disallow new user signups via email to your project. -enable_signup = true -# If enabled, a user will be required to confirm any email change on both the old, and new email -# addresses. If disabled, only the new email is required to confirm. -double_confirm_changes = true -# If enabled, users need to confirm their email address before signing in. -enable_confirmations = false - -# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, -# `discord`, `facebook`, `github`, `gitlab`, `google`, `twitch`, `twitter`, `slack`, `spotify`. -[auth.external.apple] -enabled = false -client_id = "" -secret = "" -# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, -# or any other third-party OIDC providers. -url = "" diff --git a/examples/user-management/nextjs-user-management/supabase/migrations/20221017024722_init.sql b/examples/user-management/nextjs-user-management/supabase/migrations/20221017024722_init.sql deleted file mode 100644 index 7c102c555faa8..0000000000000 --- a/examples/user-management/nextjs-user-management/supabase/migrations/20221017024722_init.sql +++ /dev/null @@ -1,53 +0,0 @@ --- Create a table for public profiles -create table profiles ( - id uuid references auth.users not null primary key, - updated_at timestamp with time zone, - username text unique, - full_name text, - avatar_url text, - website text, - - constraint username_length check (char_length(username) >= 3) -); --- Set up Row Level Security (RLS) --- See https://supabase.com/docs/guides/auth/row-level-security for more details. -alter table profiles - enable row level security; - -create policy "Public profiles are viewable by everyone." on profiles - for select using (true); - -create policy "Users can insert their own profile." on profiles - for insert with check (auth.uid() = id); - -create policy "Users can update own profile." on profiles - for update using (auth.uid() = id); - --- This trigger automatically creates a profile entry when a new user signs up via Supabase Auth. --- See https://supabase.com/docs/guides/auth/managing-user-data#using-triggers for more details. -create function public.handle_new_user() -returns trigger as $$ -begin - insert into public.profiles (id, full_name, avatar_url) - values (new.id, new.raw_user_meta_data->>'full_name', new.raw_user_meta_data->>'avatar_url'); - return new; -end; -$$ language plpgsql security definer; -create trigger on_auth_user_created - after insert on auth.users - for each row execute procedure public.handle_new_user(); - --- Set up Storage! -insert into storage.buckets (id, name) - values ('avatars', 'avatars'); - --- Set up access controls for storage. --- See https://supabase.com/docs/guides/storage#policy-examples for more details. -create policy "Avatar images are publicly accessible." on storage.objects - for select using (bucket_id = 'avatars'); - -create policy "Anyone can upload an avatar." on storage.objects - for insert with check (bucket_id = 'avatars'); - -create policy "Anyone can update their own avatar." on storage.objects - for update using ( auth.uid() = owner ) with check (bucket_id = 'avatars'); diff --git a/examples/user-management/nextjs-user-management/tsconfig.json b/examples/user-management/nextjs-user-management/tsconfig.json deleted file mode 100644 index e06a4454ab062..0000000000000 --- a/examples/user-management/nextjs-user-management/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/examples/user-management/nuxt3-user-management/.gitignore b/examples/user-management/nuxt3-user-management/.gitignore deleted file mode 100644 index 438cb0860d128..0000000000000 --- a/examples/user-management/nuxt3-user-management/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -node_modules -*.log* -.nuxt -.nitro -.cache -.output -.env -dist diff --git a/examples/user-management/nuxt3-user-management/README.md b/examples/user-management/nuxt3-user-management/README.md deleted file mode 100644 index 122e8558cb0fd..0000000000000 --- a/examples/user-management/nuxt3-user-management/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# Supabase Nuxt User Management - -This repo is a quick sample of how you can get started building apps using Nuxt 3 and Supabase. You can find a step by step guide of how to build out this app in the [Quickstart: Nuxt guide](https://supabase.io/docs/guides/with-nuxt-3). - -This repo will demonstrate how to: -- sign users in with Supabase Auth using [magic link](https://supabase.io/docs/reference/dart/auth-signin#sign-in-with-magic-link) -- store and retrieve data with [Supabase database](https://supabase.io/docs/guides/database) -- store image files in [Supabase storage](https://supabase.io/docs/guides/storage) - -## Getting Started - -Before running this app, you need to create a Supabase project and copy [your credentials](https://supabase.io/docs/guides/with-nuxt-3#get-the-api-keys) to `.env`. - -Run the following command to launch it on `localhost:3000` -```bash -npm run dev -``` - -## Database Schema - -```sql --- Create a table for public "profiles" -create table profiles ( - id uuid references auth.users not null, - updated_at timestamp with time zone, - username text unique, - avatar_url text, - website text, - - primary key (id), - unique(username), - constraint username_length check (char_length(username) >= 3) -); - -alter table profiles enable row level security; - -create policy "Public profiles are viewable by everyone." - on profiles for select - using ( true ); - -create policy "Users can insert their own profile." - on profiles for insert - with check ( auth.uid() = id ); - -create policy "Users can update own profile." - on profiles for update - using ( auth.uid() = id ); - --- Set up Realtime! -begin; - drop publication if exists supabase_realtime; - create publication supabase_realtime; -commit; -alter publication supabase_realtime add table profiles; - --- Set up Storage! -insert into storage.buckets (id, name) -values ('avatars', 'avatars'); - -create policy "Avatar images are publicly accessible." - on storage.objects for select - using ( bucket_id = 'avatars' ); - -create policy "Anyone can upload an avatar." - on storage.objects for insert - with check ( bucket_id = 'avatars' ); -``` \ No newline at end of file diff --git a/examples/user-management/nuxt3-user-management/app.vue b/examples/user-management/nuxt3-user-management/app.vue deleted file mode 100644 index 5e2e7ac09a365..0000000000000 --- a/examples/user-management/nuxt3-user-management/app.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/user-management/nuxt3-user-management/assets/main.css b/examples/user-management/nuxt3-user-management/assets/main.css deleted file mode 100644 index 4c2b333083653..0000000000000 --- a/examples/user-management/nuxt3-user-management/assets/main.css +++ /dev/null @@ -1,421 +0,0 @@ -html, -body { - --custom-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, - Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; - --custom-bg-color: #101010; - --custom-panel-color: #222; - --custom-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.8); - --custom-color: #fff; - --custom-color-brand: #24b47e; - --custom-color-secondary: #666; - --custom-border: 1px solid #333; - --custom-border-radius: 5px; - --custom-spacing: 5px; - - padding: 0; - margin: 0; - font-family: var(--custom-font-family); - background-color: var(--custom-bg-color); -} - -* { - color: var(--custom-color); - font-family: var(--custom-font-family); - box-sizing: border-box; -} - -html, -body, -#__next { - height: 100vh; - width: 100vw; - overflow-x: hidden; -} - -/* Grid */ - -.container { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -.row { - position: relative; - width: 100%; -} - -.row [class^="col"] { - float: left; - margin: 0.5rem 2%; - min-height: 0.125rem; -} - -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-10, -.col-11, -.col-12 { - width: 96%; -} - -.col-1-sm { - width: 4.33%; -} - -.col-2-sm { - width: 12.66%; -} - -.col-3-sm { - width: 21%; -} - -.col-4-sm { - width: 29.33%; -} - -.col-5-sm { - width: 37.66%; -} - -.col-6-sm { - width: 46%; -} - -.col-7-sm { - width: 54.33%; -} - -.col-8-sm { - width: 62.66%; -} - -.col-9-sm { - width: 71%; -} - -.col-10-sm { - width: 79.33%; -} - -.col-11-sm { - width: 87.66%; -} - -.col-12-sm { - width: 96%; -} - -.row::after { - content: ""; - display: table; - clear: both; -} - -.hidden-sm { - display: none; -} - -@media only screen and (min-width: 33.75em) { - /* 540px */ - .container { - width: 80%; - } -} - -@media only screen and (min-width: 45em) { - /* 720px */ - .col-1 { - width: 4.33%; - } - - .col-2 { - width: 12.66%; - } - - .col-3 { - width: 21%; - } - - .col-4 { - width: 29.33%; - } - - .col-5 { - width: 37.66%; - } - - .col-6 { - width: 46%; - } - - .col-7 { - width: 54.33%; - } - - .col-8 { - width: 62.66%; - } - - .col-9 { - width: 71%; - } - - .col-10 { - width: 79.33%; - } - - .col-11 { - width: 87.66%; - } - - .col-12 { - width: 96%; - } - - .hidden-sm { - display: block; - } -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .container { - width: 75%; - max-width: 60rem; - } -} - -/* Forms */ - -label { - display: block; - margin: 5px 0; - color: var(--custom-color-secondary); - font-size: 0.8rem; - text-transform: uppercase; -} - -input { - width: 100%; - border-radius: 5px; - border: var(--custom-border); - padding: 8px; - font-size: 0.9rem; - background-color: var(--custom-bg-color); - color: var(--custom-color); -} - -input[disabled] { - color: var(--custom-color-secondary); -} - -/* Utils */ - -.block { - display: block; - width: 100%; -} - -.inline-block { - display: inline-block; - width: 100%; -} - -.flex { - display: flex; -} - -.flex.column { - flex-direction: column; -} - -.flex.row { - flex-direction: row; -} - -.flex.flex-1 { - flex: 1 1 0; -} - -.flex-end { - justify-content: flex-end; -} - -.flex-center { - justify-content: center; -} - -.items-center { - align-items: center; -} - -.text-sm { - font-size: 0.8rem; - font-weight: 300; -} - -.text-right { - text-align: right; -} - -.font-light { - font-weight: 300; -} - -.opacity-half { - opacity: 50%; -} - -/* Button */ - -button, -.button { - color: var(--custom-color); - border: var(--custom-border); - background-color: var(--custom-bg-color); - display: inline-block; - text-align: center; - border-radius: var(--custom-border-radius); - padding: 0.5rem 1rem; - cursor: pointer; - text-align: center; - font-size: 0.9rem; - text-transform: uppercase; -} - -button.primary, -.button.primary { - background-color: var(--custom-color-brand); - border: 1px solid var(--custom-color-brand); -} - -/* Widgets */ - -.card { - width: 100%; - display: block; - border: var(--custom-border); - border-radius: var(--custom-border-radius); - padding: var(--custom-spacing); -} - -.avatar { - border-radius: var(--custom-border-radius); - overflow: hidden; - max-width: 100%; -} - -.avatar.image { - object-fit: cover; -} - -.avatar.no-image { - background-color: #333; - border: 1px solid rgb(200, 200, 200); - border-radius: 5px; -} - -.footer { - position: absolute; - max-width: 100%; - bottom: 0; - left: 0; - right: 0; - display: flex; - flex-flow: row; - border-top: var(--custom-border); - background-color: var(--custom-bg-color); -} - -.footer div { - padding: var(--custom-spacing); - display: flex; - align-items: center; - width: 100%; -} - -.footer div > img { - height: 20px; - margin-left: 10px; -} - -.footer > div:first-child { - display: none; -} - -.footer > div:nth-child(2) { - justify-content: left; -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .footer > div:first-child { - display: flex; - } - - .footer > div:nth-child(2) { - justify-content: center; - } -} - -@keyframes spin { - from { - transform: rotate(0deg); - } - - to { - transform: rotate(360deg); - } -} - -.mainHeader { - width: 100%; - font-size: 1.3rem; - margin-bottom: 20px; -} - -.avatarPlaceholder { - border: var(--custom-border); - border-radius: var(--custom-border-radius); - width: 35px; - height: 35px; - background-color: rgba(255, 255, 255, 0.2); - display: flex; - align-items: center; - justify-content: center; -} - -.form-widget { - display: flex; - flex-direction: column; - gap: 20px; -} - -.form-widget > .button { - display: flex; - align-items: center; - justify-content: center; - border: none; - background-color: #444444; - text-transform: none !important; - transition: all 0.2s ease; -} - -.form-widget .button:hover { - background-color: #2a2a2a; -} - -.form-widget .button > .loader { - width: 17px; - animation: spin 1s linear infinite; - filter: invert(1); -} diff --git a/examples/user-management/nuxt3-user-management/components/Account.vue b/examples/user-management/nuxt3-user-management/components/Account.vue deleted file mode 100644 index a90af27aae471..0000000000000 --- a/examples/user-management/nuxt3-user-management/components/Account.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - diff --git a/examples/user-management/nuxt3-user-management/components/Auth.vue b/examples/user-management/nuxt3-user-management/components/Auth.vue deleted file mode 100644 index 3119d90704781..0000000000000 --- a/examples/user-management/nuxt3-user-management/components/Auth.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/examples/user-management/nuxt3-user-management/components/Avatar.vue b/examples/user-management/nuxt3-user-management/components/Avatar.vue deleted file mode 100644 index 6d625fbabe8f8..0000000000000 --- a/examples/user-management/nuxt3-user-management/components/Avatar.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/user-management/nuxt3-user-management/nuxt.config.ts b/examples/user-management/nuxt3-user-management/nuxt.config.ts deleted file mode 100644 index 84ab4efcc881e..0000000000000 --- a/examples/user-management/nuxt3-user-management/nuxt.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -// https://v3.nuxtjs.org/api/configuration/nuxt.config -export default defineNuxtConfig({ - devtools: { enabled: true }, - modules: ['@nuxtjs/supabase'], - css: ['@/assets/main.css'], -}) diff --git a/examples/user-management/nuxt3-user-management/package-lock.json b/examples/user-management/nuxt3-user-management/package-lock.json deleted file mode 100644 index 785dea90b50d5..0000000000000 --- a/examples/user-management/nuxt3-user-management/package-lock.json +++ /dev/null @@ -1,10971 +0,0 @@ -{ - "name": "nuxt3-user-management", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "hasInstallScript": true, - "devDependencies": { - "@nuxt/devtools": "^0.5.5", - "@nuxtjs/supabase": "^0.3.6", - "@types/node": "^18", - "nuxt": "^3.5.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@antfu/utils": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.4.tgz", - "integrity": "sha512-qe8Nmh9rYI/HIspLSTwtbMFPj6dISG6+dJnOguTlPNXtCvS2uezdxscVBb7/3DrmNbQK49TDqpkSQ1chbRGdpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", - "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/standalone": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.22.5.tgz", - "integrity": "sha512-6Lwhzral4YDEbIM3dBC8/w0BMDvOosGBGaJWSORLkerx8byawkmwwzXKUB0jGlI1Zp90+cK2uyTl62UPtLbUjQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.0.tgz", - "integrity": "sha512-9CB/MKf/wdvbfkUdfrj+OkEwZ5b7rws0eogJ4293h+7b6KX5toPwym+VQKmILafNB9YiehqY0DlNrDcDhdWHSQ==", - "dev": true, - "dependencies": { - "mime": "^3.0.0" - } - }, - "node_modules/@esbuild-kit/cjs-loader": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.2.tgz", - "integrity": "sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==", - "dev": true, - "dependencies": { - "@esbuild-kit/core-utils": "^3.0.0", - "get-tsconfig": "^4.4.0" - } - }, - "node_modules/@esbuild-kit/core-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.1.0.tgz", - "integrity": "sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==", - "dev": true, - "dependencies": { - "esbuild": "~0.17.6", - "source-map-support": "^0.5.21" - } - }, - "node_modules/@esbuild-kit/esm-loader": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.5.5.tgz", - "integrity": "sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==", - "dev": true, - "dependencies": { - "@esbuild-kit/core-utils": "^3.0.0", - "get-tsconfig": "^4.4.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", - "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", - "dev": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@netlify/functions": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-1.6.0.tgz", - "integrity": "sha512-6G92AlcpFrQG72XU8YH8pg94eDnq7+Q0YJhb8x4qNpdGsvuzvrfHWBmqFGp/Yshmv4wex9lpsTRZOocdrA2erQ==", - "dev": true, - "dependencies": { - "is-promise": "^4.0.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nuxt/devalue": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nuxt/devalue/-/devalue-2.0.2.tgz", - "integrity": "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==", - "dev": true - }, - "node_modules/@nuxt/devtools": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-0.5.5.tgz", - "integrity": "sha512-YJDAsjfyvPV7WVyirfIzrNi37qqLJX61ZkOMN6hplyknky7kBapcG3VNq8WfVqY2Ce02sqF4bsEGlpG/F64y0g==", - "dev": true, - "dependencies": { - "@nuxt/devtools-kit": "0.5.5", - "@nuxt/devtools-wizard": "0.5.5", - "@nuxt/kit": "^3.5.1", - "birpc": "^0.2.11", - "consola": "^3.1.0", - "execa": "^7.1.1", - "fast-folder-size": "^1.7.1", - "fast-glob": "^3.2.12", - "get-port-please": "^3.0.1", - "global-dirs": "^3.0.1", - "h3": "^1.6.6", - "hookable": "^5.5.3", - "image-meta": "^0.1.1", - "is-installed-globally": "^0.4.0", - "launch-editor": "^2.6.0", - "local-pkg": "^0.4.3", - "magicast": "^0.2.8", - "nypm": "^0.2.0", - "pacote": "^15.2.0", - "pathe": "^1.1.0", - "perfect-debounce": "^1.0.0", - "picocolors": "^1.0.0", - "pkg-types": "^1.0.3", - "rc9": "^2.1.0", - "semver": "^7.5.1", - "sirv": "^2.0.3", - "unimport": "^3.0.7", - "vite-plugin-inspect": "^0.7.28", - "vite-plugin-vue-inspector": "^3.4.2", - "wait-on": "^7.0.1", - "which": "^3.0.1", - "ws": "^8.13.0" - }, - "bin": { - "devtools": "cli.mjs" - }, - "peerDependencies": { - "nuxt": "^3.5.1", - "vite": "*" - } - }, - "node_modules/@nuxt/devtools-kit": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-0.5.5.tgz", - "integrity": "sha512-wyoNtH4QxTAWJPL/LSKYNkiIh/w4lmyRnMe7I22BFWHYOCKe9Oz0E2pPkKvWyM1oFR1Ysq2n1yVtTvUx6UQ/Bw==", - "dev": true, - "dependencies": { - "@nuxt/kit": "^3.5.1", - "@nuxt/schema": "^3.5.1", - "execa": "^7.1.1" - }, - "peerDependencies": { - "nuxt": "^3.5.1", - "vite": "*" - } - }, - "node_modules/@nuxt/devtools-wizard": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-0.5.5.tgz", - "integrity": "sha512-jAtyecgP2Yp8zg+Q1sg5p+lKt4n9R78PF1DOCxNax0IqiAH8CjeDUPtDRNBrGU+iSocSFIFU2v0S5/iDbABouA==", - "dev": true, - "dependencies": { - "consola": "^3.1.0", - "diff": "^5.1.0", - "execa": "^7.1.1", - "global-dirs": "^3.0.1", - "magicast": "^0.2.8", - "pathe": "^1.1.0", - "picocolors": "^1.0.0", - "pkg-types": "^1.0.3", - "prompts": "^2.4.2", - "rc9": "^2.1.0", - "semver": "^7.5.1" - }, - "bin": { - "devtools-wizard": "cli.mjs" - } - }, - "node_modules/@nuxt/kit": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.5.3.tgz", - "integrity": "sha512-QzoOGqa1zjKQfg7Y50TrrFAL9DhtIpYYs10gihcM1ISPrn9ROht+VEjqsaMvT+L8JuQbNf8wDYl8qzsdWGU29Q==", - "dev": true, - "dependencies": { - "@nuxt/schema": "3.5.3", - "c12": "^1.4.1", - "consola": "^3.1.0", - "defu": "^6.1.2", - "globby": "^13.1.4", - "hash-sum": "^2.0.0", - "ignore": "^5.2.4", - "jiti": "^1.18.2", - "knitwork": "^1.0.0", - "mlly": "^1.3.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "scule": "^1.0.0", - "semver": "^7.5.1", - "unctx": "^2.3.1", - "unimport": "^3.0.7", - "untyped": "^1.3.2" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/@nuxt/schema": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.5.3.tgz", - "integrity": "sha512-Tnon4mYfJZmsCtx4NZ9A+qjwo4DcZ6tERpEhYBY81PX7AiJ+hFPBFR1qR32Tff66/qJjZg5UXj6H9AdzwEYr2w==", - "dev": true, - "dependencies": { - "defu": "^6.1.2", - "hookable": "^5.5.3", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "postcss-import-resolver": "^2.0.0", - "std-env": "^3.3.3", - "ufo": "^1.1.2", - "unimport": "^3.0.7", - "untyped": "^1.3.2" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/@nuxt/telemetry": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.2.0.tgz", - "integrity": "sha512-Z2UmPkBy5WjxvHKuUcl1X6vKWnIyWSP+9UGde1F+MzzZxYgAQybFud1uL2B3KCowxZdoqT1hd2WklV7EtyCwrQ==", - "dev": true, - "dependencies": { - "@nuxt/kit": "^3.3.3", - "chalk": "^5.2.0", - "ci-info": "^3.8.0", - "consola": "^3.0.1", - "create-require": "^1.1.1", - "defu": "^6.1.2", - "destr": "^1.2.2", - "dotenv": "^16.0.3", - "fs-extra": "^10.1.0", - "git-url-parse": "^13.1.0", - "inquirer": "^9.1.5", - "is-docker": "^3.0.0", - "jiti": "^1.18.2", - "mri": "^1.2.0", - "nanoid": "^4.0.2", - "node-fetch": "^3.3.1", - "ofetch": "^1.0.1", - "parse-git-config": "^3.0.0", - "rc9": "^2.1.0", - "std-env": "^3.3.2" - }, - "bin": { - "nuxt-telemetry": "bin/nuxt-telemetry.mjs" - } - }, - "node_modules/@nuxt/telemetry/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@nuxt/telemetry/node_modules/node-fetch": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/@nuxt/ui-templates": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@nuxt/ui-templates/-/ui-templates-1.1.1.tgz", - "integrity": "sha512-PjVETP7+iZXAs5Q8O4ivl4t6qjWZMZqwiTVogUXHoHGZZcw7GZW3u3tzfYfE1HbzyYJfr236IXqQ02MeR8Fz2w==", - "dev": true - }, - "node_modules/@nuxt/vite-builder": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.5.3.tgz", - "integrity": "sha512-7zEKpGh3iWGRDwbWUa8eRxdLMxZtPzetelmdmXPjtYKGwUebZOcBhpeJ+VgJKOIf4OEj9E7BZS+it/Ji9UG9qw==", - "dev": true, - "dependencies": { - "@nuxt/kit": "3.5.3", - "@rollup/plugin-replace": "^5.0.2", - "@vitejs/plugin-vue": "^4.2.3", - "@vitejs/plugin-vue-jsx": "^3.0.1", - "autoprefixer": "^10.4.14", - "clear": "^0.1.0", - "consola": "^3.1.0", - "cssnano": "^6.0.1", - "defu": "^6.1.2", - "esbuild": "^0.17.19", - "escape-string-regexp": "^5.0.0", - "estree-walker": "^3.0.3", - "externality": "^1.0.0", - "fs-extra": "^11.1.1", - "get-port-please": "^3.0.1", - "h3": "^1.6.6", - "knitwork": "^1.0.0", - "magic-string": "^0.30.0", - "mlly": "^1.3.0", - "ohash": "^1.1.2", - "pathe": "^1.1.1", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.0.3", - "postcss": "^8.4.24", - "postcss-import": "^15.1.0", - "postcss-url": "^10.1.3", - "rollup-plugin-visualizer": "^5.9.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "ufo": "^1.1.2", - "unplugin": "^1.3.1", - "vite": "~4.3.9", - "vite-node": "^0.31.4", - "vite-plugin-checker": "^0.6.0", - "vue-bundle-renderer": "^1.0.3" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0" - }, - "peerDependencies": { - "vue": "^3.3.4" - } - }, - "node_modules/@nuxtjs/supabase": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@nuxtjs/supabase/-/supabase-0.3.7.tgz", - "integrity": "sha512-Hn4hryNuZYqWfbNvi44sN+Uxx5GcevhHwYzVKEZX23IKy1PSbY+h4mRe2MGoTSpV8MdNvyC0+ah2WoV50BIlrg==", - "dev": true, - "dependencies": { - "@nuxt/kit": "^3.5.2", - "@supabase/supabase-js": "2.24.0", - "defu": "^6.1.2", - "pathe": "^1.1.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", - "dev": true - }, - "node_modules/@rollup/plugin-alias": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.0.0.tgz", - "integrity": "sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==", - "dev": true, - "dependencies": { - "slash": "^4.0.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.1.0.tgz", - "integrity": "sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.27.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@rollup/plugin-commonjs/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/plugin-inject": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.3.tgz", - "integrity": "sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "estree-walker": "^2.0.2", - "magic-string": "^0.27.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-inject/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@rollup/plugin-inject/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz", - "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "magic-string": "^0.27.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-replace/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/plugin-terser": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.3.tgz", - "integrity": "sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==", - "dev": true, - "dependencies": { - "serialize-javascript": "^6.0.1", - "smob": "^1.0.0", - "terser": "^5.17.4" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.x || ^3.x" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-wasm": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-wasm/-/plugin-wasm-6.1.3.tgz", - "integrity": "sha512-7ItTTeyauE6lwdDtQWceEHZ9+txbi4RRy0mYPFn9BW7rD7YdgBDu7HTHsLtHrRzJc313RM/1m6GKgV3np/aEaw==", - "dev": true, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.1.tgz", - "integrity": "sha512-bIR1Puae6W+1/MzPfYBWOG/SCWGo4B5CB7c0ZZksvliNEAzhxNBJ0UFKYINcGdGtxG8ZC+1xr3utWpNZNwnoRw==", - "dev": true, - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.29.0.tgz", - "integrity": "sha512-QJepUxSXpgcyMhDtEusRyGtCcYSqy4wRDf3BQGqLUDaU/sRRclO07NCHW8nBqGW6KZZ6oNLfKX2AQz621dmIPw==", - "dev": true, - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.7.0.tgz", - "integrity": "sha512-wLADHZ5jm7LljF4GigK0H2vc1wGupBY2hGYfb4fVo0UuyMftmA6tOYy+ZpMH/vPq01CUFwXGwvIke6kyqh/QDg==", - "dev": true, - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.3.tgz", - "integrity": "sha512-c7TzL81sx2kqyxsxcDduJcHL9KJdCOoKimGP6lQSqiZKX42ATlBZpWbyy9KFGFBjAP4nyopMf5JhPi2ZH9jyNw==", - "dev": true, - "dependencies": { - "@types/phoenix": "^1.5.4", - "@types/websocket": "^1.0.3", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.1.tgz", - "integrity": "sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw==", - "dev": true, - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.24.0.tgz", - "integrity": "sha512-zrAm+hp6DBICqZ7xVPk+KofmlfjJWQzXuf2sHAyPz8XVjpha84z2OVWcow2aI10YkMOrPwhRtBBQYJOnh/fx2w==", - "dev": true, - "dependencies": { - "@supabase/functions-js": "^2.1.0", - "@supabase/gotrue-js": "^2.26.0", - "@supabase/postgrest-js": "^1.7.0", - "@supabase/realtime-js": "^2.7.2", - "@supabase/storage-js": "^2.5.1", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "18.16.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", - "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==", - "dev": true - }, - "node_modules/@types/phoenix": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.0.tgz", - "integrity": "sha512-qwfpsHmFuhAS/dVd4uBIraMxRd56vwBUYQGZ6GpXnFuM2XMRFJbIyruFKKlW2daQliuYZwe0qfn/UjFCDKic5g==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/websocket": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", - "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@unhead/dom": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.1.27.tgz", - "integrity": "sha512-sUrzpKIVvFp8TFx1mgp5t0k5ts1+KmgjMgRRuvRTZMBMVeGQRLSuL3uo34iwuFmKxeI6BXT5lVBk5H02c1XdGg==", - "dev": true, - "dependencies": { - "@unhead/schema": "1.1.27", - "@unhead/shared": "1.1.27" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/@unhead/schema": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.1.27.tgz", - "integrity": "sha512-S+xhPoBxBXDrsW9ltcF9Cv3cntMbSx+dfSmE7RNyDhogqHd3+lDEV2dnQpHKWTGjujwwMCALV5SADunAn785bw==", - "dev": true, - "dependencies": { - "hookable": "^5.5.3", - "zhead": "^2.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/@unhead/shared": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.1.27.tgz", - "integrity": "sha512-ElZ5WcMnhVlg44OAwTNq4XBkNePcL/BHZk7WKFcqpeGTJrEvSfs40lGJoo4sMsgDAd+XQdhJDd4dJu48jQB3kg==", - "dev": true, - "dependencies": { - "@unhead/schema": "1.1.27" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/@unhead/ssr": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.1.27.tgz", - "integrity": "sha512-lKXH2ofs8L+yAbHgkRP17bIQ45XaG2RSl5UCMsSIW2Ev4kiTGPbbcQKOBgsi2uEllgdMk5peKDyaWD9xheYlEA==", - "dev": true, - "dependencies": { - "@unhead/schema": "1.1.27", - "@unhead/shared": "1.1.27" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/@unhead/vue": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.1.27.tgz", - "integrity": "sha512-ibe7/QW4ZtyCI/et/fI3CnwC+oxqp+7LrhmuLUS93ib1Sl70D51dcAy9eAvh0MG7wWUyMUrf3T95MRifJo7uzA==", - "dev": true, - "dependencies": { - "@unhead/schema": "1.1.27", - "@unhead/shared": "1.1.27", - "hookable": "^5.5.3", - "unhead": "1.1.27" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - }, - "peerDependencies": { - "vue": ">=2.7 || >=3" - } - }, - "node_modules/@vercel/nft": { - "version": "0.22.6", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.22.6.tgz", - "integrity": "sha512-gTsFnnT4mGxodr4AUlW3/urY+8JKKB452LwF3m477RFUJTAaDmcz2JqFuInzvdybYIeyIv1sSONEJxsxnbQ5JQ==", - "dev": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.5", - "@rollup/pluginutils": "^4.0.0", - "acorn": "^8.6.0", - "async-sema": "^3.1.1", - "bindings": "^1.4.0", - "estree-walker": "2.0.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.2", - "node-gyp-build": "^4.2.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "nft": "out/cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@vercel/nft/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@vercel/nft/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@vercel/nft/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@vercel/nft/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vercel/nft/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@vitejs/plugin-vue": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz", - "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==", - "dev": true, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vitejs/plugin-vue-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.0.1.tgz", - "integrity": "sha512-+Jb7ggL48FSPS1uhPnJbJwWa9Sr90vQ+d0InW+AhBM22n+cfuYqJZDckBc+W3QSHe1WDvewMZfa4wZOtk5pRgw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.20.7", - "@babel/plugin-transform-typescript": "^7.20.7", - "@vue/babel-plugin-jsx": "^1.1.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.0.0", - "vue": "^3.0.0" - } - }, - "node_modules/@vue-macros/common": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.4.0.tgz", - "integrity": "sha512-Wnpk6OVPYw7ZrrShOS7RZL5AINFbuQWfkNCVWVESSPY+8id75YOKGzMs4X5YcNayywdSGEvV7ntVJ2RQ+ez21A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.4", - "@rollup/pluginutils": "^5.0.2", - "@vue/compiler-sfc": "^3.3.4", - "ast-kit": "^0.6.2", - "local-pkg": "^0.4.3", - "magic-string-ast": "^0.1.2" - }, - "engines": { - "node": ">=16.14.0" - }, - "peerDependencies": { - "vue": "^2.7.0 || ^3.2.25" - }, - "peerDependenciesMeta": { - "vue": { - "optional": true - } - } - }, - "node_modules/@vue/babel-helper-vue-transform-on": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", - "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", - "dev": true - }, - "node_modules/@vue/babel-plugin-jsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", - "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "@vue/babel-helper-vue-transform-on": "^1.0.2", - "camelcase": "^6.0.0", - "html-tags": "^3.1.0", - "svg-tags": "^1.0.0" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", - "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-core/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@vue/compiler-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", - "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", - "dev": true, - "dependencies": { - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", - "dev": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", - "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==", - "dev": true - }, - "node_modules/@vue/reactivity": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", - "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", - "dev": true, - "dependencies": { - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" - } - }, - "node_modules/@vue/reactivity-transform/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", - "dev": true, - "dependencies": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", - "dev": true, - "dependencies": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", - "dev": true, - "dependencies": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" - }, - "peerDependencies": { - "vue": "3.3.4" - } - }, - "node_modules/@vue/shared": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/archiver": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", - "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.3", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/ast-kit": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-0.6.5.tgz", - "integrity": "sha512-XCg0VWvmWU2T/6aMp8VRfJWZ6LZv1P0o8otWY7RAGtfKj0qGi45vtnKNkltJhu9tmbQNZxv+gJA4o7FtLDfmWg==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.22.4", - "@rollup/pluginutils": "^5.0.2", - "pathe": "^1.1.0" - }, - "engines": { - "node": ">=16.14.0" - } - }, - "node_modules/ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ast-walker-scope": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.4.2.tgz", - "integrity": "sha512-vdCU9JvpsrxWxvJiRHAr8If8cu07LWJXDPhkqLiP4ErbN1fu/mK623QGmU4Qbn2Nq4Mx0vR/Q017B6+HcHg1aQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.22.4", - "@babel/types": "^7.22.4" - }, - "engines": { - "node": ">=16.14.0" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/async-sema": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", - "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "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, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/birpc": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.12.tgz", - "integrity": "sha512-6Wz9FXuJ/FE4gDH+IGQhrYdalAvAQU1Yrtcu1UlMk3+9mMXxIRXiL+MxUcGokso42s+Fy+YoUXGLOdOs0siV3A==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "dev": true - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.8.tgz", - "integrity": "sha512-j+7xYe+v+q2Id9qbBeCI8WX5NmZSRe8es1+0xntD/+gaWXznP8tFEkv5IgSaHf5dS1YwVMbX/4W6m937mj+wQw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001502", - "electron-to-chromium": "^1.4.428", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "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==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/c12": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/c12/-/c12-1.4.1.tgz", - "integrity": "sha512-0x7pWfLZpZsgtyotXtuepJc0rZYE0Aw8PwNAXs0jSG9zq6Sl5xmbWnFqfmRY01ieZLHNbvneSFm9/x88CvzAuw==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.3", - "defu": "^6.1.2", - "dotenv": "^16.0.3", - "giget": "^1.1.2", - "jiti": "^1.18.2", - "mlly": "^1.2.0", - "ohash": "^1.1.1", - "pathe": "^1.1.0", - "perfect-debounce": "^0.1.3", - "pkg-types": "^1.0.2", - "rc9": "^2.1.0" - } - }, - "node_modules/c12/node_modules/perfect-debounce": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-0.1.3.tgz", - "integrity": "sha512-NOT9AcKiDGpnV/HBhI22Str++XWcErO/bALvHCuhv33owZW/CjH8KAFLZDCmu3727sihe0wTxpDhyGc6M8qacQ==", - "dev": true - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001502", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001502.tgz", - "integrity": "sha512-AZ+9tFXw1sS0o0jcpJQIXvFTOB/xGiQ4OQ2t98QX3NDn2EZTSRBC801gxrsGgViuq2ak/NLkNgSNEPtCr5lfKg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/citty": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.1.tgz", - "integrity": "sha512-fL/EEp9TyXlNkgYFQYNqtMJhnAk2tAq8lCST7O5LPn1NrzWPsOKE5wafR7J+8W87oxqolpxNli+w7khq5WP7tg==", - "dev": true - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/clear": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clear/-/clear-0.1.0.tgz", - "integrity": "sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz", - "integrity": "sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/clipboardy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", - "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", - "dev": true, - "dependencies": { - "arch": "^2.2.0", - "execa": "^5.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/clipboardy/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/clipboardy/node_modules/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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/clipboardy/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clipboardy/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compress-commons": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", - "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/consola": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.1.0.tgz", - "integrity": "sha512-rrrJE6rP0qzl/Srg+C9x/AE5Kxfux7reVm1Wh0wCjuXvih6DqZgqDZe8auTD28fzJ9TF0mHlSDrPpWlujQRo1Q==", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie-es": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.0.0.tgz", - "integrity": "sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.11" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", - "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz", - "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^6.0.1", - "lilconfig": "^2.1.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz", - "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^4.0.0", - "postcss-calc": "^9.0.0", - "postcss-colormin": "^6.0.0", - "postcss-convert-values": "^6.0.0", - "postcss-discard-comments": "^6.0.0", - "postcss-discard-duplicates": "^6.0.0", - "postcss-discard-empty": "^6.0.0", - "postcss-discard-overridden": "^6.0.0", - "postcss-merge-longhand": "^6.0.0", - "postcss-merge-rules": "^6.0.1", - "postcss-minify-font-values": "^6.0.0", - "postcss-minify-gradients": "^6.0.0", - "postcss-minify-params": "^6.0.0", - "postcss-minify-selectors": "^6.0.0", - "postcss-normalize-charset": "^6.0.0", - "postcss-normalize-display-values": "^6.0.0", - "postcss-normalize-positions": "^6.0.0", - "postcss-normalize-repeat-style": "^6.0.0", - "postcss-normalize-string": "^6.0.0", - "postcss-normalize-timing-functions": "^6.0.0", - "postcss-normalize-unicode": "^6.0.0", - "postcss-normalize-url": "^6.0.0", - "postcss-normalize-whitespace": "^6.0.0", - "postcss-ordered-values": "^6.0.0", - "postcss-reduce-initial": "^6.0.0", - "postcss-reduce-transforms": "^6.0.0", - "postcss-svgo": "^6.0.0", - "postcss-unique-selectors": "^6.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz", - "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dev": true, - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, - "node_modules/cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defu": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.2.tgz", - "integrity": "sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==", - "dev": true - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destr": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/destr/-/destr-1.2.2.tgz", - "integrity": "sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA==", - "dev": true - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/devalue": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", - "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", - "dev": true - }, - "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-prop": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-7.2.0.tgz", - "integrity": "sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==", - "dev": true, - "dependencies": { - "type-fest": "^2.11.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dot-prop/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "16.1.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz", - "integrity": "sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexer2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.429", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.429.tgz", - "integrity": "sha512-COua8RvN548KwPFzKMrTjFbmDsQRgdi0zSAhmo70TwC1tfLOSqq8p09n+GkdF5buvzE/NEYn1dP3itbfhun9gg==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "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==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/esno": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/esno/-/esno-0.16.3.tgz", - "integrity": "sha512-6slSBEV1lMKcX13DBifvnDFpNno5WXhw4j/ff7RI0y51BZiDqEe5dNhhjhIQ3iCOQuzsm2MbVzmwqbN78BBhPg==", - "dev": true, - "dependencies": { - "tsx": "^3.2.1" - }, - "bin": { - "esno": "esno.js" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/execa": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/externality": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/externality/-/externality-1.0.2.tgz", - "integrity": "sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==", - "dev": true, - "dependencies": { - "enhanced-resolve": "^5.14.1", - "mlly": "^1.3.0", - "pathe": "^1.1.1", - "ufo": "^1.1.2" - } - }, - "node_modules/fast-folder-size": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/fast-folder-size/-/fast-folder-size-1.7.1.tgz", - "integrity": "sha512-YnQ/pHgeSxpTKnJ/LVe/0mWP3lafWmPFpcCVRLo2s251lD+qaksG2Ce1a7RTuLpN5W6PgFA4T5NYpW7sxWmDXA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "unzipper": "^0.10.11" - }, - "bin": { - "fast-folder-size": "cli.js" - } - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-uri-to-path": { - "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 - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.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==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fstream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fstream/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fstream/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port-please": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.0.1.tgz", - "integrity": "sha512-R5pcVO8Z1+pVDu8Ml3xaJCEkBiiy1VQN9za0YqH8GIi1nIqD4IzQhzY6dDzMRtdS1lyiGlucRzm8IN8wtLIXng==", - "dev": true - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-tsconfig": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.6.0.tgz", - "integrity": "sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/giget": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.2.tgz", - "integrity": "sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==", - "dev": true, - "dependencies": { - "colorette": "^2.0.19", - "defu": "^6.1.2", - "https-proxy-agent": "^5.0.1", - "mri": "^1.2.0", - "node-fetch-native": "^1.0.2", - "pathe": "^1.1.0", - "tar": "^6.1.13" - }, - "bin": { - "giget": "dist/cli.mjs" - } - }, - "node_modules/git-config-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-2.0.0.tgz", - "integrity": "sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", - "dev": true, - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" - } - }, - "node_modules/git-url-parse": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz", - "integrity": "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==", - "dev": true, - "dependencies": { - "git-up": "^7.0.0" - } - }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", - "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/gzip-size": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz", - "integrity": "sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/h3": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.6.6.tgz", - "integrity": "sha512-DWu2s11OuuO9suEkX99dXaJoxd1RgPXiM4iDmLdrhGV63GLoav13f3Kdd5/Rw7xNKzhzn2+F2dleQjG66SnMPQ==", - "dev": true, - "dependencies": { - "cookie-es": "^1.0.0", - "defu": "^6.1.2", - "destr": "^1.2.2", - "iron-webcrypto": "^0.7.0", - "radix3": "^1.0.1", - "ufo": "^1.1.2", - "uncrypto": "^0.1.2" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", - "dev": true - }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-shutdown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", - "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", - "dev": true, - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-meta": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.1.1.tgz", - "integrity": "sha512-+oXiHwOEPr1IE5zY0tcBLED/CYcre15J4nwL50x3o0jxWqEkyjrusiKP3YSU+tr9fvJp33ZcP5Gpj2295g3aEw==", - "dev": true, - "engines": { - "node": ">=10.18.0" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer": { - "version": "9.2.7", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.7.tgz", - "integrity": "sha512-Bf52lnfvNxGPJPltiNO2tLBp3zC339KNlGMqOkW+dsvNikBhcVDK5kqU2lVX2FTPzuXUFX5WJDlsw//w3ZwoTw==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^5.2.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.0.0", - "external-editor": "^3.0.3", - "figures": "^5.0.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/ioredis": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", - "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", - "dev": true, - "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/ip-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", - "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/iron-webcrypto": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-0.7.0.tgz", - "integrity": "sha512-WkX32iTcwd79ZsWRPP5wq1Jq6XXfPwO783ZiUBY8uMw4/AByx5WvBmxvYGnpVt6AOVJ0F41Qo420r8lIneT9Wg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/brc-dd" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-primitive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", - "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "dependencies": { - "protocols": "^2.0.1" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/joi": { - "version": "17.9.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", - "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "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==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/knitwork": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.0.0.tgz", - "integrity": "sha512-dWl0Dbjm6Xm+kDxhPQJsCBTxrJzuGl0aP9rhr+TG8D3l+GL90N8O8lYUi7dTSAN2uuDqCtNgb6aEuQH5wsiV8Q==", - "dev": true - }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "dev": true - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true - }, - "node_modules/listhen": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.0.4.tgz", - "integrity": "sha512-r94k7kmXHb8e8wpv7+UP/qqhhD+j/9TgX19QKim2cEJuWCLwlTw+5BkCFmYyjhQ7Bt8KdVun/2DcD7MF2Fe3+g==", - "dev": true, - "dependencies": { - "clipboardy": "^3.0.0", - "colorette": "^2.0.19", - "defu": "^6.1.2", - "get-port-please": "^3.0.1", - "http-shutdown": "^1.2.2", - "ip-regex": "^5.0.0", - "node-forge": "^1.3.1", - "ufo": "^1.1.1" - } - }, - "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "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 - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", - "dev": true - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/magic-string-ast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.1.2.tgz", - "integrity": "sha512-P53AZrzq7hclCU6HWj88xNZHmP15DKjMmK/vBytO1qnpYP3ul4IEZlyCE0aU3JRnmgWmZPmoTKj4Bls7v0pMyA==", - "dev": true, - "dependencies": { - "magic-string": "^0.30.0" - }, - "engines": { - "node": ">=14.19.0" - } - }, - "node_modules/magicast": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.2.9.tgz", - "integrity": "sha512-S1WBXLSVKa34X+Bv7pfA8Umqc1BoglsqzWaQcyuexDc0cjgnERaFTSHbne2OfT27lXYxt/B/sV/2Kh0HaSQkfg==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.22.4", - "@babel/types": "^7.22.4", - "recast": "^0.23.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true - }, - "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mlly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.3.0.tgz", - "integrity": "sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.2", - "pathe": "^1.1.0", - "pkg-types": "^1.0.3", - "ufo": "^1.1.2" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/nanoid": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", - "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^14 || ^16 || >=18" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node_modules/nitropack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.4.1.tgz", - "integrity": "sha512-CJzt5e5E8BKreTW+iqqGSFLPc1Yblcg2fiit8L6JtpCDl3aE9/rHGsv/w9oLV4FtsoC2qjTD2qoeCGp80mHw5Q==", - "dev": true, - "dependencies": { - "@cloudflare/kv-asset-handler": "^0.3.0", - "@netlify/functions": "^1.6.0", - "@rollup/plugin-alias": "^5.0.0", - "@rollup/plugin-commonjs": "^24.1.0", - "@rollup/plugin-inject": "^5.0.3", - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.2", - "@rollup/plugin-replace": "^5.0.2", - "@rollup/plugin-terser": "^0.4.2", - "@rollup/plugin-wasm": "^6.1.3", - "@rollup/pluginutils": "^5.0.2", - "@types/http-proxy": "^1.17.11", - "@vercel/nft": "^0.22.6", - "archiver": "^5.3.1", - "c12": "^1.4.1", - "chalk": "^5.2.0", - "chokidar": "^3.5.3", - "citty": "^0.1.1", - "consola": "^3.1.0", - "cookie-es": "^1.0.0", - "defu": "^6.1.2", - "destr": "^1.2.2", - "dot-prop": "^7.2.0", - "esbuild": "^0.17.19", - "escape-string-regexp": "^5.0.0", - "etag": "^1.8.1", - "fs-extra": "^11.1.1", - "globby": "^13.1.4", - "gzip-size": "^7.0.0", - "h3": "^1.6.6", - "hookable": "^5.5.3", - "http-proxy": "^1.18.1", - "is-primitive": "^3.0.1", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "knitwork": "^1.0.0", - "listhen": "^1.0.4", - "mime": "^3.0.0", - "mlly": "^1.2.1", - "mri": "^1.2.0", - "node-fetch-native": "^1.1.1", - "ofetch": "^1.0.1", - "ohash": "^1.1.2", - "openapi-typescript": "^6.2.4", - "pathe": "^1.1.0", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.0.3", - "pretty-bytes": "^6.1.0", - "radix3": "^1.0.1", - "rollup": "^3.21.8", - "rollup-plugin-visualizer": "^5.9.0", - "scule": "^1.0.0", - "semver": "^7.5.1", - "serve-placeholder": "^2.0.1", - "serve-static": "^1.15.0", - "source-map-support": "^0.5.21", - "std-env": "^3.3.3", - "ufo": "^1.1.2", - "unenv": "^1.4.1", - "unimport": "^3.0.6", - "unstorage": "^1.6.0" - }, - "bin": { - "nitro": "dist/cli.mjs", - "nitropack": "dist/cli.mjs" - }, - "engines": { - "node": "^14.16.0 || ^16.11.0 || >=17.0.0" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch-native": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.2.0.tgz", - "integrity": "sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==", - "dev": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nuxi": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/nuxi/-/nuxi-3.5.3.tgz", - "integrity": "sha512-H0/Nj0ulUN8PrSvr6H433Awt4hNT5uaN57041QfknYVXlUce7yEbl/NcpNtnneAHYn2hMUZL9/nJCVkZ1xTvHA==", - "dev": true, - "bin": { - "nuxi": "bin/nuxi.mjs" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/nuxt": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.5.3.tgz", - "integrity": "sha512-fG39BZ5N5ATtmx2vuxN8APQPSlSsCDpfkJ0k581gMc7eFztqrBzPncZX5w3RQLW7AiGBE2yYEfqiwC6AVODBBg==", - "dev": true, - "dependencies": { - "@nuxt/devalue": "^2.0.2", - "@nuxt/kit": "3.5.3", - "@nuxt/schema": "3.5.3", - "@nuxt/telemetry": "^2.2.0", - "@nuxt/ui-templates": "^1.1.1", - "@nuxt/vite-builder": "3.5.3", - "@unhead/ssr": "^1.1.27", - "@unhead/vue": "^1.1.27", - "@vue/shared": "^3.3.4", - "c12": "^1.4.1", - "chokidar": "^3.5.3", - "cookie-es": "^1.0.0", - "defu": "^6.1.2", - "destr": "^1.2.2", - "devalue": "^4.3.2", - "escape-string-regexp": "^5.0.0", - "estree-walker": "^3.0.3", - "fs-extra": "^11.1.1", - "globby": "^13.1.4", - "h3": "^1.6.6", - "hookable": "^5.5.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "knitwork": "^1.0.0", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.0", - "mlly": "^1.3.0", - "nitropack": "^2.4.1", - "nuxi": "3.5.3", - "nypm": "^0.2.0", - "ofetch": "^1.0.1", - "ohash": "^1.1.2", - "pathe": "^1.1.1", - "perfect-debounce": "^1.0.0", - "prompts": "^2.4.2", - "scule": "^1.0.0", - "strip-literal": "^1.0.1", - "ufo": "^1.1.2", - "ultrahtml": "^1.2.0", - "uncrypto": "^0.1.2", - "unctx": "^2.3.1", - "unenv": "^1.5.1", - "unimport": "^3.0.7", - "unplugin": "^1.3.1", - "unplugin-vue-router": "^0.6.4", - "untyped": "^1.3.2", - "vue": "^3.3.4", - "vue-bundle-renderer": "^1.0.3", - "vue-devtools-stub": "^0.1.0", - "vue-router": "^4.2.2" - }, - "bin": { - "nuxi": "bin/nuxt.mjs", - "nuxt": "bin/nuxt.mjs" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0" - }, - "peerDependencies": { - "@parcel/watcher": "^2.1.0", - "@types/node": "^14.18.0 || >=16.10.0" - }, - "peerDependenciesMeta": { - "@parcel/watcher": { - "optional": true - } - } - }, - "node_modules/nypm": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.2.1.tgz", - "integrity": "sha512-5XKv4OKlnL+qkeWU4ywu35iyT1p8TmFJ5vD9BfVn8tHU3g/X0lDLV8TqZ4dNHwkoo9mtHUpQ8W8ert0XPqwbow==", - "dev": true, - "dependencies": { - "execa": "^7.1.1" - }, - "engines": { - "node": "^14.16.0 || >=16.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ofetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.1.0.tgz", - "integrity": "sha512-yjq2ZUUMto1ITpge2J5vNlUfteLzxfHn9aJC55WtVGD3okKwSfPoLaKpcHXmmKd2kZZUGo+jdkFuuj09Blyeig==", - "dev": true, - "dependencies": { - "destr": "^1.2.2", - "node-fetch-native": "^1.2.0", - "ufo": "^1.1.2" - } - }, - "node_modules/ohash": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.2.tgz", - "integrity": "sha512-9CIOSq5945rI045GFtcO3uudyOkYVY1nyfFxVQp+9BRgslr8jPNiSSrsFGg/BNTUFOLqx0P5tng6G32brIPw0w==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/openapi-typescript": { - "version": "6.2.7", - "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-6.2.7.tgz", - "integrity": "sha512-SEdqtFLWmbc2CckzZVSF4/cpPgWlWZp02P0wVCLV/7mCE+7qKukIoiVCLfWJIVeklWuGLZkA/PdJ6OwWaqJ6Ig==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.3", - "fast-glob": "^3.2.12", - "js-yaml": "^4.1.0", - "supports-color": "^9.3.1", - "undici": "^5.22.1", - "yargs-parser": "^21.1.1" - }, - "bin": { - "openapi-typescript": "bin/cli.js" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/parse-git-config": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-3.0.0.tgz", - "integrity": "sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==", - "dev": true, - "dependencies": { - "git-config-path": "^2.0.0", - "ini": "^1.3.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/parse-git-config/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/parse-path": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", - "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", - "dev": true, - "dependencies": { - "protocols": "^2.0.0" - } - }, - "node_modules/parse-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", - "dev": true, - "dependencies": { - "parse-path": "^7.0.0" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", - "dev": true - }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" - } - }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz", - "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz", - "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz", - "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz", - "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz", - "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz", - "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-import-resolver": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-import-resolver/-/postcss-import-resolver-2.0.0.tgz", - "integrity": "sha512-y001XYgGvVwgxyxw9J1a5kqM/vtmIQGzx34g0A0Oy44MFcy/ZboZw1hu/iN3VYFjSTRzbvd7zZJJz0Kh0AGkTw==", - "dev": true, - "dependencies": { - "enhanced-resolve": "^4.1.1" - } - }, - "node_modules/postcss-import-resolver/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==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-import-resolver/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz", - "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz", - "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz", - "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz", - "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^4.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz", - "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^4.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz", - "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz", - "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz", - "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz", - "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz", - "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz", - "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz", - "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz", - "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz", - "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz", - "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz", - "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==", - "dev": true, - "dependencies": { - "cssnano-utils": "^4.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz", - "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz", - "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz", - "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.0.2" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz", - "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-url": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", - "dev": true, - "dependencies": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-url/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/postcss-url/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-url/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/pretty-bytes": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.0.tgz", - "integrity": "sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==", - "dev": true, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/radix3": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.0.1.tgz", - "integrity": "sha512-y+AcwZ3HcUIGc9zGsNVf5+BY/LxL+z+4h4J3/pp8jxSmy1STaCocPS3qrj4tA5ehUSzqtqK+0Aygvz/r/8vy4g==", - "dev": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc9": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.0.tgz", - "integrity": "sha512-ROO9bv8PPqngWKoiUZU3JDQ4sugpdRs9DfwHnzDSxK25XtQn6BEHL6EOd/OtKuDT2qodrtNR+0WkPT6l0jxH5Q==", - "dev": true, - "dependencies": { - "defu": "^6.1.2", - "destr": "^1.2.2", - "flat": "^5.0.2" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "dev": true, - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recast": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.2.tgz", - "integrity": "sha512-Qv6cPfVZyMOtPszK6PgW70pUgm7gPlFitAPf0Q69rlOA0zLw2XdDcNmPbVGYicFGT9O8I7TZ/0ryJD+6COvIPw==", - "dev": true, - "dependencies": { - "assert": "^2.0.0", - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "dev": true, - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/rollup": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", - "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-visualizer": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.2.tgz", - "integrity": "sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==", - "dev": true, - "dependencies": { - "open": "^8.4.0", - "picomatch": "^2.3.1", - "source-map": "^0.7.4", - "yargs": "^17.5.1" - }, - "bin": { - "rollup-plugin-visualizer": "dist/bin/cli.js" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "rollup": "2.x || 3.x" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/rollup-plugin-visualizer/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/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/run-applescript/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/run-applescript/node_modules/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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/run-applescript/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-applescript/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/scule": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/scule/-/scule-1.0.0.tgz", - "integrity": "sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==", - "dev": true - }, - "node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-placeholder": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.1.tgz", - "integrity": "sha512-rUzLlXk4uPFnbEaIz3SW8VISTxMuONas88nYWjAWaM2W9VDbt9tyFOr3lq8RhVOFrT3XISoBw8vni5una8qMnQ==", - "dev": true, - "dependencies": { - "defu": "^6.0.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sigstore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/smob": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.0.tgz", - "integrity": "sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==", - "dev": true - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "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/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "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==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "dev": true - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", - "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==", - "dev": true - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-literal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz", - "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", - "dev": true, - "dependencies": { - "acorn": "^8.8.2" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/stylehacks": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", - "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.3.1.tgz", - "integrity": "sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "node_modules/svgo": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", - "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.2.1", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dev": 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/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/terser": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.0.tgz", - "integrity": "sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "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==", - "dev": true - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", - "dev": true - }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, - "node_modules/tsx": { - "version": "3.12.7", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.12.7.tgz", - "integrity": "sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==", - "dev": true, - "dependencies": { - "@esbuild-kit/cjs-loader": "^2.4.2", - "@esbuild-kit/core-utils": "^3.0.0", - "@esbuild-kit/esm-loader": "^2.5.5" - }, - "bin": { - "tsx": "dist/cli.js" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/ufo": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz", - "integrity": "sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==", - "dev": true - }, - "node_modules/ultrahtml": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.2.0.tgz", - "integrity": "sha512-vxZM2yNvajRmCj/SknRYGNXk2tqiy6kRNvZjJLaleG3zJbSh/aNkOqD1/CVzypw8tyHyhpzYuwQgMMhUB4ZVNQ==", - "dev": true - }, - "node_modules/uncrypto": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", - "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", - "dev": true - }, - "node_modules/unctx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.3.1.tgz", - "integrity": "sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==", - "dev": true, - "dependencies": { - "acorn": "^8.8.2", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.0", - "unplugin": "^1.3.1" - } - }, - "node_modules/undici": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/unenv": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.5.1.tgz", - "integrity": "sha512-tQHlmQUPyIoyGc2bF8phugmQd6wVatkVe5FqxxhM1vHfmPKWTiogSVTHA0mO8gNztDKZLpBEJx3M3CJrTZyExg==", - "dev": true, - "dependencies": { - "consola": "^3.1.0", - "defu": "^6.1.2", - "mime": "^3.0.0", - "node-fetch-native": "^1.1.1", - "pathe": "^1.1.0" - } - }, - "node_modules/unhead": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.1.27.tgz", - "integrity": "sha512-KnE4xeV/mZLxnXG1VAp1nsaO2vzMq9Ch5uN4Y2SJAG4fXLEBi/A8evr3Vd81c+oAwQZjDXKFW60HDCJCkwo/Cw==", - "dev": true, - "dependencies": { - "@unhead/dom": "1.1.27", - "@unhead/schema": "1.1.27", - "@unhead/shared": "1.1.27", - "hookable": "^5.5.3" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/unimport": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.0.8.tgz", - "integrity": "sha512-AOt6xj3QMwqcTZRPB+NhFkyVEjCKnpTVoPm5x6424zz2NYYtCfym2bpJofzPHIJKPNIh5ko2/t2q46ZIMgdmbw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.2", - "escape-string-regexp": "^5.0.0", - "fast-glob": "^3.2.12", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.0", - "mlly": "^1.3.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "scule": "^1.0.0", - "strip-literal": "^1.0.1", - "unplugin": "^1.3.1" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unplugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.3.1.tgz", - "integrity": "sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.2", - "chokidar": "^3.5.3", - "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.5.0" - } - }, - "node_modules/unplugin-vue-router": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.6.4.tgz", - "integrity": "sha512-9THVhhtbVFxbsIibjK59oPwMI1UCxRWRPX7azSkTUABsxovlOXJys5SJx0kd/0oKIqNJuYgkRfAgPuO77SqCOg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.5", - "@rollup/pluginutils": "^5.0.2", - "@vue-macros/common": "^1.3.1", - "ast-walker-scope": "^0.4.1", - "chokidar": "^3.5.3", - "fast-glob": "^3.2.12", - "json5": "^2.2.3", - "local-pkg": "^0.4.3", - "mlly": "^1.2.0", - "pathe": "^1.1.0", - "scule": "^1.0.0", - "unplugin": "^1.3.1", - "yaml": "^2.2.2" - }, - "peerDependencies": { - "vue-router": "^4.1.0" - }, - "peerDependenciesMeta": { - "vue-router": { - "optional": true - } - } - }, - "node_modules/unstorage": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.6.1.tgz", - "integrity": "sha512-GUJzwbP5IStEGZy9/0peRqef5CY9icqApsSu8vxj13admjISyz1g5eYk2wPRBjmZhQ3DUMQ36q+zwTbe68khew==", - "dev": true, - "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^3.5.3", - "destr": "^1.2.2", - "h3": "^1.6.6", - "ioredis": "^5.3.2", - "listhen": "^1.0.4", - "lru-cache": "^9.1.1", - "mri": "^1.2.0", - "node-fetch-native": "^1.1.1", - "ofetch": "^1.0.1", - "ufo": "^1.1.2" - }, - "peerDependencies": { - "@azure/app-configuration": "^1.4.1", - "@azure/cosmos": "^3.17.3", - "@azure/data-tables": "^13.2.2", - "@azure/identity": "^3.2.2", - "@azure/keyvault-secrets": "^4.7.0", - "@azure/storage-blob": "^12.14.0", - "@planetscale/database": "^1.7.0", - "@upstash/redis": "^1.20.6", - "@vercel/kv": "^0.2.1" - }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/kv": { - "optional": true - } - } - }, - "node_modules/unstorage/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/untyped": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.3.2.tgz", - "integrity": "sha512-z219Z65rOGD6jXIvIhpZFfwWdqQckB8sdZec2NO+TkcH1Bph7gL0hwLzRJs1KsOo4Jz4mF9guBXhsEnyEBGVfw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/standalone": "^7.21.3", - "@babel/types": "^7.21.3", - "defu": "^6.1.2", - "jiti": "^1.18.2", - "mri": "^1.2.0", - "scule": "^1.0.0" - }, - "bin": { - "untyped": "dist/cli.mjs" - } - }, - "node_modules/unzipper": { - "version": "0.10.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", - "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/unzipper/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/unzipper/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "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", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vite": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", - "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", - "dev": true, - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-node": { - "version": "0.31.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.31.4.tgz", - "integrity": "sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ==", - "dev": true, - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.2.0", - "pathe": "^1.1.0", - "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite-plugin-checker": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.6.0.tgz", - "integrity": "sha512-DWZ9Hv2TkpjviPxAelNUt4Q3IhSGrx7xrwdM64NI+Q4dt8PaMWJJh4qGNtSrfEuiuIzWWo00Ksvh5It4Y3L9xQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "ansi-escapes": "^4.3.0", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "commander": "^8.0.0", - "fast-glob": "^3.2.7", - "fs-extra": "^11.1.0", - "lodash.debounce": "^4.0.8", - "lodash.pick": "^4.4.0", - "npm-run-path": "^4.0.1", - "semver": "^7.5.0", - "strip-ansi": "^6.0.0", - "tiny-invariant": "^1.1.0", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2" - }, - "engines": { - "node": ">=14.16" - }, - "peerDependencies": { - "eslint": ">=7", - "meow": "^9.0.0", - "optionator": "^0.9.1", - "stylelint": ">=13", - "typescript": "*", - "vite": ">=2.0.0", - "vls": "*", - "vti": "*", - "vue-tsc": ">=1.3.9" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "meow": { - "optional": true - }, - "optionator": { - "optional": true - }, - "stylelint": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vls": { - "optional": true - }, - "vti": { - "optional": true - }, - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/vite-plugin-checker/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/vite-plugin-checker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/vite-plugin-checker/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vite-plugin-checker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vite-plugin-inspect": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.7.28.tgz", - "integrity": "sha512-XRdQGdf+PU6eT0EoL8beUyFQfcCrHr06OyRM71IT8t7rEC9JywdsscehGHEAyFZryfaVBWAI280N63BI2N+1BA==", - "dev": true, - "dependencies": { - "@antfu/utils": "^0.7.2", - "@rollup/pluginutils": "^5.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "sirv": "^2.0.3" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vite": "^3.1.0 || ^4.0.0" - } - }, - "node_modules/vite-plugin-inspect/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vite-plugin-inspect/node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vite-plugin-vue-inspector": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-3.4.2.tgz", - "integrity": "sha512-q5OTkcZJqL78bwGJl1Zk8CNqtxZ9wP2udJYqyFIZzL1lTax0/oq7DhNkLrnPTxkJuf0QPZKdunb1vDyCByn4dQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-transform-typescript": "^7.21.3", - "@vue/babel-plugin-jsx": "^1.1.1", - "@vue/compiler-dom": "^3.2.47", - "esno": "^0.16.3", - "kolorist": "^1.7.0", - "magic-string": "^0.30.0", - "shell-quote": "^1.8.0" - }, - "peerDependencies": { - "vite": "^3.0.0-0 || ^4.0.0-0" - } - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "dev": true, - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - }, - "engines": { - "vscode": "^1.52.0" - } - }, - "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "dev": true, - "dependencies": { - "vscode-languageserver-protocol": "3.16.0" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dev": true, - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", - "dev": true - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", - "dev": true - }, - "node_modules/vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", - "dev": true - }, - "node_modules/vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", - "dev": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/vue-bundle-renderer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vue-bundle-renderer/-/vue-bundle-renderer-1.0.3.tgz", - "integrity": "sha512-EfjX+5TTUl70bki9hPuVp+54JiZOvFIfoWBcfXsSwLzKEiDYyHNi5iX8srnqLIv3YRnvxgbntdcG1WPq0MvffQ==", - "dev": true, - "dependencies": { - "ufo": "^1.1.1" - } - }, - "node_modules/vue-devtools-stub": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz", - "integrity": "sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==", - "dev": true - }, - "node_modules/vue-router": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.2.tgz", - "integrity": "sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ==", - "dev": true, - "dependencies": { - "@vue/devtools-api": "^6.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/wait-on": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz", - "integrity": "sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==", - "dev": true, - "dependencies": { - "axios": "^0.27.2", - "joi": "^17.7.0", - "lodash": "^4.17.21", - "minimist": "^1.2.7", - "rxjs": "^7.8.0" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", - "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", - "dev": true - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dev": true, - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": 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/xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "dependencies": { - "cuint": "^0.2.2" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "dev": true, - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/zhead": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zhead/-/zhead-2.0.4.tgz", - "integrity": "sha512-V4R94t3ifk9AURym6OskbKcnowzgp5Z88tkoL/NF67vyryNxC62u6mx5F1Ux4oh4+YN7FFmKYEyWy6m5kfPH6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - } - } -} diff --git a/examples/user-management/nuxt3-user-management/package.json b/examples/user-management/nuxt3-user-management/package.json deleted file mode 100644 index 60e5122864c64..0000000000000 --- a/examples/user-management/nuxt3-user-management/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "private": true, - "scripts": { - "build": "nuxt build", - "dev": "nuxt dev", - "generate": "nuxt generate", - "preview": "nuxt preview", - "postinstall": "nuxt prepare" - }, - "devDependencies": { - "@nuxt/devtools": "^0.5.5", - "@nuxtjs/supabase": "^0.3.6", - "@types/node": "^18", - "nuxt": "^3.5.3" - } -} diff --git a/examples/user-management/nuxt3-user-management/tsconfig.json b/examples/user-management/nuxt3-user-management/tsconfig.json deleted file mode 100644 index a7bfa186c3fdc..0000000000000 --- a/examples/user-management/nuxt3-user-management/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - // https://v3.nuxtjs.org/concepts/typescript - "extends": "./.nuxt/tsconfig.json" -} diff --git a/examples/user-management/react-user-management/.gitignore b/examples/user-management/react-user-management/.gitignore deleted file mode 100644 index a547bf36d8d11..0000000000000 --- a/examples/user-management/react-user-management/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/examples/user-management/react-user-management/.prettierrc b/examples/user-management/react-user-management/.prettierrc deleted file mode 100644 index 76c3f65353b35..0000000000000 --- a/examples/user-management/react-user-management/.prettierrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 2, - "semi": false, - "singleQuote": true, - "printWidth": 100, - "endOfLine": "lf" -} diff --git a/examples/user-management/react-user-management/README.md b/examples/user-management/react-user-management/README.md deleted file mode 100644 index dc81b1490a642..0000000000000 --- a/examples/user-management/react-user-management/README.md +++ /dev/null @@ -1,129 +0,0 @@ -# Supabase Create React App User Management - -This example will set you up for a very common situation: users can sign up with a magic link and then update their account with public profile information, including a profile image. - -This demonstrates how to use: - -- User signups using Supabase [Auth](https://supabase.com/auth). -- User avatar images using Supabase [Storage](https://supabase.com/storage). -- Public profiles restricted with [Policies](https://supabase.com/docs/guides/auth#policies). -- Frontend using [Create React App](https://reactjs.org/docs/create-a-new-react-app.html). - -## Technologies used - -- Frontend: - - [Create React App](https://reactjs.org/docs/create-a-new-react-app.html) - a React toolchain. - - [Supabase.js](https://supabase.com/docs/library/getting-started) for user management and realtime data syncing. -- Backend: - - [supabase.com/dashboard](https://supabase.com/dashboard/): hosted Postgres database with restful API for usage with Supabase.js. - -## Build from scratch - -### 1. Create new project - -Sign up to Supabase - [https://supabase.com/dashboard](https://supabase.com/dashboard) and create a new project. Wait for your database to start. - -### 2. Run "User Management" Quickstart - -Once your database has started, head over to your project's `SQL Editor` and run the "User Management Starter" quickstart. On the `SQL editor` page, scroll down until you see `User Management Starter: Sets up a public Profiles table which you can access with your API`. Click that, then click `RUN` to execute that query and create a new `profiles` table. When that's finished, head over to the `Table Editor` and see your new `profiles` table. - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). - -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) - -**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. - -### 4. Env vars - -Create a file in this folder `.env.local` - -``` -REACT_APP_SUPABASE_URL= -REACT_APP_SUPABASE_ANON_KEY= -``` - -Populate this file with your URL and Key. - -### 5. Run the application - -Run the application: `npm run start`. Open your browser to `https://localhost:3000/` and you are ready to go 🚀. - -## Supabase details - -### Postgres Row level security - -This project uses very high-level Authorization using Postgres' Role Level Security. -When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. -When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. -We can use these details to provide fine-grained control over what each user can and cannot do. - -This is a trimmed-down schema, with the policies: - -```sql --- Create a table for Public Profiles -create table - profiles ( - id uuid references auth.users not null, - updated_at timestamp - with - time zone, - username text unique, - avatar_url text, - website text, - primary key (id), - unique (username), - constraint username_length check (char_length(username) >= 3) - ); - -alter table - profiles enable row level security; - -create policy "Public profiles are viewable by everyone." on profiles for -select - using (true); - -create policy "Users can insert their own profile." on profiles for insert -with - check (auth.uid () = id); - -create policy "Users can update own profile." on profiles for -update - using (auth.uid () = id); - --- Set up Realtime! -begin; - -drop - publication if exists supabase_realtime; - -create publication supabase_realtime; - -commit; - -alter - publication supabase_realtime add table profiles; - --- Set up Storage! -insert into - storage.buckets (id, name) -values - ('avatars', 'avatars'); - -create policy "Avatar images are publicly accessible." on storage.objects for -select - using (bucket_id = 'avatars'); - -create policy "Anyone can upload an avatar." on storage.objects for insert -with - check (bucket_id = 'avatars'); -``` - -## Authors - -- [Supabase](https://supabase.com) - -Supabase is open source. We'd love for you to follow along and get involved at https://github.com/supabase/supabase diff --git a/examples/user-management/react-user-management/index.html b/examples/user-management/react-user-management/index.html deleted file mode 100644 index 79c470191164e..0000000000000 --- a/examples/user-management/react-user-management/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Vite + React - - -
    - - - diff --git a/examples/user-management/react-user-management/package-lock.json b/examples/user-management/react-user-management/package-lock.json deleted file mode 100644 index 496b0aab5ac8f..0000000000000 --- a/examples/user-management/react-user-management/package-lock.json +++ /dev/null @@ -1,2750 +0,0 @@ -{ - "name": "react-user-management", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "react-user-management", - "version": "0.0.0", - "dependencies": { - "@supabase/supabase-js": "^2.11.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@types/react": "^18.0.27", - "@types/react-dom": "^18.0.10", - "@vitejs/plugin-react": "^3.1.0", - "vite": "^4.2.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", - "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", - "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.3", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.3", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.3", - "@babel/types": "^7.21.3", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", - "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", - "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", - "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", - "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.3", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.3", - "@babel/types": "^7.21.3", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", - "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.11.tgz", - "integrity": "sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.11.tgz", - "integrity": "sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.11.tgz", - "integrity": "sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.11.tgz", - "integrity": "sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.11.tgz", - "integrity": "sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.11.tgz", - "integrity": "sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.11.tgz", - "integrity": "sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.11.tgz", - "integrity": "sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.11.tgz", - "integrity": "sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.11.tgz", - "integrity": "sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.11.tgz", - "integrity": "sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.11.tgz", - "integrity": "sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.11.tgz", - "integrity": "sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.11.tgz", - "integrity": "sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.11.tgz", - "integrity": "sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.11.tgz", - "integrity": "sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.11.tgz", - "integrity": "sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.11.tgz", - "integrity": "sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.11.tgz", - "integrity": "sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.11.tgz", - "integrity": "sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.11.tgz", - "integrity": "sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.11.tgz", - "integrity": "sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.0.tgz", - "integrity": "sha512-vRziB+AqRXRaGHjEFHwBo0kuNDTuAxI7VUeqU24Fe86ISoD8YEQm0dGdpleJEcqgDGWaO6pxT1tfj1BRY5PwMg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.14.0.tgz", - "integrity": "sha512-FI6q4n4iZ2zrEt1BnBYYe8HQ1k9t5CpBcDQxVXa8PeMwygXpzR0AcdfAsZ5Yba42C8YsBA132ti01f+RINS3UQ==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.4.1.tgz", - "integrity": "sha512-aruqwV/aTggkM7OVv2JinCeXmRMKHJCZpkuS1nuoa0NgLw7g3NyILSyWOKYTBJ/PxE/zXtWsBhdxFzaaNz5uxg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.0.tgz", - "integrity": "sha512-wg35ofiCpIemycmPZvvZk3jM9c9z8VvnPUBbSP9ZZN2vSOEJ9C7DZuLiiZMXsyNUzjVgIn62A1tN99T5+9O8Aw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.3.1.tgz", - "integrity": "sha512-BaPIvyvjuZW1V0CnfGKUZyzpBUXnsh0XD8eqTOYd+MdiGPmIPI0vtwnT4fAoK8mipp1vpcN62EVQaqeUnWXPtQ==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.11.0.tgz", - "integrity": "sha512-FkaPZjVx1oY4boS02kAoNhmdyy5hrezxGlY8lZdQwKvk7ee5NPiXzjjsGruc6JOS1QNeuWIUAw1L7uKVYI30dA==", - "dependencies": { - "@supabase/functions-js": "^2.1.0", - "@supabase/gotrue-js": "^2.12.0", - "@supabase/postgrest-js": "^1.1.1", - "@supabase/realtime-js": "^2.7.0", - "@supabase/storage-js": "^2.3.1", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@types/phoenix": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.5.tgz", - "integrity": "sha512-1eWWT19k0L4ZiTvdXjAvJ9KvW0B8SdiVftQmFPJGTEx78Q4PCSIQDpz+EfkFVR1N4U9gREjlW4JXL8YCIlY0bw==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.0.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", - "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", - "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "node_modules/@vitejs/plugin-react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", - "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", - "dev": true, - "dependencies": { - "@babel/core": "^7.20.12", - "@babel/plugin-transform-react-jsx-self": "^7.18.6", - "@babel/plugin-transform-react-jsx-source": "^7.19.6", - "magic-string": "^0.27.0", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.1.0-beta.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001466", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz", - "integrity": "sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.332", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.332.tgz", - "integrity": "sha512-c1Vbv5tuUlBFp0mb3mCIjw+REEsgthRgNE8BlbEDKmvzb8rxjcVki6OkQP83vLN34s0XCxpSkq7AZNep1a6xhw==", - "dev": true - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.11.tgz", - "integrity": "sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.11", - "@esbuild/android-arm64": "0.17.11", - "@esbuild/android-x64": "0.17.11", - "@esbuild/darwin-arm64": "0.17.11", - "@esbuild/darwin-x64": "0.17.11", - "@esbuild/freebsd-arm64": "0.17.11", - "@esbuild/freebsd-x64": "0.17.11", - "@esbuild/linux-arm": "0.17.11", - "@esbuild/linux-arm64": "0.17.11", - "@esbuild/linux-ia32": "0.17.11", - "@esbuild/linux-loong64": "0.17.11", - "@esbuild/linux-mips64el": "0.17.11", - "@esbuild/linux-ppc64": "0.17.11", - "@esbuild/linux-riscv64": "0.17.11", - "@esbuild/linux-s390x": "0.17.11", - "@esbuild/linux-x64": "0.17.11", - "@esbuild/netbsd-x64": "0.17.11", - "@esbuild/openbsd-x64": "0.17.11", - "@esbuild/sunos-x64": "0.17.11", - "@esbuild/win32-arm64": "0.17.11", - "@esbuild/win32-ia32": "0.17.11", - "@esbuild/win32-x64": "0.17.11" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "dev": true, - "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" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.19.1.tgz", - "integrity": "sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/vite": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.3.tgz", - "integrity": "sha512-kLU+m2q0Y434Y1kCy3TchefAdtFso0ILi0dLyFV8Us3InXTU11H/B5ZTqCKIQHzSKNxVG/yEx813EA9f1imQ9A==", - "dev": true, - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.21", - "resolve": "^1.22.1", - "rollup": "^3.18.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", - "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", - "dev": true - }, - "@babel/core": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", - "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.3", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.3", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.3", - "@babel/types": "^7.21.3", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", - "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", - "dev": true, - "requires": { - "@babel/types": "^7.21.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true - }, - "@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", - "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", - "dev": true - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", - "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", - "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.3", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.3", - "@babel/types": "^7.21.3", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", - "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@esbuild/android-arm": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.11.tgz", - "integrity": "sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.11.tgz", - "integrity": "sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.11.tgz", - "integrity": "sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.11.tgz", - "integrity": "sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.11.tgz", - "integrity": "sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.11.tgz", - "integrity": "sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.11.tgz", - "integrity": "sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.11.tgz", - "integrity": "sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.11.tgz", - "integrity": "sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.11.tgz", - "integrity": "sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.11.tgz", - "integrity": "sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.11.tgz", - "integrity": "sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.11.tgz", - "integrity": "sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.11.tgz", - "integrity": "sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.11.tgz", - "integrity": "sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.11.tgz", - "integrity": "sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.11.tgz", - "integrity": "sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.11.tgz", - "integrity": "sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.11.tgz", - "integrity": "sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.11.tgz", - "integrity": "sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.11.tgz", - "integrity": "sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.11.tgz", - "integrity": "sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ==", - "dev": true, - "optional": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@supabase/functions-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.0.tgz", - "integrity": "sha512-vRziB+AqRXRaGHjEFHwBo0kuNDTuAxI7VUeqU24Fe86ISoD8YEQm0dGdpleJEcqgDGWaO6pxT1tfj1BRY5PwMg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.14.0.tgz", - "integrity": "sha512-FI6q4n4iZ2zrEt1BnBYYe8HQ1k9t5CpBcDQxVXa8PeMwygXpzR0AcdfAsZ5Yba42C8YsBA132ti01f+RINS3UQ==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.4.1.tgz", - "integrity": "sha512-aruqwV/aTggkM7OVv2JinCeXmRMKHJCZpkuS1nuoa0NgLw7g3NyILSyWOKYTBJ/PxE/zXtWsBhdxFzaaNz5uxg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.0.tgz", - "integrity": "sha512-wg35ofiCpIemycmPZvvZk3jM9c9z8VvnPUBbSP9ZZN2vSOEJ9C7DZuLiiZMXsyNUzjVgIn62A1tN99T5+9O8Aw==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.3.1.tgz", - "integrity": "sha512-BaPIvyvjuZW1V0CnfGKUZyzpBUXnsh0XD8eqTOYd+MdiGPmIPI0vtwnT4fAoK8mipp1vpcN62EVQaqeUnWXPtQ==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.11.0.tgz", - "integrity": "sha512-FkaPZjVx1oY4boS02kAoNhmdyy5hrezxGlY8lZdQwKvk7ee5NPiXzjjsGruc6JOS1QNeuWIUAw1L7uKVYI30dA==", - "requires": { - "@supabase/functions-js": "^2.1.0", - "@supabase/gotrue-js": "^2.12.0", - "@supabase/postgrest-js": "^1.1.1", - "@supabase/realtime-js": "^2.7.0", - "@supabase/storage-js": "^2.3.1", - "cross-fetch": "^3.1.5" - } - }, - "@types/phoenix": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.5.tgz", - "integrity": "sha512-1eWWT19k0L4ZiTvdXjAvJ9KvW0B8SdiVftQmFPJGTEx78Q4PCSIQDpz+EfkFVR1N4U9gREjlW4JXL8YCIlY0bw==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "@types/react": { - "version": "18.0.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", - "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", - "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "@vitejs/plugin-react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", - "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", - "dev": true, - "requires": { - "@babel/core": "^7.20.12", - "@babel/plugin-transform-react-jsx-self": "^7.18.6", - "@babel/plugin-transform-react-jsx-source": "^7.19.6", - "magic-string": "^0.27.0", - "react-refresh": "^0.14.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001466", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz", - "integrity": "sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "electron-to-chromium": { - "version": "1.4.332", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.332.tgz", - "integrity": "sha512-c1Vbv5tuUlBFp0mb3mCIjw+REEsgthRgNE8BlbEDKmvzb8rxjcVki6OkQP83vLN34s0XCxpSkq7AZNep1a6xhw==", - "dev": true - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "esbuild": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.11.tgz", - "integrity": "sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.17.11", - "@esbuild/android-arm64": "0.17.11", - "@esbuild/android-x64": "0.17.11", - "@esbuild/darwin-arm64": "0.17.11", - "@esbuild/darwin-x64": "0.17.11", - "@esbuild/freebsd-arm64": "0.17.11", - "@esbuild/freebsd-x64": "0.17.11", - "@esbuild/linux-arm": "0.17.11", - "@esbuild/linux-arm64": "0.17.11", - "@esbuild/linux-ia32": "0.17.11", - "@esbuild/linux-loong64": "0.17.11", - "@esbuild/linux-mips64el": "0.17.11", - "@esbuild/linux-ppc64": "0.17.11", - "@esbuild/linux-riscv64": "0.17.11", - "@esbuild/linux-s390x": "0.17.11", - "@esbuild/linux-x64": "0.17.11", - "@esbuild/netbsd-x64": "0.17.11", - "@esbuild/openbsd-x64": "0.17.11", - "@esbuild/sunos-x64": "0.17.11", - "@esbuild/win32-arm64": "0.17.11", - "@esbuild/win32-ia32": "0.17.11", - "@esbuild/win32-x64": "0.17.11" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "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 - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.13" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==" - }, - "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "rollup": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.19.1.tgz", - "integrity": "sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "vite": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.3.tgz", - "integrity": "sha512-kLU+m2q0Y434Y1kCy3TchefAdtFso0ILi0dLyFV8Us3InXTU11H/B5ZTqCKIQHzSKNxVG/yEx813EA9f1imQ9A==", - "dev": true, - "requires": { - "esbuild": "^0.17.5", - "fsevents": "~2.3.2", - "postcss": "^8.4.21", - "resolve": "^1.22.1", - "rollup": "^3.18.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } -} diff --git a/examples/user-management/react-user-management/package.json b/examples/user-management/react-user-management/package.json deleted file mode 100644 index f3e72b822efa0..0000000000000 --- a/examples/user-management/react-user-management/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "react-user-management", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "@supabase/supabase-js": "^2.11.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@types/react": "^18.0.27", - "@types/react-dom": "^18.0.10", - "@vitejs/plugin-react": "^3.1.0", - "vite": "^4.3.9" - } -} diff --git a/examples/user-management/react-user-management/public/vite.svg b/examples/user-management/react-user-management/public/vite.svg deleted file mode 100644 index e7b8dfb1b2a60..0000000000000 --- a/examples/user-management/react-user-management/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/user-management/react-user-management/src/Account.jsx b/examples/user-management/react-user-management/src/Account.jsx deleted file mode 100644 index 38aa74e882767..0000000000000 --- a/examples/user-management/react-user-management/src/Account.jsx +++ /dev/null @@ -1,106 +0,0 @@ -import { useState, useEffect } from 'react' -import { supabase } from './supabaseClient' -import Avatar from './Avatar' - -export default function Account({ session }) { - const [loading, setLoading] = useState(true) - const [username, setUsername] = useState(null) - const [website, setWebsite] = useState(null) - const [avatar_url, setAvatarUrl] = useState(null) - - useEffect(() => { - async function getProfile() { - setLoading(true) - const { user } = session - - let { data, error } = await supabase - .from('profiles') - .select(`username, website, avatar_url`) - .eq('id', user.id) - .single() - - if (error) { - console.warn(error) - } else if (data) { - setUsername(data.username) - setWebsite(data.website) - setAvatarUrl(data.avatar_url) - } - - setLoading(false) - } - - getProfile() - }, [session]) - - async function updateProfile(event, avatarUrl) { - event.preventDefault() - - setLoading(true) - const { user } = session - - const updates = { - id: user.id, - username, - website, - avatarUrl, - updated_at: new Date(), - } - - let { error } = await supabase.from('profiles').upsert(updates) - - if (error) { - alert(error.message) - } else { - setAvatarUrl(avatarUrl) - } - setLoading(false) - } - - return ( -
    - { - updateProfile(event, url) - }} - /> -
    - - -
    -
    - - setUsername(e.target.value)} - /> -
    -
    - - setWebsite(e.target.value)} - /> -
    - -
    - -
    - -
    - -
    - - ) -} diff --git a/examples/user-management/react-user-management/src/App.css b/examples/user-management/react-user-management/src/App.css deleted file mode 100644 index 74b5e053450a4..0000000000000 --- a/examples/user-management/react-user-management/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/examples/user-management/react-user-management/src/App.jsx b/examples/user-management/react-user-management/src/App.jsx deleted file mode 100644 index 3c212c4068a8f..0000000000000 --- a/examples/user-management/react-user-management/src/App.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import { useState, useEffect } from 'react' -import './App.css' -import { supabase } from './supabaseClient' -import Auth from './Auth' -import Account from './Account' - -function App() { - const [session, setSession] = useState(null) - - useEffect(() => { - supabase.auth.getSession().then(({ data: { session } }) => { - setSession(session) - }) - - supabase.auth.onAuthStateChange((_event, session) => { - setSession(session) - }) - }, []) - - return ( -
    - {!session ? : } -
    - ) -} - -export default App diff --git a/examples/user-management/react-user-management/src/Auth.jsx b/examples/user-management/react-user-management/src/Auth.jsx deleted file mode 100644 index 999a1c3e59fcf..0000000000000 --- a/examples/user-management/react-user-management/src/Auth.jsx +++ /dev/null @@ -1,47 +0,0 @@ -import { useState } from 'react' -import { supabase } from './supabaseClient' - -export default function Auth() { - const [loading, setLoading] = useState(false) - const [email, setEmail] = useState('') - - const handleLogin = async (event) => { - event.preventDefault() - - setLoading(true) - const { error } = await supabase.auth.signInWithOtp({ email }) - - if (error) { - alert(error.error_description || error.message) - } else { - alert('Check your email for the login link!') - } - setLoading(false) - } - - return ( -
    -
    -

    Supabase + React

    -

    Sign in via magic link with your email below

    -
    -
    - setEmail(e.target.value)} - /> -
    -
    - -
    -
    -
    -
    - ) -} diff --git a/examples/user-management/react-user-management/src/Avatar.jsx b/examples/user-management/react-user-management/src/Avatar.jsx deleted file mode 100644 index eb9be44b2b661..0000000000000 --- a/examples/user-management/react-user-management/src/Avatar.jsx +++ /dev/null @@ -1,82 +0,0 @@ -import { useEffect, useState } from 'react' -import { supabase } from './supabaseClient' - -export default function Avatar({ url, size, onUpload }) { - 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.message) - } - } - - async function uploadAvatar(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 = `${Math.random()}.${fileExt}` - const filePath = `${fileName}` - - let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file) - - if (uploadError) { - throw uploadError - } - - onUpload(event, filePath) - } catch (error) { - alert(error.message) - } finally { - setUploading(false) - } - } - - return ( -
    - {avatarUrl ? ( - Avatar - ) : ( -
    - )} -
    - - -
    -
    - ) -} diff --git a/examples/user-management/react-user-management/src/assets/react.svg b/examples/user-management/react-user-management/src/assets/react.svg deleted file mode 100644 index 6c87de9bb3358..0000000000000 --- a/examples/user-management/react-user-management/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/user-management/react-user-management/src/index.css b/examples/user-management/react-user-management/src/index.css deleted file mode 100644 index c8af4ebcc94bc..0000000000000 --- a/examples/user-management/react-user-management/src/index.css +++ /dev/null @@ -1,382 +0,0 @@ -html, -body { - --custom-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, - Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; - --custom-bg-color: #101010; - --custom-panel-color: #222; - --custom-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.8); - --custom-color: #fff; - --custom-color-brand: #24b47e; - --custom-color-secondary: #666; - --custom-border: 1px solid #333; - --custom-border-radius: 5px; - --custom-spacing: 5px; - - padding: 0; - margin: 0; - font-family: var(--custom-font-family); - background-color: var(--custom-bg-color); -} - -* { - color: var(--custom-color); - font-family: var(--custom-font-family); - box-sizing: border-box; -} - -html, -body, -#__next { - height: 100vh; - width: 100vw; - overflow-x: hidden; -} - -/* Grid */ - -.container { - width: 90%; - margin-left: auto; - margin-right: auto; -} -.row { - position: relative; - width: 100%; -} -.row [class^='col'] { - float: left; - margin: 0.5rem 2%; - min-height: 0.125rem; -} -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-10, -.col-11, -.col-12 { - width: 96%; -} -.col-1-sm { - width: 4.33%; -} -.col-2-sm { - width: 12.66%; -} -.col-3-sm { - width: 21%; -} -.col-4-sm { - width: 29.33%; -} -.col-5-sm { - width: 37.66%; -} -.col-6-sm { - width: 46%; -} -.col-7-sm { - width: 54.33%; -} -.col-8-sm { - width: 62.66%; -} -.col-9-sm { - width: 71%; -} -.col-10-sm { - width: 79.33%; -} -.col-11-sm { - width: 87.66%; -} -.col-12-sm { - width: 96%; -} -.row::after { - content: ''; - display: table; - clear: both; -} -.hidden-sm { - display: none; -} - -@media only screen and (min-width: 33.75em) { - /* 540px */ - .container { - width: 80%; - } -} - -@media only screen and (min-width: 45em) { - /* 720px */ - .col-1 { - width: 4.33%; - } - .col-2 { - width: 12.66%; - } - .col-3 { - width: 21%; - } - .col-4 { - width: 29.33%; - } - .col-5 { - width: 37.66%; - } - .col-6 { - width: 46%; - } - .col-7 { - width: 54.33%; - } - .col-8 { - width: 62.66%; - } - .col-9 { - width: 71%; - } - .col-10 { - width: 79.33%; - } - .col-11 { - width: 87.66%; - } - .col-12 { - width: 96%; - } - .hidden-sm { - display: block; - } -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .container { - width: 75%; - max-width: 60rem; - } -} - -/* Forms */ - -label { - display: block; - margin: 5px 0; - color: var(--custom-color-secondary); - font-size: 0.8rem; - text-transform: uppercase; -} - -input { - width: 100%; - border-radius: 5px; - border: var(--custom-border); - padding: 8px; - font-size: 0.9rem; - background-color: var(--custom-bg-color); - color: var(--custom-color); -} - -input[disabled] { - color: var(--custom-color-secondary); -} - -/* Utils */ - -.block { - display: block; - width: 100%; -} -.inline-block { - display: inline-block; - width: 100%; -} -.flex { - display: flex; -} -.flex.column { - flex-direction: column; -} -.flex.row { - flex-direction: row; -} -.flex.flex-1 { - flex: 1 1 0; -} -.flex-end { - justify-content: flex-end; -} -.flex-center { - justify-content: center; -} -.items-center { - align-items: center; -} -.text-sm { - font-size: 0.8rem; - font-weight: 300; -} -.text-right { - text-align: right; -} -.font-light { - font-weight: 300; -} -.opacity-half { - opacity: 50%; -} - -/* Button */ - -button, -.button { - color: var(--custom-color); - border: var(--custom-border); - background-color: var(--custom-bg-color); - display: inline-block; - text-align: center; - border-radius: var(--custom-border-radius); - padding: 0.5rem 1rem; - cursor: pointer; - text-align: center; - font-size: 0.9rem; - text-transform: uppercase; -} - -button.primary, -.button.primary { - background-color: var(--custom-color-brand); - border: 1px solid var(--custom-color-brand); -} - -/* Widgets */ - -.card { - width: 100%; - display: block; - border: var(--custom-border); - border-radius: var(--custom-border-radius); - padding: var(--custom-spacing); -} - -.avatar { - border-radius: var(--custom-border-radius); - overflow: hidden; - max-width: 100%; -} -.avatar.image { - object-fit: cover; -} -.avatar.no-image { - background-color: #333; - border: 1px solid rgb(200, 200, 200); - border-radius: 5px; -} - -.footer { - position: absolute; - max-width: 100%; - bottom: 0; - left: 0; - right: 0; - display: flex; - flex-flow: row; - border-top: var(--custom-border); - background-color: var(--custom-bg-color); -} -.footer div { - padding: var(--custom-spacing); - display: flex; - align-items: center; - width: 100%; -} -.footer div > img { - height: 20px; - margin-left: 10px; -} -.footer > div:first-child { - display: none; -} -.footer > div:nth-child(2) { - justify-content: left; -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .footer > div:first-child { - display: flex; - } - .footer > div:nth-child(2) { - justify-content: center; - } -} - -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -.mainHeader { - width: 100%; - font-size: 1.3rem; - margin-bottom: 20px; -} - -.avatarPlaceholder { - border: var(--custom-border); - border-radius: var(--custom-border-radius); - width: 35px; - height: 35px; - background-color: rgba(255, 255, 255, 0.2); - display: flex; - align-items: center; - justify-content: center; -} - -.form-widget { - display: flex; - flex-direction: column; - gap: 20px; -} - -.form-widget > .button { - display: flex; - align-items: center; - justify-content: center; - border: none; - background-color: #444444; - text-transform: none !important; - transition: all 0.2s ease; -} - -.form-widget .button:hover { - background-color: #2a2a2a; -} - -.form-widget .button > .loader { - width: 17px; - animation: spin 1s linear infinite; - filter: invert(1); -} - -.visually-hidden:not(:focus):not(:active) { - clip: rect(0 0 0 0); - clip-path: inset(50%); - height: 1px; - overflow: hidden; - position: absolute; - white-space: nowrap; - width: 1px; -} diff --git a/examples/user-management/react-user-management/src/main.jsx b/examples/user-management/react-user-management/src/main.jsx deleted file mode 100644 index 5cc599199a209..0000000000000 --- a/examples/user-management/react-user-management/src/main.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App' -import './index.css' - -ReactDOM.createRoot(document.getElementById('root')).render( - - - , -) diff --git a/examples/user-management/react-user-management/src/supabaseClient.js b/examples/user-management/react-user-management/src/supabaseClient.js deleted file mode 100644 index 3ad7e698fe6b0..0000000000000 --- a/examples/user-management/react-user-management/src/supabaseClient.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * lib/supabaseClient.js - * Helper to initialize the Supabase client. - */ - -import { createClient } from '@supabase/supabase-js' - -const supabaseUrl = import.meta.env.VITE_SUPABASE_URL -const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY - -export const supabase = createClient(supabaseUrl, supabaseAnonKey) diff --git a/examples/user-management/react-user-management/vite.config.js b/examples/user-management/react-user-management/vite.config.js deleted file mode 100644 index 5a33944a9b41b..0000000000000 --- a/examples/user-management/react-user-management/vite.config.js +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react()], -}) diff --git a/examples/user-management/refine-user-management/.eslintrc.cjs b/examples/user-management/refine-user-management/.eslintrc.cjs deleted file mode 100644 index 595490efccc94..0000000000000 --- a/examples/user-management/refine-user-management/.eslintrc.cjs +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-env node */ - -module.exports = { - env: { browser: true, es2020: true }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:react-hooks/recommended", - ], - parser: "@typescript-eslint/parser", - parserOptions: { ecmaVersion: "latest", sourceType: "module" }, - plugins: ["react-refresh"], - rules: { - "react-refresh/only-export-components": "warn", - }, -}; diff --git a/examples/user-management/refine-user-management/.gitignore b/examples/user-management/refine-user-management/.gitignore deleted file mode 100644 index 24cdedf82f1b1..0000000000000 --- a/examples/user-management/refine-user-management/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* \ No newline at end of file diff --git a/examples/user-management/refine-user-management/.npmrc b/examples/user-management/refine-user-management/.npmrc deleted file mode 100644 index acb88cc765efe..0000000000000 --- a/examples/user-management/refine-user-management/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -legacy-peer-deps=true -strict-peer-dependencies=false \ No newline at end of file diff --git a/examples/user-management/refine-user-management/README.MD b/examples/user-management/refine-user-management/README.MD deleted file mode 100644 index fe6e8da2b1572..0000000000000 --- a/examples/user-management/refine-user-management/README.MD +++ /dev/null @@ -1,121 +0,0 @@ -# Supabase refine User Management - -This repo is a quick sample of how you can get started building apps using [refine](https://github.com/refinedev/refine) and Supabase: users can sign up with a magic link and then update their account with public profile information, including a profile image. - - - -## About refine - -[refine](https://github.com/refinedev/refine) is a React-based framework for building data-intensive applications in no time ✨ - -refine offers lots of out-of-the box functionality for rapid development, without compromising extreme customizability. Use-cases include, but are not limited to admin panels, B2B applications and dashboards. - - -- To learn more about **refine**, please check out the [Documentation](https://refine.dev/docs) -- [Step up to refine tutorials.](https://refine.dev/docs/tutorial/introduction/index/) - -## Available Scripts -### Running the development server. - -```bash -npm run dev -``` - -### Building for production. - -```bash -npm run build -``` - - -## Build from scratch - -### 1. Create new project - -Sign up to Supabase - [https://app.supabase.com](https://app.supabase.com) and create a new project. Wait for your database to start. - -### 2. Run "User Management" Quickstart - -Once your database has started, head over to your project's `SQL Editor` and run the "User Management Starter" quickstart. On the `SQL editor` page, scroll down until you see `User Management Starter: Sets up a public Profiles table which you can access with your API`. Click that, then click `RUN` to execute that query and create a new `profiles` table. When that's finished, head over to the `Table Editor` and see your new `profiles` table. - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). - -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) - -**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. - -### 4. Env vars - -Create a file in this folder `.env.local` - -``` -VITE_SUPABASE_URL=YOUR_SUPABASE_URL -VITE_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY -``` - -Populate this file with your URL and Key. - -### 5. Run the application - -Run the application: `npm run dev`. Open your browser to `https://localhost:5173/` and you are ready to go 🚀. - -## Supabase details - -### Postgres Row level security - -This project uses very high-level Authorization using Postgres' Role Level Security. -When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. -When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. -We can use these details to provide fine-grained control over what each user can and cannot do. - -This is a trimmed-down schema, with the policies: - -```sql --- Create a table for Public Profiles -create table profiles ( - id uuid references auth.users not null, - updated_at timestamp with time zone, - username text unique, - avatar_url text, - website text, - primary key (id), - unique(username), - constraint username_length check (char_length(username) >= 3) -); -alter table profiles enable row level security; -create policy "Public profiles are viewable by everyone." - on profiles for select - using ( true ); -create policy "Users can insert their own profile." - on profiles for insert - with check ( auth.uid() = id ); -create policy "Users can update own profile." - on profiles for update - using ( auth.uid() = id ); --- Set up Realtime! -begin; - drop publication if exists supabase_realtime; - create publication supabase_realtime; -commit; -alter publication supabase_realtime add table profiles; --- Set up Storage! -insert into storage.buckets (id, name) -values ('avatars', 'avatars'); -create policy "Avatar images are publicly accessible." - on storage.objects for select - using ( bucket_id = 'avatars' ); -create policy "Anyone can upload an avatar." - on storage.objects for insert - with check ( bucket_id = 'avatars' ); -``` - - - -## License - -MIT - diff --git a/examples/user-management/refine-user-management/index.html b/examples/user-management/refine-user-management/index.html deleted file mode 100644 index 17e72529889a9..0000000000000 --- a/examples/user-management/refine-user-management/index.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - refine - Build your React-based CRUD applications, without constraints. - - - - -
    - - - - diff --git a/examples/user-management/refine-user-management/package.json b/examples/user-management/refine-user-management/package.json deleted file mode 100644 index f91969089ae21..0000000000000 --- a/examples/user-management/refine-user-management/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "refine-user-management", - "version": "0.1.0", - "private": true, - "type": "module", - "dependencies": { - "@refinedev/cli": "^2.5.1", - "@refinedev/core": "^4.5.8", - "@refinedev/inferencer": "^3.1.4", - "@refinedev/kbar": "^1.1.0", - "@refinedev/react-hook-form": "^4.4.0", - "@refinedev/react-router-v6": "^4.1.0", - "@refinedev/supabase": "^5.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0", - "react-hook-form": "^7.45.0", - "react-router-dom": "^6.8.1" - }, - "devDependencies": { - "@types/node": "^18.16.2", - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.0", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "@vitejs/plugin-react": "^4.0.0", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^4.7.4", - "vite": "^4.3.1" - }, - "scripts": { - "dev": "refine dev", - "build": "tsc && refine build", - "preview": "refine start", - "refine": "refine" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } -} diff --git a/examples/user-management/refine-user-management/public/favicon.ico b/examples/user-management/refine-user-management/public/favicon.ico deleted file mode 100644 index 2f05c5f484fbf..0000000000000 Binary files a/examples/user-management/refine-user-management/public/favicon.ico and /dev/null differ diff --git a/examples/user-management/refine-user-management/src/App.css b/examples/user-management/refine-user-management/src/App.css deleted file mode 100644 index c8af4ebcc94bc..0000000000000 --- a/examples/user-management/refine-user-management/src/App.css +++ /dev/null @@ -1,382 +0,0 @@ -html, -body { - --custom-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, - Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; - --custom-bg-color: #101010; - --custom-panel-color: #222; - --custom-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.8); - --custom-color: #fff; - --custom-color-brand: #24b47e; - --custom-color-secondary: #666; - --custom-border: 1px solid #333; - --custom-border-radius: 5px; - --custom-spacing: 5px; - - padding: 0; - margin: 0; - font-family: var(--custom-font-family); - background-color: var(--custom-bg-color); -} - -* { - color: var(--custom-color); - font-family: var(--custom-font-family); - box-sizing: border-box; -} - -html, -body, -#__next { - height: 100vh; - width: 100vw; - overflow-x: hidden; -} - -/* Grid */ - -.container { - width: 90%; - margin-left: auto; - margin-right: auto; -} -.row { - position: relative; - width: 100%; -} -.row [class^='col'] { - float: left; - margin: 0.5rem 2%; - min-height: 0.125rem; -} -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-10, -.col-11, -.col-12 { - width: 96%; -} -.col-1-sm { - width: 4.33%; -} -.col-2-sm { - width: 12.66%; -} -.col-3-sm { - width: 21%; -} -.col-4-sm { - width: 29.33%; -} -.col-5-sm { - width: 37.66%; -} -.col-6-sm { - width: 46%; -} -.col-7-sm { - width: 54.33%; -} -.col-8-sm { - width: 62.66%; -} -.col-9-sm { - width: 71%; -} -.col-10-sm { - width: 79.33%; -} -.col-11-sm { - width: 87.66%; -} -.col-12-sm { - width: 96%; -} -.row::after { - content: ''; - display: table; - clear: both; -} -.hidden-sm { - display: none; -} - -@media only screen and (min-width: 33.75em) { - /* 540px */ - .container { - width: 80%; - } -} - -@media only screen and (min-width: 45em) { - /* 720px */ - .col-1 { - width: 4.33%; - } - .col-2 { - width: 12.66%; - } - .col-3 { - width: 21%; - } - .col-4 { - width: 29.33%; - } - .col-5 { - width: 37.66%; - } - .col-6 { - width: 46%; - } - .col-7 { - width: 54.33%; - } - .col-8 { - width: 62.66%; - } - .col-9 { - width: 71%; - } - .col-10 { - width: 79.33%; - } - .col-11 { - width: 87.66%; - } - .col-12 { - width: 96%; - } - .hidden-sm { - display: block; - } -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .container { - width: 75%; - max-width: 60rem; - } -} - -/* Forms */ - -label { - display: block; - margin: 5px 0; - color: var(--custom-color-secondary); - font-size: 0.8rem; - text-transform: uppercase; -} - -input { - width: 100%; - border-radius: 5px; - border: var(--custom-border); - padding: 8px; - font-size: 0.9rem; - background-color: var(--custom-bg-color); - color: var(--custom-color); -} - -input[disabled] { - color: var(--custom-color-secondary); -} - -/* Utils */ - -.block { - display: block; - width: 100%; -} -.inline-block { - display: inline-block; - width: 100%; -} -.flex { - display: flex; -} -.flex.column { - flex-direction: column; -} -.flex.row { - flex-direction: row; -} -.flex.flex-1 { - flex: 1 1 0; -} -.flex-end { - justify-content: flex-end; -} -.flex-center { - justify-content: center; -} -.items-center { - align-items: center; -} -.text-sm { - font-size: 0.8rem; - font-weight: 300; -} -.text-right { - text-align: right; -} -.font-light { - font-weight: 300; -} -.opacity-half { - opacity: 50%; -} - -/* Button */ - -button, -.button { - color: var(--custom-color); - border: var(--custom-border); - background-color: var(--custom-bg-color); - display: inline-block; - text-align: center; - border-radius: var(--custom-border-radius); - padding: 0.5rem 1rem; - cursor: pointer; - text-align: center; - font-size: 0.9rem; - text-transform: uppercase; -} - -button.primary, -.button.primary { - background-color: var(--custom-color-brand); - border: 1px solid var(--custom-color-brand); -} - -/* Widgets */ - -.card { - width: 100%; - display: block; - border: var(--custom-border); - border-radius: var(--custom-border-radius); - padding: var(--custom-spacing); -} - -.avatar { - border-radius: var(--custom-border-radius); - overflow: hidden; - max-width: 100%; -} -.avatar.image { - object-fit: cover; -} -.avatar.no-image { - background-color: #333; - border: 1px solid rgb(200, 200, 200); - border-radius: 5px; -} - -.footer { - position: absolute; - max-width: 100%; - bottom: 0; - left: 0; - right: 0; - display: flex; - flex-flow: row; - border-top: var(--custom-border); - background-color: var(--custom-bg-color); -} -.footer div { - padding: var(--custom-spacing); - display: flex; - align-items: center; - width: 100%; -} -.footer div > img { - height: 20px; - margin-left: 10px; -} -.footer > div:first-child { - display: none; -} -.footer > div:nth-child(2) { - justify-content: left; -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .footer > div:first-child { - display: flex; - } - .footer > div:nth-child(2) { - justify-content: center; - } -} - -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -.mainHeader { - width: 100%; - font-size: 1.3rem; - margin-bottom: 20px; -} - -.avatarPlaceholder { - border: var(--custom-border); - border-radius: var(--custom-border-radius); - width: 35px; - height: 35px; - background-color: rgba(255, 255, 255, 0.2); - display: flex; - align-items: center; - justify-content: center; -} - -.form-widget { - display: flex; - flex-direction: column; - gap: 20px; -} - -.form-widget > .button { - display: flex; - align-items: center; - justify-content: center; - border: none; - background-color: #444444; - text-transform: none !important; - transition: all 0.2s ease; -} - -.form-widget .button:hover { - background-color: #2a2a2a; -} - -.form-widget .button > .loader { - width: 17px; - animation: spin 1s linear infinite; - filter: invert(1); -} - -.visually-hidden:not(:focus):not(:active) { - clip: rect(0 0 0 0); - clip-path: inset(50%); - height: 1px; - overflow: hidden; - position: absolute; - white-space: nowrap; - width: 1px; -} diff --git a/examples/user-management/refine-user-management/src/App.tsx b/examples/user-management/refine-user-management/src/App.tsx deleted file mode 100644 index 98e42e2e346c8..0000000000000 --- a/examples/user-management/refine-user-management/src/App.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { Authenticated, Refine } from '@refinedev/core'; -import { RefineKbar, RefineKbarProvider } from '@refinedev/kbar'; - -import routerBindings, { - CatchAllNavigate, - DocumentTitleHandler, - UnsavedChangesNotifier, -} from '@refinedev/react-router-v6'; -import { dataProvider, liveProvider } from '@refinedev/supabase'; -import { BrowserRouter, Outlet, Route, Routes } from 'react-router-dom'; -import './App.css'; -import authProvider from './authProvider'; -import { supabaseClient } from './utility'; -import Account from './components/account'; -import Auth from './components/auth'; - -function App() { - return ( - - - - - } - > - - - } - > - } /> - - } />} - > - } /> - - - - - - - - - ); -} - -export default App; diff --git a/examples/user-management/refine-user-management/src/authProvider.ts b/examples/user-management/refine-user-management/src/authProvider.ts deleted file mode 100644 index d24fb768fc16d..0000000000000 --- a/examples/user-management/refine-user-management/src/authProvider.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { AuthBindings } from "@refinedev/core"; - -import { supabaseClient } from "./utility"; - -const authProvider: AuthBindings = { - login: async ({ email }) => { - try { - const { error } = await supabaseClient.auth.signInWithOtp({ email }); - - if (!error) { - alert("Check your email for the login link!"); - return { - success: true, - }; - }; - - throw error; - } catch (e: any) { - alert(e.message); - return { - success: false, - e, - }; - } - }, - logout: async () => { - const { error } = await supabaseClient.auth.signOut(); - - if (error) { - return { - success: false, - error, - }; - } - - return { - success: true, - redirectTo: "/", - }; - }, - onError: async (error) => { - console.error(error); - return { error }; - }, - check: async () => { - try { - const { data } = await supabaseClient.auth.getSession(); - const { session } = data; - - if (!session) { - return { - authenticated: false, - error: { - message: "Check failed", - name: "Session not found", - }, - logout: true, - redirectTo: "/login", - }; - } - } catch (error: any) { - return { - authenticated: false, - error: error || { - message: "Check failed", - name: "Not authenticated", - }, - logout: true, - redirectTo: "/login", - }; - } - - return { - authenticated: true, - }; - }, - getIdentity: async () => { - const { data } = await supabaseClient.auth.getUser(); - - if (data?.user) { - return { - ...data.user, - name: data.user.email, - }; - } - - return null; - }, -}; - -export default authProvider; diff --git a/examples/user-management/refine-user-management/src/components/account.tsx b/examples/user-management/refine-user-management/src/components/account.tsx deleted file mode 100644 index 08292fa4714c3..0000000000000 --- a/examples/user-management/refine-user-management/src/components/account.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { BaseKey, useGetIdentity, useLogout } from "@refinedev/core"; -import { useForm } from "@refinedev/react-hook-form"; -import { Controller } from "react-hook-form"; -import Avatar from "./avatar"; - -interface IUserIdentity { - id?: BaseKey; - username: string; - name: string; -}; - -export interface IProfile { - id?: string; - username?: string; - website?: string; - avatar_url?: string; -}; - -export default function Account() { - const { data: userIdentity } = useGetIdentity(); - - const { mutate: logOut } = useLogout(); - - const { - refineCore: { formLoading, queryResult, onFinish }, - register, - control, - handleSubmit, - } = useForm({ - refineCoreProps: { - resource: "profiles", - action: "edit", - id: userIdentity?.id, - redirect: false, - onMutationError: (data) => alert(data?.message), - }, - }); - - return ( -
    -
    - { - return ( - { - onFinish({ - ...queryResult?.data?.data, - avatar_url: filePath, - onMutationError: (data: { message: string; }) => alert(data?.message), - }); - field.onChange({ - target: { - value: filePath, - }, - }); - }} - /> - ); - }} - /> -
    - - -
    -
    - - -
    -
    - - -
    - -
    - -
    - -
    - -
    - -
    - ); -}; diff --git a/examples/user-management/refine-user-management/src/components/auth.tsx b/examples/user-management/refine-user-management/src/components/auth.tsx deleted file mode 100644 index 1c043ffcb3154..0000000000000 --- a/examples/user-management/refine-user-management/src/components/auth.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { useState } from "react"; -import { useLogin } from "@refinedev/core"; - -export default function Auth() { - const [email, setEmail] = useState(""); - const { isLoading, mutate: login } = useLogin(); - - const handleLogin = async (event: { preventDefault: () => void }) => { - event.preventDefault(); - login({ email }); - }; - - return ( -
    -
    -

    Supabase + refine

    -

    Sign in via magic link with your email below

    -
    -
    - setEmail(e.target.value)} - /> -
    -
    - -
    -
    -
    -
    - ); -}; diff --git a/examples/user-management/refine-user-management/src/components/avatar.tsx b/examples/user-management/refine-user-management/src/components/avatar.tsx deleted file mode 100644 index 0feb85b2982e6..0000000000000 --- a/examples/user-management/refine-user-management/src/components/avatar.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { useEffect, useState } from "react"; -import { supabaseClient } from "../utility/supabaseClient"; - -type TAvatarProps = { - url?: string; - size: number; - onUpload: (filePath: string) => void; -}; - -export default function Avatar({ - url, - size, - onUpload, -}: TAvatarProps) { - const [avatarUrl, setAvatarUrl] = useState(""); - const [uploading, setUploading] = useState(false); - - useEffect(() => { - if (url) downloadImage(url); - }, [url]); - - async function downloadImage(path: string) { - try { - const { data, error } = await supabaseClient.storage - .from("avatars") - .download(path); - if (error) { - throw error; - } - const url = URL.createObjectURL(data); - setAvatarUrl(url); - } catch (error: any) { - console.log("Error downloading image: ", error?.message); - } - } - - async function uploadAvatar(event: React.ChangeEvent) { - 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 = `${Math.random()}.${fileExt}`; - const filePath = `${fileName}`; - - const { error: uploadError } = await supabaseClient.storage - .from("avatars") - .upload(filePath, file); - - if (uploadError) { - throw uploadError; - } - onUpload(filePath); - } catch (error: any) { - alert(error.message); - } finally { - setUploading(false); - } - } - - return ( -
    - {avatarUrl ? ( - Avatar - ) : ( -
    - )} -
    - - -
    -
    - ); -}; diff --git a/examples/user-management/refine-user-management/src/index.tsx b/examples/user-management/refine-user-management/src/index.tsx deleted file mode 100644 index 8d978ffc8826b..0000000000000 --- a/examples/user-management/refine-user-management/src/index.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from "react"; -import { createRoot } from "react-dom/client"; - -import App from "./App"; - -const container = document.getElementById("root") as HTMLElement; -const root = createRoot(container); - -root.render( - - - -); diff --git a/examples/user-management/refine-user-management/src/utility/index.ts b/examples/user-management/refine-user-management/src/utility/index.ts deleted file mode 100644 index 1a21596513d36..0000000000000 --- a/examples/user-management/refine-user-management/src/utility/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./supabaseClient"; diff --git a/examples/user-management/refine-user-management/src/utility/supabaseClient.ts b/examples/user-management/refine-user-management/src/utility/supabaseClient.ts deleted file mode 100644 index d58cb40f1e4cc..0000000000000 --- a/examples/user-management/refine-user-management/src/utility/supabaseClient.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createClient } from "@refinedev/supabase"; - - -const supabaseUrl = import.meta.env.VITE_SUPABASE_URL; -const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY; - -export const supabaseClient = createClient(supabaseUrl, supabaseAnonKey, { - db: { - schema: "public", - }, - auth: { - persistSession: true, - }, -}); diff --git a/examples/user-management/refine-user-management/src/vite-env.d.ts b/examples/user-management/refine-user-management/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a0061..0000000000000 --- a/examples/user-management/refine-user-management/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/examples/user-management/refine-user-management/tsconfig.json b/examples/user-management/refine-user-management/tsconfig.json deleted file mode 100644 index c132c6386c5b6..0000000000000 --- a/examples/user-management/refine-user-management/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "Node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx" - }, - "include": ["src", "vite.config.ts"], - "references": [ - { - "path": "./tsconfig.node.json" - } - ] -} diff --git a/examples/user-management/refine-user-management/tsconfig.node.json b/examples/user-management/refine-user-management/tsconfig.node.json deleted file mode 100644 index bfa585014fcb2..0000000000000 --- a/examples/user-management/refine-user-management/tsconfig.node.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "ESNext", - "moduleResolution": "node" - }, - "include": ["vite.config.ts"] -} diff --git a/examples/user-management/refine-user-management/vite.config.ts b/examples/user-management/refine-user-management/vite.config.ts deleted file mode 100644 index 58676f788a8e5..0000000000000 --- a/examples/user-management/refine-user-management/vite.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import react from "@vitejs/plugin-react"; -import { defineConfig } from "vite"; - -export default defineConfig({ - plugins: [react()], -}); diff --git a/examples/user-management/solid-user-management/.env.example b/examples/user-management/solid-user-management/.env.example deleted file mode 100644 index 62e54e9d80595..0000000000000 --- a/examples/user-management/solid-user-management/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -VITE_SUPABASE_URL=https://your-project-ref.supabase.co -VITE_SUPABASE_ANON_KEY=your-anon-key \ No newline at end of file diff --git a/examples/user-management/solid-user-management/.gitignore b/examples/user-management/solid-user-management/.gitignore deleted file mode 100644 index 76add878f8dd7..0000000000000 --- a/examples/user-management/solid-user-management/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist \ No newline at end of file diff --git a/examples/user-management/solid-user-management/.prettierrc b/examples/user-management/solid-user-management/.prettierrc deleted file mode 100644 index 450afccdd2212..0000000000000 --- a/examples/user-management/solid-user-management/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 2, - "useTabs": true, - "semi": false, - "singleQuote": true, - "printWidth": 100, - "endOfLine": "lf" -} diff --git a/examples/user-management/solid-user-management/README.md b/examples/user-management/solid-user-management/README.md deleted file mode 100644 index cf43c79c5935a..0000000000000 --- a/examples/user-management/solid-user-management/README.md +++ /dev/null @@ -1,132 +0,0 @@ -# Supabase SolidJS User Management - -## Usage - -```bash -$ npm install -``` - -### Learn more on the [Solid Website](https://solidjs.com) and come chat with us on our [Discord](https://discord.com/invite/solidjs) - -## Available Scripts - -In the project directory, you can run: - -### `npm dev` or `npm start` - -Runs the app in the development mode.
    -Open [http://localhost:3000](http://localhost:3000) to view it in the browser. - -The page will reload if you make edits.
    - -### `npm run build` - -Builds the app for production to the `dist` folder.
    -It correctly bundles Solid in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.
    -Your app is ready to be deployed! - -## Build from scratch - -### 1. Create new project - -Sign up to Supabase - [https://supabase.com/dashboard](https://supabase.com/dashboard) and create a new project. Wait for your database to start. - -### 2. Run "User Management" Quickstart - -Once your database has started, head over to your project's `SQL Editor` and run the "User Management Starter" quickstart. On the `SQL editor` page, scroll down until you see `User Management Starter: Sets up a public Profiles table which you can access with your API`. Click that, then click `RUN` to execute that query and create a new `profiles` table. When that's finished, head over to the `Table Editor` and see your new `profiles` table. - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). - -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) - -**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. - -### 4. Env vars - -Create `.env.local` from the `.env.example` file and populate this file with your URL and Key. - -### 5. Run the application - -Run the application: `npm run dev`. Open your browser to `https://localhost:3000/` and you are ready to go 🚀. - -## Supabase details - -### Postgres Row level security - -This project uses very high-level Authorization using Postgres' Role Level Security. -When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. -When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. -We can use these details to provide fine-grained control over what each user can and cannot do. - -This is a trimmed-down schema, with the policies: - -```sql --- Create a table for Public Profiles -create table - profiles ( - id uuid references auth.users not null, - updated_at timestamp - with - time zone, - username text unique, - avatar_url text, - website text, - primary key (id), - unique (username), - constraint username_length check (char_length(username) >= 3) - ); - -alter table - profiles enable row level security; - -create policy "Public profiles are viewable by everyone." on profiles for -select - using (true); - -create policy "Users can insert their own profile." on profiles for insert -with - check (auth.uid () = id); - -create policy "Users can update own profile." on profiles for -update - using (auth.uid () = id); - --- Set up Realtime! -begin; - -drop - publication if exists supabase_realtime; - -create publication supabase_realtime; - -commit; - -alter - publication supabase_realtime add table profiles; - --- Set up Storage! -insert into - storage.buckets (id, name) -values - ('avatars', 'avatars'); - -create policy "Avatar images are publicly accessible." on storage.objects for -select - using (bucket_id = 'avatars'); - -create policy "Anyone can upload an avatar." on storage.objects for insert -with - check (bucket_id = 'avatars'); -``` - -## Authors - -- [Supabase](https://supabase.com) - -Supabase is open source. We'd love for you to follow along and get involved at https://github.com/supabase/supabase diff --git a/examples/user-management/solid-user-management/index.html b/examples/user-management/solid-user-management/index.html deleted file mode 100644 index 3a4a7c4d3382a..0000000000000 --- a/examples/user-management/solid-user-management/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - Supabase SolidJS User Management - - - -
    - - - - diff --git a/examples/user-management/solid-user-management/package-lock.json b/examples/user-management/solid-user-management/package-lock.json deleted file mode 100644 index 2cd5d99946138..0000000000000 --- a/examples/user-management/solid-user-management/package-lock.json +++ /dev/null @@ -1,2954 +0,0 @@ -{ - "name": "solidjs-user-management", - "version": "0.2.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "solidjs-user-management", - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "@supabase/supabase-js": "^2.0.4", - "solid-js": "^1.4.7" - }, - "devDependencies": { - "prettier": "^2.7.1", - "typescript": "^4.7.4", - "vite": "^3.2.7", - "vite-plugin-solid": "^2.3.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", - "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz", - "integrity": "sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "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", - "@babel/plugin-transform-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", - "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.11", - "@babel/types": "^7.18.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "dependencies": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-plugin-jsx-dom-expressions": { - "version": "0.33.14", - "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.33.14.tgz", - "integrity": "sha512-91T8uEz6Wb42bUm5vxRBawY05fBHiwUxah/xWBimuWpH3nf7E0KJ0Wm/s8R7lxRIZzwGCILv1IBlUCqA50WOVw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "7.16.0", - "@babel/plugin-syntax-jsx": "^7.16.5", - "@babel/types": "^7.16.0", - "html-entities": "2.3.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-plugin-jsx-dom-expressions/node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/babel-preset-solid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.4.8.tgz", - "integrity": "sha512-Qv1yoE7yIux68egUsUUEV26t7B0KLNyXKz1MTk89GJDc6mt+2s7+lDVr4tXa29PTZ/hXDTu2uLbEN/1OtmFFBg==", - "dev": true, - "dependencies": { - "babel-plugin-jsx-dom-expressions": "^0.33.14" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001378", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz", - "integrity": "sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.225", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz", - "integrity": "sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw==", - "dev": true - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-what": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.7.tgz", - "integrity": "sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==", - "dev": true, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/merge-anything": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.0.2.tgz", - "integrity": "sha512-POPQBWkBC0vxdgzRJ2Mkj4+2NTKbvkHo93ih+jGDhNMLzIw+rYKjO7949hOQM2X7DxMHH1uoUkwWFLIzImw7gA==", - "dev": true, - "dependencies": { - "is-what": "^4.1.6", - "ts-toolbelt": "^9.6.0" - }, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/solid-js": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.4.8.tgz", - "integrity": "sha512-XErZdnnYYXF7OwGSUAPcua2y5/ELB/c53zFCpWiEGqxTNoH1iQghzI8EsHJXk06sNn+Z/TGhb8bPDNNGSgimag==" - }, - "node_modules/solid-refresh": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.4.1.tgz", - "integrity": "sha512-v3tD/OXQcUyXLrWjPW1dXZyeWwP7/+GQNs8YTL09GBq+5FguA6IejJWUvJDrLIA4M0ho9/5zK2e9n+uy+4488g==", - "dev": true, - "dependencies": { - "@babel/generator": "^7.18.2", - "@babel/helper-module-imports": "^7.16.7", - "@babel/types": "^7.18.4" - }, - "peerDependencies": { - "solid-js": "^1.3" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-toolbelt": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/vite": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", - "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", - "dev": true, - "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-plugin-solid": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.3.0.tgz", - "integrity": "sha512-N2sa54C3UZC2nN5vpj5o6YP+XdIAZW6n6xv8OasxNAcAJPFeZT7EOVvumL0V4c8hBz1yuYniMWdESY8807fVSg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "babel-preset-solid": "^1.4.6", - "merge-anything": "^5.0.2", - "solid-refresh": "^0.4.1" - }, - "peerDependencies": { - "solid-js": "^1.3.17", - "vite": "^3.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "dev": true - }, - "@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "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" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", - "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "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" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-optimise-call-expression": { - "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" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", - "dev": true - }, - "@babel/plugin-syntax-jsx": { - "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" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz", - "integrity": "sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-typescript": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "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", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", - "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.11", - "@babel/types": "^7.18.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - } - }, - "@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "dev": true, - "optional": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "requires": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "babel-plugin-jsx-dom-expressions": { - "version": "0.33.14", - "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.33.14.tgz", - "integrity": "sha512-91T8uEz6Wb42bUm5vxRBawY05fBHiwUxah/xWBimuWpH3nf7E0KJ0Wm/s8R7lxRIZzwGCILv1IBlUCqA50WOVw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.16.0", - "@babel/plugin-syntax-jsx": "^7.16.5", - "@babel/types": "^7.16.0", - "html-entities": "2.3.2" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - } - } - }, - "babel-preset-solid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.4.8.tgz", - "integrity": "sha512-Qv1yoE7yIux68egUsUUEV26t7B0KLNyXKz1MTk89GJDc6mt+2s7+lDVr4tXa29PTZ/hXDTu2uLbEN/1OtmFFBg==", - "dev": true, - "requires": { - "babel-plugin-jsx-dom-expressions": "^0.33.14" - } - }, - "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - } - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001378", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz", - "integrity": "sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "electron-to-chromium": { - "version": "1.4.225", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz", - "integrity": "sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw==", - "dev": true - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "dev": true, - "optional": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "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 - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-what": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.7.tgz", - "integrity": "sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "merge-anything": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.0.2.tgz", - "integrity": "sha512-POPQBWkBC0vxdgzRJ2Mkj4+2NTKbvkHo93ih+jGDhNMLzIw+rYKjO7949hOQM2X7DxMHH1uoUkwWFLIzImw7gA==", - "dev": true, - "requires": { - "is-what": "^4.1.6", - "ts-toolbelt": "^9.6.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "solid-js": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.4.8.tgz", - "integrity": "sha512-XErZdnnYYXF7OwGSUAPcua2y5/ELB/c53zFCpWiEGqxTNoH1iQghzI8EsHJXk06sNn+Z/TGhb8bPDNNGSgimag==" - }, - "solid-refresh": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.4.1.tgz", - "integrity": "sha512-v3tD/OXQcUyXLrWjPW1dXZyeWwP7/+GQNs8YTL09GBq+5FguA6IejJWUvJDrLIA4M0ho9/5zK2e9n+uy+4488g==", - "dev": true, - "requires": { - "@babel/generator": "^7.18.2", - "@babel/helper-module-imports": "^7.16.7", - "@babel/types": "^7.18.4" - } - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "ts-toolbelt": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "vite": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", - "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", - "dev": true, - "requires": { - "esbuild": "^0.15.9", - "fsevents": "~2.3.2", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - } - }, - "vite-plugin-solid": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.3.0.tgz", - "integrity": "sha512-N2sa54C3UZC2nN5vpj5o6YP+XdIAZW6n6xv8OasxNAcAJPFeZT7EOVvumL0V4c8hBz1yuYniMWdESY8807fVSg==", - "dev": true, - "requires": { - "@babel/core": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "babel-preset-solid": "^1.4.6", - "merge-anything": "^5.0.2", - "solid-refresh": "^0.4.1" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - } - } -} diff --git a/examples/user-management/solid-user-management/package.json b/examples/user-management/solid-user-management/package.json deleted file mode 100644 index dab840ac4c290..0000000000000 --- a/examples/user-management/solid-user-management/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "solidjs-user-management", - "version": "0.2.0", - "description": "", - "scripts": { - "start": "vite", - "dev": "vite", - "build": "vite build", - "serve": "vite preview", - "format": "prettier --write \"src/*.{js,json,ts,tsx,jsx}\"" - }, - "license": "MIT", - "devDependencies": { - "prettier": "^2.7.1", - "typescript": "^4.7.4", - "vite": "^4.3.9", - "vite-plugin-solid": "^2.3.0" - }, - "dependencies": { - "@supabase/supabase-js": "^2.0.4", - "solid-js": "^1.4.7" - } -} diff --git a/examples/user-management/solid-user-management/src/Account.tsx b/examples/user-management/solid-user-management/src/Account.tsx deleted file mode 100644 index 2fdbf713b3b3c..0000000000000 --- a/examples/user-management/solid-user-management/src/Account.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import { AuthSession } from '@supabase/supabase-js' -import { Component, createEffect, createSignal } from 'solid-js' -import Avatar from './Avatar' -import { supabase } from './supabaseClient' - -interface Props { - session: AuthSession -} - -const Account: Component = ({ session }) => { - const [loading, setLoading] = createSignal(true) - const [username, setUsername] = createSignal(null) - const [website, setWebsite] = createSignal(null) - const [avatarUrl, setAvatarUrl] = createSignal(null) - - createEffect(() => { - getProfile() - }) - - const getProfile = async () => { - try { - setLoading(true) - const { user } = session - - 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) { - if (error instanceof Error) { - alert(error.message) - } - } finally { - setLoading(false) - } - } - - const updateProfile = async (e: Event) => { - e.preventDefault() - - try { - setLoading(true) - const { user } = session - - const updates = { - id: user.id, - username: username(), - website: website(), - avatar_url: avatarUrl(), - updated_at: new Date().toISOString(), - } - - let { error } = await supabase.from('profiles').upsert(updates) - - if (error) { - throw error - } - } catch (error) { - if (error instanceof Error) { - alert(error.message) - } - } finally { - setLoading(false) - } - } - - return ( -
    -
    - { - setAvatarUrl(url) - updateProfile(e) - }} - /> -
    Email: {session.user.email}
    -
    - - setUsername(e.currentTarget.value)} - /> -
    -
    - - setWebsite(e.currentTarget.value)} - /> -
    -
    - -
    - - -
    - ) -} - -export default Account diff --git a/examples/user-management/solid-user-management/src/App.tsx b/examples/user-management/solid-user-management/src/App.tsx deleted file mode 100644 index ff5407764742f..0000000000000 --- a/examples/user-management/solid-user-management/src/App.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Component, createEffect, createSignal } from 'solid-js' -import { supabase } from './supabaseClient' -import { AuthSession } from '@supabase/supabase-js' -import Account from './Account' -import Auth from './Auth' - -const App: Component = () => { - const [session, setSession] = createSignal(null) - - createEffect(() => { - supabase.auth.getSession().then(({ data: { session } }) => { - setSession(session) - }) - - supabase.auth.onAuthStateChange((_event, session) => { - setSession(session) - }) - }) - - return ( -
    - {!session() ? : } -
    - ) -} - -export default App diff --git a/examples/user-management/solid-user-management/src/Auth.tsx b/examples/user-management/solid-user-management/src/Auth.tsx deleted file mode 100644 index afa759fca175b..0000000000000 --- a/examples/user-management/solid-user-management/src/Auth.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { Component, createSignal } from 'solid-js' -import { supabase } from './supabaseClient' - -const Auth: Component = () => { - const [loading, setLoading] = createSignal(false) - const [email, setEmail] = createSignal('') - - const handleLogin = async (e: SubmitEvent) => { - e.preventDefault() - - try { - setLoading(true) - const { error } = await supabase.auth.signInWithOtp({ email: email() }) - if (error) throw error - alert('Check your email for login link!') - } catch (error) { - if (error instanceof Error) { - alert(error.message) - } - } finally { - setLoading(false) - } - } - - return ( -
    -
    -

    Supabase + SolidJS

    -

    Sign in via magic link with your email below

    -
    -
    - - setEmail(e.currentTarget.value)} - /> -
    -
    - -
    -
    -
    -
    - ) -} - -export default Auth diff --git a/examples/user-management/solid-user-management/src/Avatar.tsx b/examples/user-management/solid-user-management/src/Avatar.tsx deleted file mode 100644 index 6683ab1336341..0000000000000 --- a/examples/user-management/solid-user-management/src/Avatar.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { Component, createEffect, createSignal, JSX } from 'solid-js' -import { supabase } from './supabaseClient' - -interface Props { - size: number - url: string | null - onUpload: (event: Event, filePath: string) => void -} - -const Avatar: Component = (props) => { - const [avatarUrl, setAvatarUrl] = createSignal(null) - const [uploading, setUploading] = createSignal(false) - - createEffect(() => { - if (props.url) downloadImage(props.url) - }) - - const downloadImage = async (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) { - if (error instanceof Error) { - console.log('Error downloading image: ', error.message) - } - } - } - - const uploadAvatar: JSX.EventHandler = async (event) => { - try { - setUploading(true) - - const target = event.currentTarget - if (!target?.files || target.files.length === 0) { - throw new Error('You must select an image to upload.') - } - - const file = target.files[0] - const fileExt = file.name.split('.').pop() - const fileName = `${Math.random()}.${fileExt}` - const filePath = `${fileName}` - - let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file) - - if (uploadError) { - throw uploadError - } - - props.onUpload(event, filePath) - } catch (error) { - if (error instanceof Error) { - alert(error.message) - } - } finally { - setUploading(false) - } - } - - return ( -
    - {avatarUrl() ? ( - {avatarUrl() - ) : ( -
    - )} -
    - - - - -
    -
    - ) -} - -export default Avatar diff --git a/examples/user-management/solid-user-management/src/assets/favicon.ico b/examples/user-management/solid-user-management/src/assets/favicon.ico deleted file mode 100644 index b836b2bccac65..0000000000000 Binary files a/examples/user-management/solid-user-management/src/assets/favicon.ico and /dev/null differ diff --git a/examples/user-management/solid-user-management/src/index.css b/examples/user-management/solid-user-management/src/index.css deleted file mode 100644 index d6385cafa26e1..0000000000000 --- a/examples/user-management/solid-user-management/src/index.css +++ /dev/null @@ -1,372 +0,0 @@ -html, -body { - --custom-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, - Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; - --custom-bg-color: #101010; - --custom-panel-color: #222; - --custom-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.8); - --custom-color: #fff; - --custom-color-brand: #24b47e; - --custom-color-secondary: #666; - --custom-border: 1px solid #333; - --custom-border-radius: 5px; - --custom-spacing: 5px; - - padding: 0; - margin: 0; - font-family: var(--custom-font-family); - background-color: var(--custom-bg-color); -} - -* { - color: var(--custom-color); - font-family: var(--custom-font-family); - box-sizing: border-box; -} - -html, -body, -#__next { - height: 100vh; - width: 100vw; - overflow-x: hidden; -} - -/* Grid */ - -.container { - width: 90%; - margin-left: auto; - margin-right: auto; -} -.row { - position: relative; - width: 100%; -} -.row [class^='col'] { - float: left; - margin: 0.5rem 2%; - min-height: 0.125rem; -} -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-10, -.col-11, -.col-12 { - width: 96%; -} -.col-1-sm { - width: 4.33%; -} -.col-2-sm { - width: 12.66%; -} -.col-3-sm { - width: 21%; -} -.col-4-sm { - width: 29.33%; -} -.col-5-sm { - width: 37.66%; -} -.col-6-sm { - width: 46%; -} -.col-7-sm { - width: 54.33%; -} -.col-8-sm { - width: 62.66%; -} -.col-9-sm { - width: 71%; -} -.col-10-sm { - width: 79.33%; -} -.col-11-sm { - width: 87.66%; -} -.col-12-sm { - width: 96%; -} -.row::after { - content: ''; - display: table; - clear: both; -} -.hidden-sm { - display: none; -} - -@media only screen and (min-width: 33.75em) { - /* 540px */ - .container { - width: 80%; - } -} - -@media only screen and (min-width: 45em) { - /* 720px */ - .col-1 { - width: 4.33%; - } - .col-2 { - width: 12.66%; - } - .col-3 { - width: 21%; - } - .col-4 { - width: 29.33%; - } - .col-5 { - width: 37.66%; - } - .col-6 { - width: 46%; - } - .col-7 { - width: 54.33%; - } - .col-8 { - width: 62.66%; - } - .col-9 { - width: 71%; - } - .col-10 { - width: 79.33%; - } - .col-11 { - width: 87.66%; - } - .col-12 { - width: 96%; - } - .hidden-sm { - display: block; - } -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .container { - width: 75%; - max-width: 60rem; - } -} - -/* Forms */ - -label { - display: block; - margin: 5px 0; - color: var(--custom-color-secondary); - font-size: 0.8rem; - text-transform: uppercase; -} - -input { - width: 100%; - border-radius: 5px; - border: var(--custom-border); - padding: 8px; - font-size: 0.9rem; - background-color: var(--custom-bg-color); - color: var(--custom-color); -} - -input[disabled] { - color: var(--custom-color-secondary); -} - -/* Utils */ - -.block { - display: block; - width: 100%; -} -.inline-block { - display: inline-block; - width: 100%; -} -.flex { - display: flex; -} -.flex.column { - flex-direction: column; -} -.flex.row { - flex-direction: row; -} -.flex.flex-1 { - flex: 1 1 0; -} -.flex-end { - justify-content: flex-end; -} -.flex-center { - justify-content: center; -} -.items-center { - align-items: center; -} -.text-sm { - font-size: 0.8rem; - font-weight: 300; -} -.text-right { - text-align: right; -} -.font-light { - font-weight: 300; -} -.opacity-half { - opacity: 50%; -} - -/* Button */ - -button, -.button { - color: var(--custom-color); - border: var(--custom-border); - background-color: var(--custom-bg-color); - display: inline-block; - text-align: center; - border-radius: var(--custom-border-radius); - padding: 0.5rem 1rem; - cursor: pointer; - text-align: center; - font-size: 0.9rem; - text-transform: uppercase; -} - -button.primary, -.button.primary { - background-color: var(--custom-color-brand); - border: 1px solid var(--custom-color-brand); -} - -/* Widgets */ - -.card { - width: 100%; - display: block; - border: var(--custom-border); - border-radius: var(--custom-border-radius); - padding: var(--custom-spacing); -} - -.avatar { - border-radius: var(--custom-border-radius); - overflow: hidden; - max-width: 100%; -} -.avatar.image { - object-fit: cover; -} -.avatar.no-image { - background-color: #333; - border: 1px solid rgb(200, 200, 200); - border-radius: 5px; -} - -.footer { - position: absolute; - max-width: 100%; - bottom: 0; - left: 0; - right: 0; - display: flex; - flex-flow: row; - border-top: var(--custom-border); - background-color: var(--custom-bg-color); -} -.footer div { - padding: var(--custom-spacing); - display: flex; - align-items: center; - width: 100%; -} -.footer div > img { - height: 20px; - margin-left: 10px; -} -.footer > div:first-child { - display: none; -} -.footer > div:nth-child(2) { - justify-content: left; -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .footer > div:first-child { - display: flex; - } - .footer > div:nth-child(2) { - justify-content: center; - } -} - -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -.mainHeader { - width: 100%; - font-size: 1.3rem; - margin-bottom: 20px; -} - -.avatarPlaceholder { - border: var(--custom-border); - border-radius: var(--custom-border-radius); - width: 35px; - height: 35px; - background-color: rgba(255, 255, 255, 0.2); - display: flex; - align-items: center; - justify-content: center; -} - -.form-widget { - display: flex; - flex-direction: column; - gap: 20px; -} - -.form-widget > .button { - display: flex; - align-items: center; - justify-content: center; - border: none; - background-color: #444444; - text-transform: none !important; - transition: all 0.2s ease; -} - -.form-widget .button:hover { - background-color: #2a2a2a; -} - -.form-widget .button > .loader { - width: 17px; - animation: spin 1s linear infinite; - filter: invert(1); -} diff --git a/examples/user-management/solid-user-management/src/index.tsx b/examples/user-management/solid-user-management/src/index.tsx deleted file mode 100644 index b5618861da373..0000000000000 --- a/examples/user-management/solid-user-management/src/index.tsx +++ /dev/null @@ -1,7 +0,0 @@ -/* @refresh reload */ -import { render } from 'solid-js/web' - -import './index.css' -import App from './App' - -render(() => , document.getElementById('root') as HTMLElement) diff --git a/examples/user-management/solid-user-management/src/schema.ts b/examples/user-management/solid-user-management/src/schema.ts deleted file mode 100644 index 7800a5bd9ef19..0000000000000 --- a/examples/user-management/solid-user-management/src/schema.ts +++ /dev/null @@ -1,40 +0,0 @@ -export type Json = string | number | boolean | null | { [key: string]: Json } | Json[] - -export interface Database { - public: { - Tables: { - profiles: { - Row: { - id: string - updated_at: string | null - username: string | null - avatar_url: string | null - website: string | null - } - Insert: { - id: string - updated_at?: string | null - username?: string | null - avatar_url?: string | null - website?: string | null - } - Update: { - id?: string - updated_at?: string | null - username?: string | null - avatar_url?: string | null - website?: string | null - } - } - } - Views: { - [_ in never]: never - } - Functions: { - [_ in never]: never - } - Enums: { - [_ in never]: never - } - } -} diff --git a/examples/user-management/solid-user-management/src/supabaseClient.tsx b/examples/user-management/solid-user-management/src/supabaseClient.tsx deleted file mode 100644 index ec271d13058b4..0000000000000 --- a/examples/user-management/solid-user-management/src/supabaseClient.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { createClient } from '@supabase/supabase-js' -import { Database } from './schema' - -const supabaseUrl = import.meta.env.VITE_SUPABASE_URL -const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY - -export const supabase = createClient(supabaseUrl, supabaseAnonKey) diff --git a/examples/user-management/solid-user-management/tsconfig.json b/examples/user-management/solid-user-management/tsconfig.json deleted file mode 100644 index 249b2732a748e..0000000000000 --- a/examples/user-management/solid-user-management/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "strict": true, - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "preserve", - "jsxImportSource": "solid-js", - "types": ["vite/client"], - "noEmit": true, - "isolatedModules": true - } -} diff --git a/examples/user-management/solid-user-management/vite.config.ts b/examples/user-management/solid-user-management/vite.config.ts deleted file mode 100644 index 9ff59a172211a..0000000000000 --- a/examples/user-management/solid-user-management/vite.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from 'vite'; -import solidPlugin from 'vite-plugin-solid'; - -export default defineConfig({ - plugins: [solidPlugin()], - server: { - port: 3000, - }, - build: { - target: 'esnext', - }, -}); diff --git a/examples/user-management/svelte-user-management/.env.example b/examples/user-management/svelte-user-management/.env.example deleted file mode 100644 index 62e54e9d80595..0000000000000 --- a/examples/user-management/svelte-user-management/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -VITE_SUPABASE_URL=https://your-project-ref.supabase.co -VITE_SUPABASE_ANON_KEY=your-anon-key \ No newline at end of file diff --git a/examples/user-management/svelte-user-management/.gitignore b/examples/user-management/svelte-user-management/.gitignore deleted file mode 100644 index a547bf36d8d11..0000000000000 --- a/examples/user-management/svelte-user-management/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/examples/user-management/svelte-user-management/.prettierrc b/examples/user-management/svelte-user-management/.prettierrc deleted file mode 100644 index 450afccdd2212..0000000000000 --- a/examples/user-management/svelte-user-management/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 2, - "useTabs": true, - "semi": false, - "singleQuote": true, - "printWidth": 100, - "endOfLine": "lf" -} diff --git a/examples/user-management/svelte-user-management/README.md b/examples/user-management/svelte-user-management/README.md deleted file mode 100644 index 62e6038e03505..0000000000000 --- a/examples/user-management/svelte-user-management/README.md +++ /dev/null @@ -1,130 +0,0 @@ -# Supabase Svelte User Management - -## Usage - -```bash -$ npm install -``` - -## Available Scripts - -In the project directory, you can run: - -### `npm run dev` - -Runs the app in the development mode.
    -Open [http://localhost:5173](http://localhost:5173) to view it in the browser. - -The page will reload if you make edits.
    - -### `npm run build` - -Builds the app for production to the `dist` folder.
    -It correctly bundles Svelte in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.
    -Your app is ready to be deployed! - -## Build from scratch - -### 1. Create new project - -Sign up to Supabase - [https://supabase.com/dashboard](https://supabase.com/dashboard) and create a new project. Wait for your database to start. - -### 2. Run "User Management" Quickstart - -Once your database has started, head over to your project's `SQL Editor` and run the "User Management Starter" quickstart. On the `SQL editor` page, scroll down until you see `User Management Starter: Sets up a public Profiles table which you can access with your API`. Click that, then click `RUN` to execute that query and create a new `profiles` table. When that's finished, head over to the `Table Editor` and see your new `profiles` table. - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). - -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) - -**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. - -### 4. Env vars - -Create `.env.local` from the `.env.example` file and populate this file with your URL and Key. - -### 5. Run the application - -Run the application: `npm run dev`. Open your browser to `https://localhost:5173/` and you are ready to go 🚀. - -## Supabase details - -### Postgres Row level security - -This project uses very high-level Authorization using Postgres' Role Level Security. -When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. -When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. -We can use these details to provide fine-grained control over what each user can and cannot do. - -This is a trimmed-down schema, with the policies: - -```sql --- Create a table for Public Profiles -create table - profiles ( - id uuid references auth.users not null, - updated_at timestamp - with - time zone, - username text unique, - avatar_url text, - website text, - primary key (id), - unique (username), - constraint username_length check (char_length(username) >= 3) - ); - -alter table - profiles enable row level security; - -create policy "Public profiles are viewable by everyone." on profiles for -select - using (true); - -create policy "Users can insert their own profile." on profiles for insert -with - check (auth.uid () = id); - -create policy "Users can update own profile." on profiles for -update - using (auth.uid () = id); - --- Set up Realtime! -begin; - -drop - publication if exists supabase_realtime; - -create publication supabase_realtime; - -commit; - -alter - publication supabase_realtime add table profiles; - --- Set up Storage! -insert into - storage.buckets (id, name) -values - ('avatars', 'avatars'); - -create policy "Avatar images are publicly accessible." on storage.objects for -select - using (bucket_id = 'avatars'); - -create policy "Anyone can upload an avatar." on storage.objects for insert -with - check (bucket_id = 'avatars'); -``` - -## Authors - -- [Supabase](https://supabase.com) - -Supabase is open source. We'd love for you to follow along and get involved at https://github.com/supabase/supabase diff --git a/examples/user-management/svelte-user-management/index.html b/examples/user-management/svelte-user-management/index.html deleted file mode 100644 index 5ec426cf8b003..0000000000000 --- a/examples/user-management/svelte-user-management/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Supabase Svelte User Management - - -
    - - - diff --git a/examples/user-management/svelte-user-management/package-lock.json b/examples/user-management/svelte-user-management/package-lock.json deleted file mode 100644 index c4e3bb78e6561..0000000000000 --- a/examples/user-management/svelte-user-management/package-lock.json +++ /dev/null @@ -1,2875 +0,0 @@ -{ - "name": "svelte-user-management", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "svelte-user-management", - "version": "0.0.0", - "dependencies": { - "@supabase/supabase-js": "^2.0.4" - }, - "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.1", - "@tsconfig/svelte": "^3.0.0", - "svelte": "^3.49.0", - "svelte-check": "^2.8.0", - "svelte-preprocess": "^4.10.7", - "tslib": "^2.4.0", - "typescript": "^4.6.4", - "vite": "^3.2.7" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "dependencies": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.2.tgz", - "integrity": "sha512-8tTVbNuraeDchBaArNbwaZLpO0feM7BRSdZU5yeM4Clasx2p1p1CYBoWh+VgxZlxiark49HXummkHqKztbl8lA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.2.1", - "debug": "^4.3.4", - "deepmerge": "^4.2.2", - "kleur": "^4.1.5", - "magic-string": "^0.26.2", - "svelte-hmr": "^0.14.12" - }, - "engines": { - "node": "^14.18.0 || >= 16" - }, - "peerDependencies": { - "diff-match-patch": "^1.0.5", - "svelte": "^3.44.0", - "vite": "^3.0.0" - }, - "peerDependenciesMeta": { - "diff-match-patch": { - "optional": true - } - } - }, - "node_modules/@tsconfig/svelte": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-3.0.0.tgz", - "integrity": "sha512-pYrtLtOwku/7r1i9AMONsJMVYAtk3hzOfiGNekhtq5tYBGA7unMve8RvUclKLMT3PrihvJqUmzsRGh0RP84hKg==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", - "dev": true - }, - "node_modules/@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "node_modules/@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", - "dev": true - }, - "node_modules/@types/sass": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", - "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", - "dev": true, - "dependencies": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" - } - }, - "node_modules/sorcery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", - "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0", - "sourcemap-codec": "^1.3.0" - }, - "bin": { - "sorcery": "bin/index.js" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svelte": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.49.0.tgz", - "integrity": "sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/svelte-check": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.8.1.tgz", - "integrity": "sha512-cibyY1sgt3ONIDnQbSgV2X9AJFhwEslRHNo95lijrYfPzVEvTvbmL2ohsUyqB5L7j1GhLXtQbjCJ4lZZ/fwbeQ==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.9", - "chokidar": "^3.4.1", - "fast-glob": "^3.2.7", - "import-fresh": "^3.2.1", - "picocolors": "^1.0.0", - "sade": "^1.7.4", - "svelte-preprocess": "^4.0.0", - "typescript": "*" - }, - "bin": { - "svelte-check": "bin/svelte-check" - }, - "peerDependencies": { - "svelte": "^3.24.0" - } - }, - "node_modules/svelte-hmr": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.12.tgz", - "integrity": "sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w==", - "dev": true, - "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" - }, - "peerDependencies": { - "svelte": ">=3.19.0" - } - }, - "node_modules/svelte-preprocess": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", - "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@types/pug": "^2.0.4", - "@types/sass": "^1.16.0", - "detect-indent": "^6.0.0", - "magic-string": "^0.25.7", - "sorcery": "^0.10.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">= 9.11.2" - }, - "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3 || ^4.0.0", - "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": "^0.55.0", - "sugarss": "^2.0.0", - "svelte": "^3.23.0", - "typescript": "^3.9.5 || ^4.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/svelte-preprocess/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/vite": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", - "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", - "dev": true, - "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - } - }, - "dependencies": { - "@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "dev": true, - "optional": true - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "requires": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "@sveltejs/vite-plugin-svelte": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.2.tgz", - "integrity": "sha512-8tTVbNuraeDchBaArNbwaZLpO0feM7BRSdZU5yeM4Clasx2p1p1CYBoWh+VgxZlxiark49HXummkHqKztbl8lA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.2.1", - "debug": "^4.3.4", - "deepmerge": "^4.2.2", - "kleur": "^4.1.5", - "magic-string": "^0.26.2", - "svelte-hmr": "^0.14.12" - } - }, - "@tsconfig/svelte": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-3.0.0.tgz", - "integrity": "sha512-pYrtLtOwku/7r1i9AMONsJMVYAtk3hzOfiGNekhtq5tYBGA7unMve8RvUclKLMT3PrihvJqUmzsRGh0RP84hKg==", - "dev": true - }, - "@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", - "dev": true - }, - "@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", - "dev": true - }, - "@types/sass": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", - "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "dev": true, - "optional": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true - }, - "magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "requires": { - "mri": "^1.1.0" - } - }, - "sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", - "dev": true, - "requires": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" - } - }, - "sorcery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", - "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0", - "sourcemap-codec": "^1.3.0" - } - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "svelte": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.49.0.tgz", - "integrity": "sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==", - "dev": true - }, - "svelte-check": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.8.1.tgz", - "integrity": "sha512-cibyY1sgt3ONIDnQbSgV2X9AJFhwEslRHNo95lijrYfPzVEvTvbmL2ohsUyqB5L7j1GhLXtQbjCJ4lZZ/fwbeQ==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.9", - "chokidar": "^3.4.1", - "fast-glob": "^3.2.7", - "import-fresh": "^3.2.1", - "picocolors": "^1.0.0", - "sade": "^1.7.4", - "svelte-preprocess": "^4.0.0", - "typescript": "*" - } - }, - "svelte-hmr": { - "version": "0.14.12", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.12.tgz", - "integrity": "sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w==", - "dev": true, - "requires": {} - }, - "svelte-preprocess": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", - "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==", - "dev": true, - "requires": { - "@types/pug": "^2.0.4", - "@types/sass": "^1.16.0", - "detect-indent": "^6.0.0", - "magic-string": "^0.25.7", - "sorcery": "^0.10.0", - "strip-indent": "^3.0.0" - }, - "dependencies": { - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - } - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "vite": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", - "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", - "dev": true, - "requires": { - "esbuild": "^0.15.9", - "fsevents": "~2.3.2", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - } - } -} diff --git a/examples/user-management/svelte-user-management/package.json b/examples/user-management/svelte-user-management/package.json deleted file mode 100644 index 520ec9b77f94a..0000000000000 --- a/examples/user-management/svelte-user-management/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "svelte-user-management", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview", - "check": "svelte-check --tsconfig ./tsconfig.json" - }, - "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.1", - "@tsconfig/svelte": "^3.0.0", - "svelte": "^3.49.0", - "svelte-check": "^2.8.0", - "svelte-preprocess": "^4.10.7", - "tslib": "^2.4.0", - "typescript": "^4.6.4", - "vite": "^4.3.9" - }, - "dependencies": { - "@supabase/supabase-js": "^2.0.4" - } -} diff --git a/examples/user-management/svelte-user-management/public/vite.svg b/examples/user-management/svelte-user-management/public/vite.svg deleted file mode 100644 index e7b8dfb1b2a60..0000000000000 --- a/examples/user-management/svelte-user-management/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/user-management/svelte-user-management/src/App.svelte b/examples/user-management/svelte-user-management/src/App.svelte deleted file mode 100644 index 0d2b3e5715cd2..0000000000000 --- a/examples/user-management/svelte-user-management/src/App.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - -
    - {#if !session} - - {:else} - - {/if} -
    \ No newline at end of file diff --git a/examples/user-management/svelte-user-management/src/app.css b/examples/user-management/svelte-user-management/src/app.css deleted file mode 100644 index d6385cafa26e1..0000000000000 --- a/examples/user-management/svelte-user-management/src/app.css +++ /dev/null @@ -1,372 +0,0 @@ -html, -body { - --custom-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, - Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; - --custom-bg-color: #101010; - --custom-panel-color: #222; - --custom-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.8); - --custom-color: #fff; - --custom-color-brand: #24b47e; - --custom-color-secondary: #666; - --custom-border: 1px solid #333; - --custom-border-radius: 5px; - --custom-spacing: 5px; - - padding: 0; - margin: 0; - font-family: var(--custom-font-family); - background-color: var(--custom-bg-color); -} - -* { - color: var(--custom-color); - font-family: var(--custom-font-family); - box-sizing: border-box; -} - -html, -body, -#__next { - height: 100vh; - width: 100vw; - overflow-x: hidden; -} - -/* Grid */ - -.container { - width: 90%; - margin-left: auto; - margin-right: auto; -} -.row { - position: relative; - width: 100%; -} -.row [class^='col'] { - float: left; - margin: 0.5rem 2%; - min-height: 0.125rem; -} -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-10, -.col-11, -.col-12 { - width: 96%; -} -.col-1-sm { - width: 4.33%; -} -.col-2-sm { - width: 12.66%; -} -.col-3-sm { - width: 21%; -} -.col-4-sm { - width: 29.33%; -} -.col-5-sm { - width: 37.66%; -} -.col-6-sm { - width: 46%; -} -.col-7-sm { - width: 54.33%; -} -.col-8-sm { - width: 62.66%; -} -.col-9-sm { - width: 71%; -} -.col-10-sm { - width: 79.33%; -} -.col-11-sm { - width: 87.66%; -} -.col-12-sm { - width: 96%; -} -.row::after { - content: ''; - display: table; - clear: both; -} -.hidden-sm { - display: none; -} - -@media only screen and (min-width: 33.75em) { - /* 540px */ - .container { - width: 80%; - } -} - -@media only screen and (min-width: 45em) { - /* 720px */ - .col-1 { - width: 4.33%; - } - .col-2 { - width: 12.66%; - } - .col-3 { - width: 21%; - } - .col-4 { - width: 29.33%; - } - .col-5 { - width: 37.66%; - } - .col-6 { - width: 46%; - } - .col-7 { - width: 54.33%; - } - .col-8 { - width: 62.66%; - } - .col-9 { - width: 71%; - } - .col-10 { - width: 79.33%; - } - .col-11 { - width: 87.66%; - } - .col-12 { - width: 96%; - } - .hidden-sm { - display: block; - } -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .container { - width: 75%; - max-width: 60rem; - } -} - -/* Forms */ - -label { - display: block; - margin: 5px 0; - color: var(--custom-color-secondary); - font-size: 0.8rem; - text-transform: uppercase; -} - -input { - width: 100%; - border-radius: 5px; - border: var(--custom-border); - padding: 8px; - font-size: 0.9rem; - background-color: var(--custom-bg-color); - color: var(--custom-color); -} - -input[disabled] { - color: var(--custom-color-secondary); -} - -/* Utils */ - -.block { - display: block; - width: 100%; -} -.inline-block { - display: inline-block; - width: 100%; -} -.flex { - display: flex; -} -.flex.column { - flex-direction: column; -} -.flex.row { - flex-direction: row; -} -.flex.flex-1 { - flex: 1 1 0; -} -.flex-end { - justify-content: flex-end; -} -.flex-center { - justify-content: center; -} -.items-center { - align-items: center; -} -.text-sm { - font-size: 0.8rem; - font-weight: 300; -} -.text-right { - text-align: right; -} -.font-light { - font-weight: 300; -} -.opacity-half { - opacity: 50%; -} - -/* Button */ - -button, -.button { - color: var(--custom-color); - border: var(--custom-border); - background-color: var(--custom-bg-color); - display: inline-block; - text-align: center; - border-radius: var(--custom-border-radius); - padding: 0.5rem 1rem; - cursor: pointer; - text-align: center; - font-size: 0.9rem; - text-transform: uppercase; -} - -button.primary, -.button.primary { - background-color: var(--custom-color-brand); - border: 1px solid var(--custom-color-brand); -} - -/* Widgets */ - -.card { - width: 100%; - display: block; - border: var(--custom-border); - border-radius: var(--custom-border-radius); - padding: var(--custom-spacing); -} - -.avatar { - border-radius: var(--custom-border-radius); - overflow: hidden; - max-width: 100%; -} -.avatar.image { - object-fit: cover; -} -.avatar.no-image { - background-color: #333; - border: 1px solid rgb(200, 200, 200); - border-radius: 5px; -} - -.footer { - position: absolute; - max-width: 100%; - bottom: 0; - left: 0; - right: 0; - display: flex; - flex-flow: row; - border-top: var(--custom-border); - background-color: var(--custom-bg-color); -} -.footer div { - padding: var(--custom-spacing); - display: flex; - align-items: center; - width: 100%; -} -.footer div > img { - height: 20px; - margin-left: 10px; -} -.footer > div:first-child { - display: none; -} -.footer > div:nth-child(2) { - justify-content: left; -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .footer > div:first-child { - display: flex; - } - .footer > div:nth-child(2) { - justify-content: center; - } -} - -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -.mainHeader { - width: 100%; - font-size: 1.3rem; - margin-bottom: 20px; -} - -.avatarPlaceholder { - border: var(--custom-border); - border-radius: var(--custom-border-radius); - width: 35px; - height: 35px; - background-color: rgba(255, 255, 255, 0.2); - display: flex; - align-items: center; - justify-content: center; -} - -.form-widget { - display: flex; - flex-direction: column; - gap: 20px; -} - -.form-widget > .button { - display: flex; - align-items: center; - justify-content: center; - border: none; - background-color: #444444; - text-transform: none !important; - transition: all 0.2s ease; -} - -.form-widget .button:hover { - background-color: #2a2a2a; -} - -.form-widget .button > .loader { - width: 17px; - animation: spin 1s linear infinite; - filter: invert(1); -} diff --git a/examples/user-management/svelte-user-management/src/assets/svelte.svg b/examples/user-management/svelte-user-management/src/assets/svelte.svg deleted file mode 100644 index c5e08481f8aed..0000000000000 --- a/examples/user-management/svelte-user-management/src/assets/svelte.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/user-management/svelte-user-management/src/lib/Account.svelte b/examples/user-management/svelte-user-management/src/lib/Account.svelte deleted file mode 100644 index e34b33f95b2f0..0000000000000 --- a/examples/user-management/svelte-user-management/src/lib/Account.svelte +++ /dev/null @@ -1,92 +0,0 @@ - - -
    - -
    Email: {session.user.email}
    -
    - - -
    -
    - - -
    -
    - -
    - - diff --git a/examples/user-management/svelte-user-management/src/lib/Auth.svelte b/examples/user-management/svelte-user-management/src/lib/Auth.svelte deleted file mode 100644 index 9de46d088248a..0000000000000 --- a/examples/user-management/svelte-user-management/src/lib/Auth.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - -
    -
    -

    Supabase + Svelte

    -

    Sign in via magic link with your email below

    -
    -
    - - -
    -
    - -
    -
    -
    -
    diff --git a/examples/user-management/svelte-user-management/src/lib/Avatar.svelte b/examples/user-management/svelte-user-management/src/lib/Avatar.svelte deleted file mode 100644 index 91f418e1e900f..0000000000000 --- a/examples/user-management/svelte-user-management/src/lib/Avatar.svelte +++ /dev/null @@ -1,94 +0,0 @@ - - -
    - {#if avatarUrl} - {avatarUrl - {:else} -
    - {/if} -
    - - - - -
    -
    diff --git a/examples/user-management/svelte-user-management/src/main.ts b/examples/user-management/svelte-user-management/src/main.ts deleted file mode 100644 index 5c1f795f9f55a..0000000000000 --- a/examples/user-management/svelte-user-management/src/main.ts +++ /dev/null @@ -1,8 +0,0 @@ -import './app.css' -import App from './App.svelte' - -const app = new App({ - target: document.getElementById('app') -}) - -export default app diff --git a/examples/user-management/svelte-user-management/src/schema.ts b/examples/user-management/svelte-user-management/src/schema.ts deleted file mode 100644 index 7800a5bd9ef19..0000000000000 --- a/examples/user-management/svelte-user-management/src/schema.ts +++ /dev/null @@ -1,40 +0,0 @@ -export type Json = string | number | boolean | null | { [key: string]: Json } | Json[] - -export interface Database { - public: { - Tables: { - profiles: { - Row: { - id: string - updated_at: string | null - username: string | null - avatar_url: string | null - website: string | null - } - Insert: { - id: string - updated_at?: string | null - username?: string | null - avatar_url?: string | null - website?: string | null - } - Update: { - id?: string - updated_at?: string | null - username?: string | null - avatar_url?: string | null - website?: string | null - } - } - } - Views: { - [_ in never]: never - } - Functions: { - [_ in never]: never - } - Enums: { - [_ in never]: never - } - } -} diff --git a/examples/user-management/svelte-user-management/src/supabaseClient.ts b/examples/user-management/svelte-user-management/src/supabaseClient.ts deleted file mode 100644 index 1bf5c30842c0e..0000000000000 --- a/examples/user-management/svelte-user-management/src/supabaseClient.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createClient } from '@supabase/supabase-js' -import type { Database } from './schema' - -const supabaseUrl = import.meta.env.VITE_SUPABASE_URL -const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY - -export const supabase = createClient(supabaseUrl, supabaseAnonKey) diff --git a/examples/user-management/svelte-user-management/src/vite-env.d.ts b/examples/user-management/svelte-user-management/src/vite-env.d.ts deleted file mode 100644 index 4078e7476a2ea..0000000000000 --- a/examples/user-management/svelte-user-management/src/vite-env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/examples/user-management/svelte-user-management/svelte.config.js b/examples/user-management/svelte-user-management/svelte.config.js deleted file mode 100644 index 3630bb3963b62..0000000000000 --- a/examples/user-management/svelte-user-management/svelte.config.js +++ /dev/null @@ -1,7 +0,0 @@ -import sveltePreprocess from 'svelte-preprocess' - -export default { - // Consult https://github.com/sveltejs/svelte-preprocess - // for more information about preprocessors - preprocess: sveltePreprocess() -} diff --git a/examples/user-management/svelte-user-management/tsconfig.json b/examples/user-management/svelte-user-management/tsconfig.json deleted file mode 100644 index d38303196ae8d..0000000000000 --- a/examples/user-management/svelte-user-management/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": "@tsconfig/svelte/tsconfig.json", - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "module": "ESNext", - "resolveJsonModule": true, - "baseUrl": ".", - /** - * Typecheck JS in `.svelte` and `.js` files by default. - * Disable checkJs if you'd like to use dynamic types in JS. - * Note that setting allowJs false does not prevent the use - * of JS in `.svelte` files. - */ - "allowJs": true, - "checkJs": true, - "isolatedModules": true - }, - "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/examples/user-management/svelte-user-management/tsconfig.node.json b/examples/user-management/svelte-user-management/tsconfig.node.json deleted file mode 100644 index 65dbdb96ae5dc..0000000000000 --- a/examples/user-management/svelte-user-management/tsconfig.node.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "ESNext", - "moduleResolution": "Node" - }, - "include": ["vite.config.ts"] -} diff --git a/examples/user-management/svelte-user-management/vite.config.ts b/examples/user-management/svelte-user-management/vite.config.ts deleted file mode 100644 index 401b4d4bd6b14..0000000000000 --- a/examples/user-management/svelte-user-management/vite.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig } from 'vite' -import { svelte } from '@sveltejs/vite-plugin-svelte' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [svelte()] -}) diff --git a/examples/user-management/sveltekit-user-management/.env.example b/examples/user-management/sveltekit-user-management/.env.example deleted file mode 100644 index e9e30a5295b3c..0000000000000 --- a/examples/user-management/sveltekit-user-management/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -# Update these with your Supabase details from your project settings > API -PUBLIC_SUPABASE_URL=https://your-project.supabase.co -PUBLIC_SUPABASE_ANON_KEY=your-anon-key \ No newline at end of file diff --git a/examples/user-management/sveltekit-user-management/.gitignore b/examples/user-management/sveltekit-user-management/.gitignore deleted file mode 100644 index 64007bdd28645..0000000000000 --- a/examples/user-management/sveltekit-user-management/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -.DS_Store -node_modules -/build -/.svelte-kit -/package -.env -.env.* -!.env.example -.vercel -.output diff --git a/examples/user-management/sveltekit-user-management/.npmrc b/examples/user-management/sveltekit-user-management/.npmrc deleted file mode 100644 index b6f27f1359546..0000000000000 --- a/examples/user-management/sveltekit-user-management/.npmrc +++ /dev/null @@ -1 +0,0 @@ -engine-strict=true diff --git a/examples/user-management/sveltekit-user-management/.prettierignore b/examples/user-management/sveltekit-user-management/.prettierignore deleted file mode 100644 index 38972655faff0..0000000000000 --- a/examples/user-management/sveltekit-user-management/.prettierignore +++ /dev/null @@ -1,13 +0,0 @@ -.DS_Store -node_modules -/build -/.svelte-kit -/package -.env -.env.* -!.env.example - -# Ignore files for PNPM, NPM and YARN -pnpm-lock.yaml -package-lock.json -yarn.lock diff --git a/examples/user-management/sveltekit-user-management/.prettierrc b/examples/user-management/sveltekit-user-management/.prettierrc deleted file mode 100644 index 3070a12be94d8..0000000000000 --- a/examples/user-management/sveltekit-user-management/.prettierrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "useTabs": true, - "semi": false, - "singleQuote": true, - "trailingComma": "none", - "printWidth": 100, - "plugins": ["prettier-plugin-svelte"], - "pluginSearchDirs": ["."], - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] -} diff --git a/examples/user-management/sveltekit-user-management/README.md b/examples/user-management/sveltekit-user-management/README.md deleted file mode 100644 index 57ff0a0966471..0000000000000 --- a/examples/user-management/sveltekit-user-management/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# Supabase SvelteKit User Management - -## Build from scratch - -### 1. Create new project - -Sign up to Supabase - [https://supabase.com/dashboard](https://supabase.com/dashboard) and create a new project. Wait for your database to start. - -### 2. Run "User Management" Quickstart - -Once your database has started, head over to your project's `SQL Editor` and run the "User Management Starter" quickstart. On the `SQL editor` page, scroll down until you see `User Management Starter: Sets up a public Profiles table which you can access with your API`. Click that, then click `RUN` to execute that query and create a new `profiles` table. When that's finished, head over to the `Table Editor` and see your new `profiles` table. - -### 3. Get the URL and Key - -Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. - -The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). - -![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) - -**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. - -### 4. Env vars - -Create `.env.local` from the `.env.example` file and populate this file with your URL and Key. - -### 5. Run the application - -Run the application: `npm run dev`. Open your browser to `https://localhost:5173/` and you are ready to go 🚀. - -## Supabase details - -### Postgres Row level security - -This project uses very high-level Authorization using Postgres' Role Level Security. -When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. -When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. -We can use these details to provide fine-grained control over what each user can and cannot do. - -This is a trimmed-down schema, with the policies: - -```sql --- Create a table for Public Profiles -create table profiles ( - id uuid references auth.users not null, - updated_at timestamp with time zone, - username text unique, - avatar_url text, - website text, - primary key (id), - unique(username), - constraint username_length check (char_length(username) >= 3) -); -alter table profiles enable row level security; -create policy "Public profiles are viewable by everyone." - on profiles for select - using ( true ); -create policy "Users can insert their own profile." - on profiles for insert - with check ( auth.uid() = id ); -create policy "Users can update own profile." - on profiles for update - using ( auth.uid() = id ); --- Set up Realtime! -begin; - drop publication if exists supabase_realtime; - create publication supabase_realtime; -commit; -alter publication supabase_realtime add table profiles; --- Set up Storage! -insert into storage.buckets (id, name) -values ('avatars', 'avatars'); -create policy "Avatar images are publicly accessible." - on storage.objects for select - using ( bucket_id = 'avatars' ); -create policy "Anyone can upload an avatar." - on storage.objects for insert - with check ( bucket_id = 'avatars' ); -``` - -## Authors - -- [Supabase](https://supabase.com) - -Supabase is open source. We'd love for you to follow along and get involved at https://github.com/supabase/supabase \ No newline at end of file diff --git a/examples/user-management/sveltekit-user-management/package-lock.json b/examples/user-management/sveltekit-user-management/package-lock.json deleted file mode 100644 index 5277f482c431b..0000000000000 --- a/examples/user-management/sveltekit-user-management/package-lock.json +++ /dev/null @@ -1,1902 +0,0 @@ -{ - "name": "sveltekit-user-management", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "sveltekit-user-management", - "version": "0.0.1", - "dependencies": { - "@supabase/auth-helpers-sveltekit": "^0.10.0", - "@supabase/auth-ui-shared": "^0.1.6", - "@supabase/auth-ui-svelte": "^0.2.2", - "@supabase/supabase-js": "^2.21.0" - }, - "devDependencies": { - "@fontsource/fira-mono": "^4.5.10", - "@neoconfetti/svelte": "^1.0.0", - "@sveltejs/adapter-auto": "^2.0.1", - "@sveltejs/kit": "^1.16.3", - "@types/cookie": "^0.5.1", - "prettier": "^2.8.8", - "prettier-plugin-svelte": "^2.10.0", - "svelte": "^3.59.1", - "svelte-check": "^3.3.2", - "svelte-preprocess": "^5.0.3", - "tslib": "^2.5.0", - "typescript": "^5.0.4", - "vite": "^4.3.9" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz", - "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz", - "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz", - "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz", - "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz", - "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz", - "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz", - "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz", - "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz", - "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz", - "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz", - "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz", - "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz", - "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz", - "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz", - "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz", - "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz", - "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz", - "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz", - "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz", - "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz", - "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz", - "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@fontsource/fira-mono": { - "version": "4.5.10", - "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.10.tgz", - "integrity": "sha512-bxUnRP8xptGRo8YXeY073DSpfK74XpSb0ZyRNpHV9WvLnJ7TwPOjZll8hTMin7zLC6iOp59pDZ8EQDj1gzgAQQ==", - "dev": true - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@neoconfetti/svelte": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@neoconfetti/svelte/-/svelte-1.0.0.tgz", - "integrity": "sha512-SmksyaJAdSlMa9cTidVSIqYo1qti+WTsviNDwgjNVm+KQ3DRP2Df9umDIzC4vCcpEYY+chQe0i2IKnLw03AT8Q==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "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", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "node_modules/@stitches/core": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", - "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==" - }, - "node_modules/@supabase/auth-helpers-shared": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-shared/-/auth-helpers-shared-0.4.0.tgz", - "integrity": "sha512-5wlCGb4HZ46W2fg8tdi22ZU1GAIOe3YxXrTgvAjWVapNFN+PiH5cFIbz51ZgZRK1TokRZ01pB1GEFy4e+NZE+A==", - "dependencies": { - "jose": "^4.14.3" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.19.0" - } - }, - "node_modules/@supabase/auth-helpers-sveltekit": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-sveltekit/-/auth-helpers-sveltekit-0.10.0.tgz", - "integrity": "sha512-Pq0BiN1ms+8Q7yxoRufhoayvI9YoDYTkIJ8EXy3MJeeI3n2meNUF8x6h/CRsWQ79pLmulESzIiJTkSVVGn/YlQ==", - "dependencies": { - "@supabase/auth-helpers-shared": "0.4.0" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.19.0", - "@sveltejs/kit": "^1.15.4" - } - }, - "node_modules/@supabase/auth-ui-shared": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@supabase/auth-ui-shared/-/auth-ui-shared-0.1.6.tgz", - "integrity": "sha512-dBlP2XR5KSSCBMgkWJMkc2UVA21V5AobKmekwIiHVvyVtzAiFqE5XWJiPV+kMlnRLzFXDeA0Z/CqdKTL/Kbs4A==", - "peerDependencies": { - "@supabase/supabase-js": "^2.21.0" - } - }, - "node_modules/@supabase/auth-ui-svelte": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@supabase/auth-ui-svelte/-/auth-ui-svelte-0.2.2.tgz", - "integrity": "sha512-LDXpyus3wjjqLCuZgneVZuPtNvE6ztDAEOgsojpCGSjHLkM5RrKOPBFGTiLlN6awu055v2OFHS2EV5N6Fba0sQ==", - "dependencies": { - "@stitches/core": "^1.2.8", - "@supabase/auth-ui-shared": "0.1.6", - "svelte": "^3.55.1" - }, - "peerDependencies": { - "@supabase/supabase-js": "^2.21.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.1.tgz", - "integrity": "sha512-bIR1Puae6W+1/MzPfYBWOG/SCWGo4B5CB7c0ZZksvliNEAzhxNBJ0UFKYINcGdGtxG8ZC+1xr3utWpNZNwnoRw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.24.0.tgz", - "integrity": "sha512-ZsH4K5cbMTjfMytXaDYVYs9l9igmlZFxiwXn7J2IP/CklWR5qmLCma+dvat5rccPLITVkN6oAZbKxDzW+pEgCg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.6.0.tgz", - "integrity": "sha512-HCphMC6KjtoaGcowSlkKRVKBOlNpmKWE2CwoumMwwsfhnRxplIy1zBiIYIL3zIYo/Bm20H/1C6enqjBeTvSwXg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.2.tgz", - "integrity": "sha512-Fi6xAl5PUkqnjl3wo4rdcQIbMG3+yTRX1aUZe/yfvTG84RMvmCXJ1yN6MmafVLeZpU1xkaz5Vx4L0tnHcLiy6w==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "@types/websocket": "^1.0.3", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.1.tgz", - "integrity": "sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.21.0.tgz", - "integrity": "sha512-FW3ZzBoc4orSgfX0dXrmJoXAcI/hiekmqXTkN64vjtUF2Urp3UjyAf71UTtV9Jl6ejHoe3K++e0+Rg9zKUJh5w==", - "dependencies": { - "@supabase/functions-js": "^2.1.0", - "@supabase/gotrue-js": "^2.23.0", - "@supabase/postgrest-js": "^1.1.1", - "@supabase/realtime-js": "^2.7.2", - "@supabase/storage-js": "^2.5.1", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@sveltejs/adapter-auto": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.0.1.tgz", - "integrity": "sha512-anxxYMcQy7HWSKxN4YNaVcgNzCHtNFwygq72EA1Xv7c+5gSECOJ1ez1PYoLciPiFa7A3XBvMDQXUFJ2eqLDtAA==", - "dev": true, - "dependencies": { - "import-meta-resolve": "^3.0.0" - }, - "peerDependencies": { - "@sveltejs/kit": "^1.0.0" - } - }, - "node_modules/@sveltejs/kit": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.16.3.tgz", - "integrity": "sha512-8uv0udYRpVuE1BweFidcWHfL+u2gAANKmvIal1dN/FWPBl7DJYbt9zYEtr3bNTiXystT8Sn0Wp54RfwpbPqHjQ==", - "hasInstallScript": true, - "dependencies": { - "@sveltejs/vite-plugin-svelte": "^2.1.1", - "@types/cookie": "^0.5.1", - "cookie": "^0.5.0", - "devalue": "^4.3.0", - "esm-env": "^1.0.0", - "kleur": "^4.1.5", - "magic-string": "^0.30.0", - "mime": "^3.0.0", - "sade": "^1.8.1", - "set-cookie-parser": "^2.6.0", - "sirv": "^2.0.2", - "tiny-glob": "^0.2.9", - "undici": "~5.22.0" - }, - "bin": { - "svelte-kit": "svelte-kit.js" - }, - "engines": { - "node": "^16.14 || >=18" - }, - "peerDependencies": { - "svelte": "^3.54.0", - "vite": "^4.0.0" - } - }, - "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.1.1.tgz", - "integrity": "sha512-7YeBDt4us0FiIMNsVXxyaP4Hwyn2/v9x3oqStkHU3ZdIc5O22pGwUwH33wUqYo+7Itdmo8zxJ45Qvfm3H7UUjQ==", - "dependencies": { - "debug": "^4.3.4", - "deepmerge": "^4.3.1", - "kleur": "^4.1.5", - "magic-string": "^0.30.0", - "svelte-hmr": "^0.15.1", - "vitefu": "^0.2.4" - }, - "engines": { - "node": "^14.18.0 || >= 16" - }, - "peerDependencies": { - "svelte": "^3.54.0", - "vite": "^4.0.0" - } - }, - "node_modules/@types/cookie": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz", - "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==" - }, - "node_modules/@types/node": { - "version": "18.16.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", - "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==" - }, - "node_modules/@types/phoenix": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.6.tgz", - "integrity": "sha512-e7jZ6I9uyRGsg7MNwQcarmBvRlbGb9DibbocE9crVnxqsy6C23RMxLWbJ2CQ3vgCW7taoL1L+F02EcjA6ld7XA==" - }, - "node_modules/@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", - "dev": true - }, - "node_modules/@types/websocket": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", - "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/devalue": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.0.tgz", - "integrity": "sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==" - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.17.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz", - "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.18", - "@esbuild/android-arm64": "0.17.18", - "@esbuild/android-x64": "0.17.18", - "@esbuild/darwin-arm64": "0.17.18", - "@esbuild/darwin-x64": "0.17.18", - "@esbuild/freebsd-arm64": "0.17.18", - "@esbuild/freebsd-x64": "0.17.18", - "@esbuild/linux-arm": "0.17.18", - "@esbuild/linux-arm64": "0.17.18", - "@esbuild/linux-ia32": "0.17.18", - "@esbuild/linux-loong64": "0.17.18", - "@esbuild/linux-mips64el": "0.17.18", - "@esbuild/linux-ppc64": "0.17.18", - "@esbuild/linux-riscv64": "0.17.18", - "@esbuild/linux-s390x": "0.17.18", - "@esbuild/linux-x64": "0.17.18", - "@esbuild/netbsd-x64": "0.17.18", - "@esbuild/openbsd-x64": "0.17.18", - "@esbuild/sunos-x64": "0.17.18", - "@esbuild/win32-arm64": "0.17.18", - "@esbuild/win32-ia32": "0.17.18", - "@esbuild/win32-x64": "0.17.18" - } - }, - "node_modules/esm-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", - "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==" - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-meta-resolve": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz", - "integrity": "sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", - "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-svelte": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.0.tgz", - "integrity": "sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==", - "dev": true, - "peerDependencies": { - "prettier": "^1.16.4 || ^2.0.0", - "svelte": "^3.2.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rollup": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.0.tgz", - "integrity": "sha512-ANPhVcyeHvYdQMUyCbczy33nbLzI7RzrBje4uvNiTDJGIMtlKoOStmympwr9OtS1LZxiDmE2wvxHyVhoLtf1KQ==", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", - "dev": true, - "dependencies": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" - }, - "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sorcery": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", - "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.14", - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0" - }, - "bin": { - "sorcery": "bin/sorcery" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/svelte": { - "version": "3.59.1", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.1.tgz", - "integrity": "sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/svelte-check": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.3.2.tgz", - "integrity": "sha512-67j3rI0LDc2DvL0ON/2pvCasVVD3nHDrTkZNr4eITNfo2oFXdw7SIyMOiFj4swu+pjmFQAigytBK1IWyik8dBw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "chokidar": "^3.4.1", - "fast-glob": "^3.2.7", - "import-fresh": "^3.2.1", - "picocolors": "^1.0.0", - "sade": "^1.7.4", - "svelte-preprocess": "^5.0.3", - "typescript": "^5.0.3" - }, - "bin": { - "svelte-check": "bin/svelte-check" - }, - "peerDependencies": { - "svelte": "^3.55.0" - } - }, - "node_modules/svelte-hmr": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz", - "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==", - "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" - }, - "peerDependencies": { - "svelte": ">=3.19.0" - } - }, - "node_modules/svelte-preprocess": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.3.tgz", - "integrity": "sha512-GrHF1rusdJVbOZOwgPWtpqmaexkydznKzy5qIC2FabgpFyKN57bjMUUUqPRfbBXK5igiEWn1uO/DXsa2vJ5VHA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@types/pug": "^2.0.6", - "detect-indent": "^6.1.0", - "magic-string": "^0.27.0", - "sorcery": "^0.11.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">= 14.10.0" - }, - "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3 || ^4.0.0", - "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": "^0.55.0", - "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "svelte": "^3.23.0", - "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/svelte-preprocess/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/undici": { - "version": "5.22.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.0.tgz", - "integrity": "sha512-fR9RXCc+6Dxav4P9VV/sp5w3eFiSdOjJYsbtWfd4s5L5C4ogyuVpdKIVHeW0vV1MloM65/f7W45nR9ZxwVdyiA==", - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/vite": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", - "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vitefu": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", - "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - } - } -} diff --git a/examples/user-management/sveltekit-user-management/package.json b/examples/user-management/sveltekit-user-management/package.json deleted file mode 100644 index 70f85ae4f027f..0000000000000 --- a/examples/user-management/sveltekit-user-management/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "sveltekit-user-management", - "version": "0.0.1", - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --plugin-search-dir . --check .", - "format": "prettier --plugin-search-dir . --write ." - }, - "devDependencies": { - "@fontsource/fira-mono": "^4.5.10", - "@neoconfetti/svelte": "^1.0.0", - "@sveltejs/adapter-auto": "^2.0.1", - "@sveltejs/kit": "^1.16.3", - "@types/cookie": "^0.5.1", - "prettier": "^2.8.8", - "prettier-plugin-svelte": "^2.10.0", - "svelte": "^3.59.1", - "svelte-check": "^3.3.2", - "svelte-preprocess": "^5.0.3", - "tslib": "^2.5.0", - "typescript": "^5.0.4", - "vite": "^4.3.9" - }, - "type": "module", - "dependencies": { - "@supabase/auth-helpers-sveltekit": "^0.10.0", - "@supabase/auth-ui-shared": "^0.1.6", - "@supabase/auth-ui-svelte": "^0.2.2", - "@supabase/supabase-js": "^2.21.0" - } -} diff --git a/examples/user-management/sveltekit-user-management/src/app.d.ts b/examples/user-management/sveltekit-user-management/src/app.d.ts deleted file mode 100644 index 2a6697e93f6bc..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/app.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -// src/app.d.ts -import { SupabaseClient, Session } from '@supabase/supabase-js' -import { Database } from './DatabaseDefinitions' - -declare global { - namespace App { - interface Locals { - supabase: SupabaseClient - getSession(): Promise - } - interface PageData { - session: Session | null - } - // interface Error {} - // interface Platform {} - } -} diff --git a/examples/user-management/sveltekit-user-management/src/app.html b/examples/user-management/sveltekit-user-management/src/app.html deleted file mode 100644 index 8ce87909fb742..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/app.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - %sveltekit.head% - - -
    %sveltekit.body%
    - - diff --git a/examples/user-management/sveltekit-user-management/src/hooks.server.ts b/examples/user-management/sveltekit-user-management/src/hooks.server.ts deleted file mode 100644 index c290a731f88d3..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/hooks.server.ts +++ /dev/null @@ -1,35 +0,0 @@ -// src/hooks.server.ts -import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public' -import { createSupabaseServerClient } from '@supabase/auth-helpers-sveltekit' -import type { Handle } from '@sveltejs/kit' - -export const handle: Handle = async ({ event, resolve }) => { - event.locals.supabase = createSupabaseServerClient({ - supabaseUrl: PUBLIC_SUPABASE_URL, - supabaseKey: PUBLIC_SUPABASE_ANON_KEY, - event - }) - - /** - * a little helper that is written for convenience so that instead - * of calling `const { data: { session } } = await supabase.auth.getSession()` - * you just call this `await getSession()` - */ - event.locals.getSession = async () => { - const { - data: { session } - } = await event.locals.supabase.auth.getSession() - return session - } - - return resolve(event, { - /** - * There´s an issue with `filterSerializedResponseHeaders` not working when using `sequence` - * - * https://github.com/sveltejs/kit/issues/8061 - */ - filterSerializedResponseHeaders(name) { - return name === 'content-range' - } - }) -} diff --git a/examples/user-management/sveltekit-user-management/src/routes/+layout.server.ts b/examples/user-management/sveltekit-user-management/src/routes/+layout.server.ts deleted file mode 100644 index 6f3e61381dd79..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/routes/+layout.server.ts +++ /dev/null @@ -1,6 +0,0 @@ -// src/routes/+layout.server.ts -export const load = async ({ locals: { getSession } }) => { - return { - session: await getSession() - } -} diff --git a/examples/user-management/sveltekit-user-management/src/routes/+layout.svelte b/examples/user-management/sveltekit-user-management/src/routes/+layout.svelte deleted file mode 100644 index d2ac9d5246f07..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/routes/+layout.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - - User Management - - -
    - -
    diff --git a/examples/user-management/sveltekit-user-management/src/routes/+layout.ts b/examples/user-management/sveltekit-user-management/src/routes/+layout.ts deleted file mode 100644 index f22e5d505facf..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/routes/+layout.ts +++ /dev/null @@ -1,21 +0,0 @@ -// src/routes/+layout.ts -import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public' -import { createSupabaseLoadClient } from '@supabase/auth-helpers-sveltekit' -import type { Database } from '../schema' - -export const load = async ({ fetch, data, depends }) => { - depends('supabase:auth') - - const supabase = createSupabaseLoadClient({ - supabaseUrl: PUBLIC_SUPABASE_URL, - supabaseKey: PUBLIC_SUPABASE_ANON_KEY, - event: { fetch }, - serverSession: data.session - }) - - const { - data: { session } - } = await supabase.auth.getSession() - - return { supabase, session } -} diff --git a/examples/user-management/sveltekit-user-management/src/routes/+page.server.ts b/examples/user-management/sveltekit-user-management/src/routes/+page.server.ts deleted file mode 100644 index 9c23fc8e93ef4..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/routes/+page.server.ts +++ /dev/null @@ -1,13 +0,0 @@ -// src/routes/+page.server.ts -import { redirect } from '@sveltejs/kit' - -export const load = async ({ url, locals: { getSession } }) => { - const session = await getSession() - - // if the user is already logged in return them to the account page - if (session) { - throw redirect(303, '/account') - } - - return { url: url.origin } -} diff --git a/examples/user-management/sveltekit-user-management/src/routes/+page.svelte b/examples/user-management/sveltekit-user-management/src/routes/+page.svelte deleted file mode 100644 index 061ef32977843..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/routes/+page.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - - - User Management - - -
    -
    - -
    -
    diff --git a/examples/user-management/sveltekit-user-management/src/routes/account/+page.server.ts b/examples/user-management/sveltekit-user-management/src/routes/account/+page.server.ts deleted file mode 100644 index e75ab83cb73e2..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/routes/account/+page.server.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { fail, redirect } from '@sveltejs/kit' - -export const load = async ({ locals: { supabase, getSession } }) => { - const session = await getSession() - - if (!session) { - throw redirect(303, '/') - } - - const { data: profile } = await supabase - .from('profiles') - .select(`username, full_name, website, avatar_url`) - .eq('id', session.user.id) - .single() - - return { profile } -} - -export const actions = { - update: async ({ request, locals: { supabase, getSession } }) => { - const formData = await request.formData() - const fullName = formData.get('fullName') as string - const username = formData.get('username') as string - const website = formData.get('website') as string - const avatarUrl = formData.get('avatarUrl') as string - - const session = await getSession() - - const { error } = await supabase.from('profiles').upsert({ - id: session?.user.id, - full_name: fullName, - username, - website, - avatar_url: avatarUrl, - updated_at: new Date() - }) - - if (error) { - return fail(500, { - fullName, - username, - website, - avatarUrl - }) - } - - return { - fullName, - username, - website, - avatarUrl - } - }, - signout: async ({ locals: { supabase, getSession } }) => { - const session = await getSession() - if (session) { - await supabase.auth.signOut() - throw redirect(303, '/') - } - } -} diff --git a/examples/user-management/sveltekit-user-management/src/routes/account/+page.svelte b/examples/user-management/sveltekit-user-management/src/routes/account/+page.svelte deleted file mode 100644 index 0c065c06d1440..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/routes/account/+page.svelte +++ /dev/null @@ -1,86 +0,0 @@ - - - -
    -
    - { - profileForm.requestSubmit() - }} - /> -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - - -
    -
    - -
    -
    -
    diff --git a/examples/user-management/sveltekit-user-management/src/routes/account/Avatar.svelte b/examples/user-management/sveltekit-user-management/src/routes/account/Avatar.svelte deleted file mode 100644 index 8ea329dedcea9..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/routes/account/Avatar.svelte +++ /dev/null @@ -1,94 +0,0 @@ - - - -
    - {#if avatarUrl} - {avatarUrl - {:else} -
    - {/if} - - -
    - - -
    -
    diff --git a/examples/user-management/sveltekit-user-management/src/routes/auth/callback/+server.ts b/examples/user-management/sveltekit-user-management/src/routes/auth/callback/+server.ts deleted file mode 100644 index 9d1adb8b9538e..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/routes/auth/callback/+server.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { redirect } from '@sveltejs/kit' - -export const GET = async ({ url, locals: { supabase } }) => { - const code = url.searchParams.get('code') - - if (code) { - await supabase.auth.exchangeCodeForSession(code) - } - - throw redirect(303, '/account') -} diff --git a/examples/user-management/sveltekit-user-management/src/schema.ts b/examples/user-management/sveltekit-user-management/src/schema.ts deleted file mode 100644 index 7800a5bd9ef19..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/schema.ts +++ /dev/null @@ -1,40 +0,0 @@ -export type Json = string | number | boolean | null | { [key: string]: Json } | Json[] - -export interface Database { - public: { - Tables: { - profiles: { - Row: { - id: string - updated_at: string | null - username: string | null - avatar_url: string | null - website: string | null - } - Insert: { - id: string - updated_at?: string | null - username?: string | null - avatar_url?: string | null - website?: string | null - } - Update: { - id?: string - updated_at?: string | null - username?: string | null - avatar_url?: string | null - website?: string | null - } - } - } - Views: { - [_ in never]: never - } - Functions: { - [_ in never]: never - } - Enums: { - [_ in never]: never - } - } -} diff --git a/examples/user-management/sveltekit-user-management/src/styles.css b/examples/user-management/sveltekit-user-management/src/styles.css deleted file mode 100644 index e441f48fbffba..0000000000000 --- a/examples/user-management/sveltekit-user-management/src/styles.css +++ /dev/null @@ -1,372 +0,0 @@ -html, -body { - --custom-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, - Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; - --custom-bg-color: #101010; - --custom-panel-color: #222; - --custom-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.8); - --custom-color: #fff; - --custom-color-brand: #24b47e; - --custom-color-secondary: #666; - --custom-border: 1px solid #333; - --custom-border-radius: 5px; - --custom-spacing: 5px; - - padding: 0; - margin: 0; - font-family: var(--custom-font-family); - background-color: var(--custom-bg-color); -} - -* { - color: var(--custom-color); - font-family: var(--custom-font-family); - box-sizing: border-box; -} - -html, -body, -#__next { - height: 100vh; - width: 100vw; - overflow-x: hidden; -} - -/* Grid */ - -.container { - width: 90%; - margin-left: auto; - margin-right: auto; -} -.row { - position: relative; - width: 100%; -} -.row [class^='col'] { - float: left; - margin: 0.5rem 2%; - min-height: 0.125rem; -} -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-10, -.col-11, -.col-12 { - width: 96%; -} -.col-1-sm { - width: 4.33%; -} -.col-2-sm { - width: 12.66%; -} -.col-3-sm { - width: 21%; -} -.col-4-sm { - width: 29.33%; -} -.col-5-sm { - width: 37.66%; -} -.col-6-sm { - width: 46%; -} -.col-7-sm { - width: 54.33%; -} -.col-8-sm { - width: 62.66%; -} -.col-9-sm { - width: 71%; -} -.col-10-sm { - width: 79.33%; -} -.col-11-sm { - width: 87.66%; -} -.col-12-sm { - width: 96%; -} -.row::after { - content: ''; - display: table; - clear: both; -} -.hidden-sm { - display: none; -} - -@media only screen and (min-width: 33.75em) { - /* 540px */ - .container { - width: 80%; - } -} - -@media only screen and (min-width: 45em) { - /* 720px */ - .col-1 { - width: 4.33%; - } - .col-2 { - width: 12.66%; - } - .col-3 { - width: 21%; - } - .col-4 { - width: 29.33%; - } - .col-5 { - width: 37.66%; - } - .col-6 { - width: 46%; - } - .col-7 { - width: 54.33%; - } - .col-8 { - width: 62.66%; - } - .col-9 { - width: 71%; - } - .col-10 { - width: 79.33%; - } - .col-11 { - width: 87.66%; - } - .col-12 { - width: 96%; - } - .hidden-sm { - display: block; - } -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .container { - width: 75%; - max-width: 60rem; - } -} - -/* Forms */ - -label { - display: block; - margin: 5px 0; - color: var(--custom-color-secondary); - font-size: 0.8rem; - text-transform: uppercase; -} - -input { - width: 100%; - border-radius: 5px; - border: var(--custom-border); - padding: 8px; - font-size: 0.9rem; - background-color: var(--custom-bg-color); - color: var(--custom-color); -} - -input[disabled] { - color: var(--custom-color-secondary); -} - -/* Utils */ - -.block { - display: block; - width: 100%; -} -.inline-block { - display: inline-block; - width: 100%; -} -.flex { - display: flex; -} -.flex.column { - flex-direction: column; -} -.flex.row { - flex-direction: row; -} -.flex.flex-1 { - flex: 1 1 0; -} -.flex-end { - justify-content: flex-end; -} -.flex-center { - justify-content: center; -} -.items-center { - align-items: center; -} -.text-sm { - font-size: 0.8rem; - font-weight: 300; -} -.text-right { - text-align: right; -} -.font-light { - font-weight: 300; -} -.opacity-half { - opacity: 50%; -} - -/* Button */ - -button, -.button { - color: var(--custom-color); - border: var(--custom-border); - background-color: var(--custom-bg-color); - display: inline-block; - text-align: center; - border-radius: var(--custom-border-radius); - padding: 0.5rem 1rem; - cursor: pointer; - text-align: center; - font-size: 0.9rem; - text-transform: uppercase; -} - -button.primary, -.button.primary { - background-color: var(--custom-color-brand); - border: 1px solid var(--custom-color-brand); -} - -/* Widgets */ - -.card { - width: 100%; - display: block; - border: var(--custom-border); - border-radius: var(--custom-border-radius); - padding: var(--custom-spacing); -} - -.avatar { - border-radius: var(--custom-border-radius); - overflow: hidden; - max-width: 100%; -} -.avatar.image { - object-fit: cover; -} -.avatar.no-image { - background-color: #333; - border: 1px solid rgb(200, 200, 200); - border-radius: 5px; -} - -.footer { - position: absolute; - max-width: 100%; - bottom: 0; - left: 0; - right: 0; - display: flex; - flex-flow: row; - border-top: var(--custom-border); - background-color: var(--custom-bg-color); -} -.footer div { - padding: var(--custom-spacing); - display: flex; - align-items: center; - width: 100%; -} -.footer div > img { - height: 20px; - margin-left: 10px; -} -.footer > div:first-child { - display: none; -} -.footer > div:nth-child(2) { - justify-content: left; -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .footer > div:first-child { - display: flex; - } - .footer > div:nth-child(2) { - justify-content: center; - } -} - -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -.mainHeader { - width: 100%; - font-size: 1.3rem; - margin-bottom: 20px; -} - -.avatarPlaceholder { - border: var(--custom-border); - border-radius: var(--custom-border-radius); - width: 35px; - height: 35px; - background-color: rgba(255, 255, 255, 0.2); - display: flex; - align-items: center; - justify-content: center; -} - -.form-widget { - display: flex; - flex-direction: column; - gap: 20px; -} - -.form-widget > .button { - display: flex; - align-items: center; - justify-content: center; - border: none; - background-color: #444444; - text-transform: none !important; - transition: all 0.2s ease; -} - -.form-widget .button:hover { - background-color: #2a2a2a; -} - -.form-widget .button > .loader { - width: 17px; - animation: spin 1s linear infinite; - filter: invert(1); -} diff --git a/examples/user-management/sveltekit-user-management/static/favicon.png b/examples/user-management/sveltekit-user-management/static/favicon.png deleted file mode 100644 index 825b9e65af7c1..0000000000000 Binary files a/examples/user-management/sveltekit-user-management/static/favicon.png and /dev/null differ diff --git a/examples/user-management/sveltekit-user-management/static/robots.txt b/examples/user-management/sveltekit-user-management/static/robots.txt deleted file mode 100644 index e9e57dc4d41b9..0000000000000 --- a/examples/user-management/sveltekit-user-management/static/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/examples/user-management/sveltekit-user-management/svelte.config.js b/examples/user-management/sveltekit-user-management/svelte.config.js deleted file mode 100644 index 892f0c467672d..0000000000000 --- a/examples/user-management/sveltekit-user-management/svelte.config.js +++ /dev/null @@ -1,15 +0,0 @@ -import adapter from '@sveltejs/adapter-auto'; -import preprocess from 'svelte-preprocess'; - -/** @type {import('@sveltejs/kit').Config} */ -const config = { - // Consult https://github.com/sveltejs/svelte-preprocess - // for more information about preprocessors - preprocess: preprocess(), - - kit: { - adapter: adapter() - } -}; - -export default config; diff --git a/examples/user-management/sveltekit-user-management/tsconfig.json b/examples/user-management/sveltekit-user-management/tsconfig.json deleted file mode 100644 index 6ae0c8c44d08a..0000000000000 --- a/examples/user-management/sveltekit-user-management/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "./.svelte-kit/tsconfig.json", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true - } - // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias - // - // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes - // from the referenced tsconfig.json - TypeScript does not merge them in -} diff --git a/examples/user-management/sveltekit-user-management/vite.config.ts b/examples/user-management/sveltekit-user-management/vite.config.ts deleted file mode 100644 index 16950342c1a41..0000000000000 --- a/examples/user-management/sveltekit-user-management/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { sveltekit } from '@sveltejs/kit/vite'; -import type { UserConfig } from 'vite'; - -const config: UserConfig = { - plugins: [sveltekit()] -}; - -export default config; diff --git a/examples/user-management/vue3-user-management/.env.example b/examples/user-management/vue3-user-management/.env.example deleted file mode 100644 index 62e54e9d80595..0000000000000 --- a/examples/user-management/vue3-user-management/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -VITE_SUPABASE_URL=https://your-project-ref.supabase.co -VITE_SUPABASE_ANON_KEY=your-anon-key \ No newline at end of file diff --git a/examples/user-management/vue3-user-management/.gitignore b/examples/user-management/vue3-user-management/.gitignore deleted file mode 100644 index a547bf36d8d11..0000000000000 --- a/examples/user-management/vue3-user-management/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/examples/user-management/vue3-user-management/.prettierrc b/examples/user-management/vue3-user-management/.prettierrc deleted file mode 100644 index 450afccdd2212..0000000000000 --- a/examples/user-management/vue3-user-management/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 2, - "useTabs": true, - "semi": false, - "singleQuote": true, - "printWidth": 100, - "endOfLine": "lf" -} diff --git a/examples/user-management/vue3-user-management/README.md b/examples/user-management/vue3-user-management/README.md deleted file mode 100644 index 5f56e8c1646ed..0000000000000 --- a/examples/user-management/vue3-user-management/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# Supabase Vue 3 User Management - -This repo is a quick sample of how you can get started building apps using Vue 3 and Supabase. You can find a step by step guide of how to build out this app in the [Quickstart: Vue guide](https://supabase.io/docs/guides/with-vue-3). - -This repo will demonstrate how to: -- sign users in with Supabase Auth using [magic link](https://supabase.io/docs/reference/dart/auth-signin#sign-in-with-magic-link) -- store and retrieve data with [Supabase database](https://supabase.io/docs/guides/database) -- store image files in [Supabase storage](https://supabase.io/docs/guides/storage) - -## Getting Started - -Before running this app, you need to create a Supabase project and copy [your credentials](https://supabase.io/docs/guides/with-vue-3#get-the-api-keys) to `.env`. - -Run the following command to launch it on `localhost:5173` -```bash -npm run dev -``` - -## Database Schema - -```sql --- Create a table for public "profiles" -create table profiles ( - id uuid references auth.users not null, - updated_at timestamp with time zone, - username text unique, - avatar_url text, - website text, - - primary key (id), - unique(username), - constraint username_length check (char_length(username) >= 3) -); - -alter table profiles enable row level security; - -create policy "Public profiles are viewable by everyone." - on profiles for select - using ( true ); - -create policy "Users can insert their own profile." - on profiles for insert - with check ( auth.uid() = id ); - -create policy "Users can update own profile." - on profiles for update - using ( auth.uid() = id ); - --- Set up Realtime! -begin; - drop publication if exists supabase_realtime; - create publication supabase_realtime; -commit; -alter publication supabase_realtime add table profiles; - --- Set up Storage! -insert into storage.buckets (id, name) -values ('avatars', 'avatars'); - -create policy "Avatar images are publicly accessible." - on storage.objects for select - using ( bucket_id = 'avatars' ); - -create policy "Anyone can upload an avatar." - on storage.objects for insert - with check ( bucket_id = 'avatars' ); -``` diff --git a/examples/user-management/vue3-user-management/index.html b/examples/user-management/vue3-user-management/index.html deleted file mode 100644 index 795e4fbadb883..0000000000000 --- a/examples/user-management/vue3-user-management/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Vite + Vue - - -
    - - - diff --git a/examples/user-management/vue3-user-management/package-lock.json b/examples/user-management/vue3-user-management/package-lock.json deleted file mode 100644 index 00fbcc38620f8..0000000000000 --- a/examples/user-management/vue3-user-management/package-lock.json +++ /dev/null @@ -1,1682 +0,0 @@ -{ - "name": "vue3-user-management", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "vue3-user-management", - "version": "0.0.0", - "dependencies": { - "@supabase/supabase-js": "^2.0.4", - "vue": "^3.2.37" - }, - "devDependencies": { - "@vitejs/plugin-vue": "^3.1.0", - "vite": "^3.2.7" - } - }, - "node_modules/@babel/parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", - "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.11.tgz", - "integrity": "sha512-PzMcQLazLBkwDEkrNPi9AbjFt6+3I7HKbiYF2XtWQ7wItrHvEOeO3T8Am434zAozWtVP7lrTue1bEfc2nYWeCA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.11.tgz", - "integrity": "sha512-geWp637tUhNmhL3Xgy4Bj703yXB9dqiLJe05lCUfjSFDrQf9C/8pArusyPUbUbPwlC/EAUjBw32sxuIl/11dZw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "dependencies": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.1.2.tgz", - "integrity": "sha512-3zxKNlvA3oNaKDYX0NBclgxTQ1xaFdL7PzwF6zj9tGFziKwmBa3Q/6XcJQxudlT81WxDjEhHmevvIC4Orc1LhQ==", - "dev": true, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^3.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.41.tgz", - "integrity": "sha512-oA4mH6SA78DT+96/nsi4p9DX97PHcNROxs51lYk7gb9Z4BPKQ3Mh+BLn6CQZBw857Iuhu28BfMSRHAlPvD4vlw==", - "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.41", - "estree-walker": "^2.0.2", - "source-map": "^0.6.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.41.tgz", - "integrity": "sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw==", - "dependencies": { - "@vue/compiler-core": "3.2.41", - "@vue/shared": "3.2.41" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.41.tgz", - "integrity": "sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w==", - "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.41", - "@vue/compiler-dom": "3.2.41", - "@vue/compiler-ssr": "3.2.41", - "@vue/reactivity-transform": "3.2.41", - "@vue/shared": "3.2.41", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7", - "postcss": "^8.1.10", - "source-map": "^0.6.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.41.tgz", - "integrity": "sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ==", - "dependencies": { - "@vue/compiler-dom": "3.2.41", - "@vue/shared": "3.2.41" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.41.tgz", - "integrity": "sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g==", - "dependencies": { - "@vue/shared": "3.2.41" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.41.tgz", - "integrity": "sha512-mK5+BNMsL4hHi+IR3Ft/ho6Za+L3FA5j8WvreJ7XzHrqkPq8jtF/SMo7tuc9gHjLDwKZX1nP1JQOKo9IEAn54A==", - "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.41", - "@vue/shared": "3.2.41", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.41.tgz", - "integrity": "sha512-0LBBRwqnI0p4FgIkO9q2aJBBTKDSjzhnxrxHYengkAF6dMOjeAIZFDADAlcf2h3GDALWnblbeprYYpItiulSVQ==", - "dependencies": { - "@vue/reactivity": "3.2.41", - "@vue/shared": "3.2.41" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.41.tgz", - "integrity": "sha512-U7zYuR1NVIP8BL6jmOqmapRAHovEFp7CSw4pR2FacqewXNGqZaRfHoNLQsqQvVQ8yuZNZtxSZy0FFyC70YXPpA==", - "dependencies": { - "@vue/runtime-core": "3.2.41", - "@vue/shared": "3.2.41", - "csstype": "^2.6.8" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.41.tgz", - "integrity": "sha512-7YHLkfJdTlsZTV0ae5sPwl9Gn/EGr2hrlbcS/8naXm2CDpnKUwC68i1wGlrYAfIgYWL7vUZwk2GkYLQH5CvFig==", - "dependencies": { - "@vue/compiler-ssr": "3.2.41", - "@vue/shared": "3.2.41" - }, - "peerDependencies": { - "vue": "3.2.41" - } - }, - "node_modules/@vue/shared": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.41.tgz", - "integrity": "sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw==" - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/csstype": { - "version": "2.6.21", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", - "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.11.tgz", - "integrity": "sha512-OgHGuhlfZ//mToxjte1D5iiiQgWfJ2GByVMwEC/IuoXsBGkuyK1+KrjYu0laSpnN/L1UmLUCv0s25vObdc1bVg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.11", - "@esbuild/linux-loong64": "0.15.11", - "esbuild-android-64": "0.15.11", - "esbuild-android-arm64": "0.15.11", - "esbuild-darwin-64": "0.15.11", - "esbuild-darwin-arm64": "0.15.11", - "esbuild-freebsd-64": "0.15.11", - "esbuild-freebsd-arm64": "0.15.11", - "esbuild-linux-32": "0.15.11", - "esbuild-linux-64": "0.15.11", - "esbuild-linux-arm": "0.15.11", - "esbuild-linux-arm64": "0.15.11", - "esbuild-linux-mips64le": "0.15.11", - "esbuild-linux-ppc64le": "0.15.11", - "esbuild-linux-riscv64": "0.15.11", - "esbuild-linux-s390x": "0.15.11", - "esbuild-netbsd-64": "0.15.11", - "esbuild-openbsd-64": "0.15.11", - "esbuild-sunos-64": "0.15.11", - "esbuild-windows-32": "0.15.11", - "esbuild-windows-64": "0.15.11", - "esbuild-windows-arm64": "0.15.11" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.11.tgz", - "integrity": "sha512-rrwoXEiuI1kaw4k475NJpexs8GfJqQUKcD08VR8sKHmuW9RUuTR2VxcupVvHdiGh9ihxL9m3lpqB1kju92Ialw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.11.tgz", - "integrity": "sha512-/hDubOg7BHOhUUsT8KUIU7GfZm5bihqssvqK5PfO4apag7YuObZRZSzViyEKcFn2tPeHx7RKbSBXvAopSHDZJQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.11.tgz", - "integrity": "sha512-1DqHD0ms3AhiwkKnjRUzmiW7JnaJJr5FKrPiR7xuyMwnjDqvNWDdMq4rKSD9OC0piFNK6n0LghsglNMe2MwJtA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.11.tgz", - "integrity": "sha512-OMzhxSbS0lwwrW40HHjRCeVIJTURdXFA8c3GU30MlHKuPCcvWNUIKVucVBtNpJySXmbkQMDJdJNrXzNDyvoqvQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.11.tgz", - "integrity": "sha512-8dKP26r0/Qyez8nTCwpq60QbuYKOeBygdgOAWGCRalunyeqWRoSZj9TQjPDnTTI9joxd3QYw3UhVZTKxO9QdRg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.11.tgz", - "integrity": "sha512-aSGiODiukLGGnSg/O9+cGO2QxEacrdCtCawehkWYTt5VX1ni2b9KoxpHCT9h9Y6wGqNHmXFnB47RRJ8BIqZgmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.11.tgz", - "integrity": "sha512-lsrAfdyJBGx+6aHIQmgqUonEzKYeBnyfJPkT6N2dOf1RoXYYV1BkWB6G02tjsrz1d5wZzaTc3cF+TKmuTo/ZwA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.11.tgz", - "integrity": "sha512-Y2Rh+PcyVhQqXKBTacPCltINN3uIw2xC+dsvLANJ1SpK5NJUtxv8+rqWpjmBgaNWKQT1/uGpMmA9olALy9PLVA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.11.tgz", - "integrity": "sha512-TJllTVk5aSyqPFvvcHTvf6Wu1ZKhWpJ/qNmZO8LL/XeB+LXCclm7HQHNEIz6MT7IX8PmlC1BZYrOiw2sXSB95A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.11.tgz", - "integrity": "sha512-uhcXiTwTmD4OpxJu3xC5TzAAw6Wzf9O1XGWL448EE9bqGjgV1j+oK3lIHAfsHnuIn8K4nDW8yjX0Sv5S++oRuw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.11.tgz", - "integrity": "sha512-WD61y/R1M4BLe4gxXRypoQ0Ci+Vjf714QYzcPNkiYv5I8K8WDz2ZR8Bm6cqKxd6rD+e/rZgPDbhQ9PCf7TMHmA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.11.tgz", - "integrity": "sha512-JVleZS9oPVLTlBhPTWgOwxFWU/wMUdlBwTbGA4GF8c38sLbS13cupj+C8bLq929jU7EMWry4SaL+tKGIaTlqKg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.11.tgz", - "integrity": "sha512-9aLIalZ2HFHIOZpmVU11sEAS9F8TnHw49daEjcgMpBXHFF57VuT9f9/9LKJhw781Gda0P9jDkuCWJ0tFbErvJw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.11.tgz", - "integrity": "sha512-sZHtiXXOKsLI3XGBGoYO4qKBzJlb8xNsWmvFiwFMHFzA4AXgDP1KDp7Dawe9C2pavTRBDvl+Ok4n/DHQ59oaTg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.11.tgz", - "integrity": "sha512-hUC9yN06K9sg7ju4Vgu9ChAPdsEgtcrcLfyNT5IKwKyfpLvKUwCMZSdF+gRD3WpyZelgTQfJ+pDx5XFbXTlB0A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.11.tgz", - "integrity": "sha512-0bBo9SQR4t66Wd91LGMAqmWorzO0TTzVjYiifwoFtel8luFeXuPThQnEm5ztN4g0fnvcp7AnUPPzS/Depf17wQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.11.tgz", - "integrity": "sha512-EuBdTGlsMTjEl1sQnBX2jfygy7iR6CKfvOzi+gEOfhDqbHXsmY1dcpbVtcwHAg9/2yUZSfMJHMAgf1z8M4yyyw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.11.tgz", - "integrity": "sha512-O0/Wo1Wk6dc0rZSxkvGpmTNIycEznHmkObTFz2VHBhjPsO4ZpCgfGxNkCpz4AdAIeMczpTXt/8d5vdJNKEGC+Q==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.11.tgz", - "integrity": "sha512-x977Q4HhNjnHx00b4XLAnTtj5vfbdEvkxaQwC1Zh5AN8g5EX+izgZ6e5QgqJgpzyRNJqh4hkgIJF1pyy1be0mQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.11.tgz", - "integrity": "sha512-VwUHFACuBahrvntdcMKZteUZ9HaYrBRODoKe4tIWxguQRvvYoYb7iu5LrcRS/FQx8KPZNaa72zuqwVtHeXsITw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", - "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" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "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-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/vite": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", - "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", - "dev": true, - "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.41.tgz", - "integrity": "sha512-uuuvnrDXEeZ9VUPljgHkqB5IaVO8SxhPpqF2eWOukVrBnRBx2THPSGQBnVRt0GrIG1gvCmFXMGbd7FqcT1ixNQ==", - "dependencies": { - "@vue/compiler-dom": "3.2.41", - "@vue/compiler-sfc": "3.2.41", - "@vue/runtime-dom": "3.2.41", - "@vue/server-renderer": "3.2.41", - "@vue/shared": "3.2.41" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - } - }, - "dependencies": { - "@babel/parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", - "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==" - }, - "@esbuild/android-arm": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.11.tgz", - "integrity": "sha512-PzMcQLazLBkwDEkrNPi9AbjFt6+3I7HKbiYF2XtWQ7wItrHvEOeO3T8Am434zAozWtVP7lrTue1bEfc2nYWeCA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.11.tgz", - "integrity": "sha512-geWp637tUhNmhL3Xgy4Bj703yXB9dqiLJe05lCUfjSFDrQf9C/8pArusyPUbUbPwlC/EAUjBw32sxuIl/11dZw==", - "dev": true, - "optional": true - }, - "@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.2.1.tgz", - "integrity": "sha512-CgQaYAJmGbOLPSqan4mjRgGikzsrlkKdPq0UNG7WZQv5HlHJlAYW8HeyNw/SKfIbxQBm8s2dBCeUyX+NdfB2Rw==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.1.0.tgz", - "integrity": "sha512-iplLCofTeYjnx9FIOsIwHLhMp0+7UVyiA4/sCeq40VdOgN9eTIhjEno9Tgh4dJARi4aaXoKfRX1DTxgZaOpPAw==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.4.tgz", - "integrity": "sha512-Z5uLyJm9bz5LMFnt5d1I6ccxVTdvKbJa0RsYGgKlA+QiyGvBxRRvVh8pqlYP1571DlycGG7bWngNwdv7/pehrg==", - "requires": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.2.0", - "@supabase/postgrest-js": "^1.1.0", - "@supabase/realtime-js": "^2.1.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "@vitejs/plugin-vue": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.1.2.tgz", - "integrity": "sha512-3zxKNlvA3oNaKDYX0NBclgxTQ1xaFdL7PzwF6zj9tGFziKwmBa3Q/6XcJQxudlT81WxDjEhHmevvIC4Orc1LhQ==", - "dev": true, - "requires": {} - }, - "@vue/compiler-core": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.41.tgz", - "integrity": "sha512-oA4mH6SA78DT+96/nsi4p9DX97PHcNROxs51lYk7gb9Z4BPKQ3Mh+BLn6CQZBw857Iuhu28BfMSRHAlPvD4vlw==", - "requires": { - "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.41", - "estree-walker": "^2.0.2", - "source-map": "^0.6.1" - } - }, - "@vue/compiler-dom": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.41.tgz", - "integrity": "sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw==", - "requires": { - "@vue/compiler-core": "3.2.41", - "@vue/shared": "3.2.41" - } - }, - "@vue/compiler-sfc": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.41.tgz", - "integrity": "sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w==", - "requires": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.41", - "@vue/compiler-dom": "3.2.41", - "@vue/compiler-ssr": "3.2.41", - "@vue/reactivity-transform": "3.2.41", - "@vue/shared": "3.2.41", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7", - "postcss": "^8.1.10", - "source-map": "^0.6.1" - } - }, - "@vue/compiler-ssr": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.41.tgz", - "integrity": "sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ==", - "requires": { - "@vue/compiler-dom": "3.2.41", - "@vue/shared": "3.2.41" - } - }, - "@vue/reactivity": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.41.tgz", - "integrity": "sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g==", - "requires": { - "@vue/shared": "3.2.41" - } - }, - "@vue/reactivity-transform": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.41.tgz", - "integrity": "sha512-mK5+BNMsL4hHi+IR3Ft/ho6Za+L3FA5j8WvreJ7XzHrqkPq8jtF/SMo7tuc9gHjLDwKZX1nP1JQOKo9IEAn54A==", - "requires": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.41", - "@vue/shared": "3.2.41", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7" - } - }, - "@vue/runtime-core": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.41.tgz", - "integrity": "sha512-0LBBRwqnI0p4FgIkO9q2aJBBTKDSjzhnxrxHYengkAF6dMOjeAIZFDADAlcf2h3GDALWnblbeprYYpItiulSVQ==", - "requires": { - "@vue/reactivity": "3.2.41", - "@vue/shared": "3.2.41" - } - }, - "@vue/runtime-dom": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.41.tgz", - "integrity": "sha512-U7zYuR1NVIP8BL6jmOqmapRAHovEFp7CSw4pR2FacqewXNGqZaRfHoNLQsqQvVQ8yuZNZtxSZy0FFyC70YXPpA==", - "requires": { - "@vue/runtime-core": "3.2.41", - "@vue/shared": "3.2.41", - "csstype": "^2.6.8" - } - }, - "@vue/server-renderer": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.41.tgz", - "integrity": "sha512-7YHLkfJdTlsZTV0ae5sPwl9Gn/EGr2hrlbcS/8naXm2CDpnKUwC68i1wGlrYAfIgYWL7vUZwk2GkYLQH5CvFig==", - "requires": { - "@vue/compiler-ssr": "3.2.41", - "@vue/shared": "3.2.41" - } - }, - "@vue/shared": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.41.tgz", - "integrity": "sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw==" - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "csstype": { - "version": "2.6.21", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", - "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "esbuild": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.11.tgz", - "integrity": "sha512-OgHGuhlfZ//mToxjte1D5iiiQgWfJ2GByVMwEC/IuoXsBGkuyK1+KrjYu0laSpnN/L1UmLUCv0s25vObdc1bVg==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.11", - "@esbuild/linux-loong64": "0.15.11", - "esbuild-android-64": "0.15.11", - "esbuild-android-arm64": "0.15.11", - "esbuild-darwin-64": "0.15.11", - "esbuild-darwin-arm64": "0.15.11", - "esbuild-freebsd-64": "0.15.11", - "esbuild-freebsd-arm64": "0.15.11", - "esbuild-linux-32": "0.15.11", - "esbuild-linux-64": "0.15.11", - "esbuild-linux-arm": "0.15.11", - "esbuild-linux-arm64": "0.15.11", - "esbuild-linux-mips64le": "0.15.11", - "esbuild-linux-ppc64le": "0.15.11", - "esbuild-linux-riscv64": "0.15.11", - "esbuild-linux-s390x": "0.15.11", - "esbuild-netbsd-64": "0.15.11", - "esbuild-openbsd-64": "0.15.11", - "esbuild-sunos-64": "0.15.11", - "esbuild-windows-32": "0.15.11", - "esbuild-windows-64": "0.15.11", - "esbuild-windows-arm64": "0.15.11" - } - }, - "esbuild-android-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.11.tgz", - "integrity": "sha512-rrwoXEiuI1kaw4k475NJpexs8GfJqQUKcD08VR8sKHmuW9RUuTR2VxcupVvHdiGh9ihxL9m3lpqB1kju92Ialw==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.11.tgz", - "integrity": "sha512-/hDubOg7BHOhUUsT8KUIU7GfZm5bihqssvqK5PfO4apag7YuObZRZSzViyEKcFn2tPeHx7RKbSBXvAopSHDZJQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.11.tgz", - "integrity": "sha512-1DqHD0ms3AhiwkKnjRUzmiW7JnaJJr5FKrPiR7xuyMwnjDqvNWDdMq4rKSD9OC0piFNK6n0LghsglNMe2MwJtA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.11.tgz", - "integrity": "sha512-OMzhxSbS0lwwrW40HHjRCeVIJTURdXFA8c3GU30MlHKuPCcvWNUIKVucVBtNpJySXmbkQMDJdJNrXzNDyvoqvQ==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.11.tgz", - "integrity": "sha512-8dKP26r0/Qyez8nTCwpq60QbuYKOeBygdgOAWGCRalunyeqWRoSZj9TQjPDnTTI9joxd3QYw3UhVZTKxO9QdRg==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.11.tgz", - "integrity": "sha512-aSGiODiukLGGnSg/O9+cGO2QxEacrdCtCawehkWYTt5VX1ni2b9KoxpHCT9h9Y6wGqNHmXFnB47RRJ8BIqZgmQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.11.tgz", - "integrity": "sha512-lsrAfdyJBGx+6aHIQmgqUonEzKYeBnyfJPkT6N2dOf1RoXYYV1BkWB6G02tjsrz1d5wZzaTc3cF+TKmuTo/ZwA==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.11.tgz", - "integrity": "sha512-Y2Rh+PcyVhQqXKBTacPCltINN3uIw2xC+dsvLANJ1SpK5NJUtxv8+rqWpjmBgaNWKQT1/uGpMmA9olALy9PLVA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.11.tgz", - "integrity": "sha512-TJllTVk5aSyqPFvvcHTvf6Wu1ZKhWpJ/qNmZO8LL/XeB+LXCclm7HQHNEIz6MT7IX8PmlC1BZYrOiw2sXSB95A==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.11.tgz", - "integrity": "sha512-uhcXiTwTmD4OpxJu3xC5TzAAw6Wzf9O1XGWL448EE9bqGjgV1j+oK3lIHAfsHnuIn8K4nDW8yjX0Sv5S++oRuw==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.11.tgz", - "integrity": "sha512-WD61y/R1M4BLe4gxXRypoQ0Ci+Vjf714QYzcPNkiYv5I8K8WDz2ZR8Bm6cqKxd6rD+e/rZgPDbhQ9PCf7TMHmA==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.11.tgz", - "integrity": "sha512-JVleZS9oPVLTlBhPTWgOwxFWU/wMUdlBwTbGA4GF8c38sLbS13cupj+C8bLq929jU7EMWry4SaL+tKGIaTlqKg==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.11.tgz", - "integrity": "sha512-9aLIalZ2HFHIOZpmVU11sEAS9F8TnHw49daEjcgMpBXHFF57VuT9f9/9LKJhw781Gda0P9jDkuCWJ0tFbErvJw==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.11.tgz", - "integrity": "sha512-sZHtiXXOKsLI3XGBGoYO4qKBzJlb8xNsWmvFiwFMHFzA4AXgDP1KDp7Dawe9C2pavTRBDvl+Ok4n/DHQ59oaTg==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.11.tgz", - "integrity": "sha512-hUC9yN06K9sg7ju4Vgu9ChAPdsEgtcrcLfyNT5IKwKyfpLvKUwCMZSdF+gRD3WpyZelgTQfJ+pDx5XFbXTlB0A==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.11.tgz", - "integrity": "sha512-0bBo9SQR4t66Wd91LGMAqmWorzO0TTzVjYiifwoFtel8luFeXuPThQnEm5ztN4g0fnvcp7AnUPPzS/Depf17wQ==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.11.tgz", - "integrity": "sha512-EuBdTGlsMTjEl1sQnBX2jfygy7iR6CKfvOzi+gEOfhDqbHXsmY1dcpbVtcwHAg9/2yUZSfMJHMAgf1z8M4yyyw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.11.tgz", - "integrity": "sha512-O0/Wo1Wk6dc0rZSxkvGpmTNIycEznHmkObTFz2VHBhjPsO4ZpCgfGxNkCpz4AdAIeMczpTXt/8d5vdJNKEGC+Q==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.11.tgz", - "integrity": "sha512-x977Q4HhNjnHx00b4XLAnTtj5vfbdEvkxaQwC1Zh5AN8g5EX+izgZ6e5QgqJgpzyRNJqh4hkgIJF1pyy1be0mQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.11", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.11.tgz", - "integrity": "sha512-VwUHFACuBahrvntdcMKZteUZ9HaYrBRODoKe4tIWxguQRvvYoYb7iu5LrcRS/FQx8KPZNaa72zuqwVtHeXsITw==", - "dev": true, - "optional": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "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-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "vite": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", - "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", - "dev": true, - "requires": { - "esbuild": "^0.15.9", - "fsevents": "~2.3.2", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - } - }, - "vue": { - "version": "3.2.41", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.41.tgz", - "integrity": "sha512-uuuvnrDXEeZ9VUPljgHkqB5IaVO8SxhPpqF2eWOukVrBnRBx2THPSGQBnVRt0GrIG1gvCmFXMGbd7FqcT1ixNQ==", - "requires": { - "@vue/compiler-dom": "3.2.41", - "@vue/compiler-sfc": "3.2.41", - "@vue/runtime-dom": "3.2.41", - "@vue/server-renderer": "3.2.41", - "@vue/shared": "3.2.41" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - } - } -} diff --git a/examples/user-management/vue3-user-management/package.json b/examples/user-management/vue3-user-management/package.json deleted file mode 100644 index 67aaab4b4c31a..0000000000000 --- a/examples/user-management/vue3-user-management/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "vue3-user-management", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "@supabase/supabase-js": "^2.0.4", - "vue": "^3.2.37" - }, - "devDependencies": { - "@vitejs/plugin-vue": "^3.1.0", - "vite": "^4.3.9" - } -} diff --git a/examples/user-management/vue3-user-management/public/vite.svg b/examples/user-management/vue3-user-management/public/vite.svg deleted file mode 100644 index e7b8dfb1b2a60..0000000000000 --- a/examples/user-management/vue3-user-management/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/user-management/vue3-user-management/src/App.vue b/examples/user-management/vue3-user-management/src/App.vue deleted file mode 100644 index ed888b4656800..0000000000000 --- a/examples/user-management/vue3-user-management/src/App.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/user-management/vue3-user-management/src/assets/vue.svg b/examples/user-management/vue3-user-management/src/assets/vue.svg deleted file mode 100644 index 770e9d333ee70..0000000000000 --- a/examples/user-management/vue3-user-management/src/assets/vue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/user-management/vue3-user-management/src/components/Account.vue b/examples/user-management/vue3-user-management/src/components/Account.vue deleted file mode 100644 index 442d05b7e832a..0000000000000 --- a/examples/user-management/vue3-user-management/src/components/Account.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - diff --git a/examples/user-management/vue3-user-management/src/components/Auth.vue b/examples/user-management/vue3-user-management/src/components/Auth.vue deleted file mode 100644 index 3026573b9cb3f..0000000000000 --- a/examples/user-management/vue3-user-management/src/components/Auth.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/user-management/vue3-user-management/src/components/Avatar.vue b/examples/user-management/vue3-user-management/src/components/Avatar.vue deleted file mode 100644 index e42a52e5e7669..0000000000000 --- a/examples/user-management/vue3-user-management/src/components/Avatar.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - - - \ No newline at end of file diff --git a/examples/user-management/vue3-user-management/src/main.js b/examples/user-management/vue3-user-management/src/main.js deleted file mode 100644 index 2425c0f745bef..0000000000000 --- a/examples/user-management/vue3-user-management/src/main.js +++ /dev/null @@ -1,5 +0,0 @@ -import { createApp } from 'vue' -import './style.css' -import App from './App.vue' - -createApp(App).mount('#app') diff --git a/examples/user-management/vue3-user-management/src/store.js b/examples/user-management/vue3-user-management/src/store.js deleted file mode 100644 index 6064d62084eb4..0000000000000 --- a/examples/user-management/vue3-user-management/src/store.js +++ /dev/null @@ -1,5 +0,0 @@ -import { reactive } from 'vue' - -export const store = reactive({ - user: {}, -}) diff --git a/examples/user-management/vue3-user-management/src/style.css b/examples/user-management/vue3-user-management/src/style.css deleted file mode 100644 index 54b465ff8c053..0000000000000 --- a/examples/user-management/vue3-user-management/src/style.css +++ /dev/null @@ -1,372 +0,0 @@ -html, -body { - --custom-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, - Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; - --custom-bg-color: #101010; - --custom-panel-color: #222; - --custom-box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.8); - --custom-color: #fff; - --custom-color-brand: #24b47e; - --custom-color-secondary: #666; - --custom-border: 1px solid #333; - --custom-border-radius: 5px; - --custom-spacing: 5px; - - padding: 0; - margin: 0; - font-family: var(--custom-font-family); - background-color: var(--custom-bg-color); -} - -* { - color: var(--custom-color); - font-family: var(--custom-font-family); - box-sizing: border-box; -} - -html, -body, -#__next { - height: 100vh; - width: 100vw; - overflow-x: hidden; -} - -/* Grid */ - -.container { - width: 90%; - margin-left: auto; - margin-right: auto; -} -.row { - position: relative; - width: 100%; -} -.row [class^="col"] { - float: left; - margin: 0.5rem 2%; - min-height: 0.125rem; -} -.col-1, -.col-2, -.col-3, -.col-4, -.col-5, -.col-6, -.col-7, -.col-8, -.col-9, -.col-10, -.col-11, -.col-12 { - width: 96%; -} -.col-1-sm { - width: 4.33%; -} -.col-2-sm { - width: 12.66%; -} -.col-3-sm { - width: 21%; -} -.col-4-sm { - width: 29.33%; -} -.col-5-sm { - width: 37.66%; -} -.col-6-sm { - width: 46%; -} -.col-7-sm { - width: 54.33%; -} -.col-8-sm { - width: 62.66%; -} -.col-9-sm { - width: 71%; -} -.col-10-sm { - width: 79.33%; -} -.col-11-sm { - width: 87.66%; -} -.col-12-sm { - width: 96%; -} -.row::after { - content: ""; - display: table; - clear: both; -} -.hidden-sm { - display: none; -} - -@media only screen and (min-width: 33.75em) { - /* 540px */ - .container { - width: 80%; - } -} - -@media only screen and (min-width: 45em) { - /* 720px */ - .col-1 { - width: 4.33%; - } - .col-2 { - width: 12.66%; - } - .col-3 { - width: 21%; - } - .col-4 { - width: 29.33%; - } - .col-5 { - width: 37.66%; - } - .col-6 { - width: 46%; - } - .col-7 { - width: 54.33%; - } - .col-8 { - width: 62.66%; - } - .col-9 { - width: 71%; - } - .col-10 { - width: 79.33%; - } - .col-11 { - width: 87.66%; - } - .col-12 { - width: 96%; - } - .hidden-sm { - display: block; - } -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .container { - width: 75%; - max-width: 60rem; - } -} - -/* Forms */ - -label { - display: block; - margin: 5px 0; - color: var(--custom-color-secondary); - font-size: 0.8rem; - text-transform: uppercase; -} - -input { - width: 100%; - border-radius: 5px; - border: var(--custom-border); - padding: 8px; - font-size: 0.9rem; - background-color: var(--custom-bg-color); - color: var(--custom-color); -} - -input[disabled] { - color: var(--custom-color-secondary); -} - -/* Utils */ - -.block { - display: block; - width: 100%; -} -.inline-block { - display: inline-block; - width: 100%; -} -.flex { - display: flex; -} -.flex.column { - flex-direction: column; -} -.flex.row { - flex-direction: row; -} -.flex.flex-1 { - flex: 1 1 0; -} -.flex-end { - justify-content: flex-end; -} -.flex-center { - justify-content: center; -} -.items-center { - align-items: center; -} -.text-sm { - font-size: 0.8rem; - font-weight: 300; -} -.text-right { - text-align: right; -} -.font-light { - font-weight: 300; -} -.opacity-half { - opacity: 50%; -} - -/* Button */ - -button, -.button { - color: var(--custom-color); - border: var(--custom-border); - background-color: var(--custom-bg-color); - display: inline-block; - text-align: center; - border-radius: var(--custom-border-radius); - padding: 0.5rem 1rem; - cursor: pointer; - text-align: center; - font-size: 0.9rem; - text-transform: uppercase; -} - -button.primary, -.button.primary { - background-color: var(--custom-color-brand); - border: 1px solid var(--custom-color-brand); -} - -/* Widgets */ - -.card { - width: 100%; - display: block; - border: var(--custom-border); - border-radius: var(--custom-border-radius); - padding: var(--custom-spacing); -} - -.avatar { - border-radius: var(--custom-border-radius); - overflow: hidden; - max-width: 100%; -} -.avatar.image { - object-fit: cover; -} -.avatar.no-image { - background-color: #333; - border: 1px solid rgb(200, 200, 200); - border-radius: 5px; -} - -.footer { - position: absolute; - max-width: 100%; - bottom: 0; - left: 0; - right: 0; - display: flex; - flex-flow: row; - border-top: var(--custom-border); - background-color: var(--custom-bg-color); -} -.footer div { - padding: var(--custom-spacing); - display: flex; - align-items: center; - width: 100%; -} -.footer div > img { - height: 20px; - margin-left: 10px; -} -.footer > div:first-child { - display: none; -} -.footer > div:nth-child(2) { - justify-content: left; -} - -@media only screen and (min-width: 60em) { - /* 960px */ - .footer > div:first-child { - display: flex; - } - .footer > div:nth-child(2) { - justify-content: center; - } -} - -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -.mainHeader { - width: 100%; - font-size: 1.3rem; - margin-bottom: 20px; -} - -.avatarPlaceholder { - border: var(--custom-border); - border-radius: var(--custom-border-radius); - width: 35px; - height: 35px; - background-color: rgba(255, 255, 255, 0.2); - display: flex; - align-items: center; - justify-content: center; -} - -.form-widget { - display: flex; - flex-direction: column; - gap: 20px; -} - -.form-widget > .button { - display: flex; - align-items: center; - justify-content: center; - border: none; - background-color: #444444; - text-transform: none !important; - transition: all 0.2s ease; -} - -.form-widget .button:hover { - background-color: #2a2a2a; -} - -.form-widget .button > .loader { - width: 17px; - animation: spin 1s linear infinite; - filter: invert(1); -} diff --git a/examples/user-management/vue3-user-management/src/supabase.js b/examples/user-management/vue3-user-management/src/supabase.js deleted file mode 100644 index aac95ff8adc91..0000000000000 --- a/examples/user-management/vue3-user-management/src/supabase.js +++ /dev/null @@ -1,6 +0,0 @@ -import { createClient } from '@supabase/supabase-js' - -const supabaseUrl = import.meta.env.VITE_SUPABASE_URL -const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY - -export const supabase = createClient(supabaseUrl, supabaseAnonKey) diff --git a/examples/user-management/vue3-user-management/vite.config.js b/examples/user-management/vue3-user-management/vite.config.js deleted file mode 100644 index 315212d69a7ba..0000000000000 --- a/examples/user-management/vue3-user-management/vite.config.js +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [vue()] -}) diff --git a/examples/with-cloudflare-workers/.gitignore b/examples/with-cloudflare-workers/.gitignore deleted file mode 100644 index 42387803be0c4..0000000000000 --- a/examples/with-cloudflare-workers/.gitignore +++ /dev/null @@ -1,171 +0,0 @@ -# Logs - -logs -_.log -npm-debug.log_ -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) - -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# Runtime data - -pids -_.pid -_.seed -\*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover - -lib-cov - -# Coverage directory used by tools like istanbul - -coverage -\*.lcov - -# nyc test coverage - -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) - -.grunt - -# Bower dependency directory (https://bower.io/) - -bower_components - -# node-waf configuration - -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) - -build/Release - -# Dependency directories - -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) - -web_modules/ - -# TypeScript cache - -\*.tsbuildinfo - -# Optional npm cache directory - -.npm - -# Optional eslint cache - -.eslintcache - -# Optional stylelint cache - -.stylelintcache - -# Microbundle cache - -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history - -.node_repl_history - -# Output of 'npm pack' - -\*.tgz - -# Yarn Integrity file - -.yarn-integrity - -# dotenv environment variable files - -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) - -.cache -.parcel-cache - -# Next.js build output - -.next -out - -# Nuxt.js build / generate output - -.nuxt -dist - -# Gatsby files - -.cache/ - -# Comment in the public line in if your project uses Gatsby and not Next.js - -# https://nextjs.org/blog/next-9-1#public-directory-support - -# public - -# vuepress build output - -.vuepress/dist - -# vuepress v2.x temp and cache directory - -.temp -.cache - -# Docusaurus cache and generated files - -.docusaurus - -# Serverless directories - -.serverless/ - -# FuseBox cache - -.fusebox/ - -# DynamoDB Local files - -.dynamodb/ - -# TernJS port file - -.tern-port - -# Stores VSCode versions used for testing VSCode extensions - -.vscode-test - -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.\* - -# wrangler project - -.dev.vars diff --git a/examples/with-cloudflare-workers/README.md b/examples/with-cloudflare-workers/README.md deleted file mode 100644 index 55ae9ce695ccb..0000000000000 --- a/examples/with-cloudflare-workers/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Query Supabase from Cloudflare Worker - -**[📹 Video](https://egghead.io/lessons/cloudflare-query-supabase-from-cloudflare-worker?af=9qsk0a)** - -Supabase JS is an NPM package which provides a simple interface from JavaScript to our Supabase project. It allows us to query and mutate data using its Object Relational Mapping (ORM) syntax, and subscribe to realtime events. - -In this video, we install the Supabase JS package and create a new client using our project's URL and Anon Key. These can be found in the Supabase dashboard for our project, under `Settings > API`. - -We store these values as secrets in our Cloudflare account, and use them to instantiate a new Supabase client. - -Additionally, we write a query to select all of our articles from our Supabase instance, and send them back as the response from our Cloudflare Worker. - -In order to send a JSON response, we first stringify the object we get back from Supabase, and then set a `Content-Type` header to notify the browser that this will be a type of `application/json`. - -## Code Snippets - -**Install Supabase JS** - -```bash -npm i @supabase/supabase-js -``` - -**Create a Cloudflare secret** - -```bash -npx wrangler secret put NAME -``` - -**Add a secret for SUPABASE_URL** - -```bash -npx wrangler secret put SUPABASE_URL -``` - -**Run wrangler development server** - -```bash -npx wrangler dev -``` - -**Add a secret for SUPABASE_ANON_KEY** - -```bash -npx wrangler secret put SUPABASE_ANON_KEY -``` - -**Query data from Supabase** - -```javascript -const { data } = await supabase.from("articles").select("*"); -``` - -**Send JSON response** - -```javascript -return new Response(JSON.stringify(data), { - headers: { - "Content-Type": "application/json", - }, -}); -``` - -## Resources - -- [Selecting data with Supabase JS](https://supabase.com/docs/reference/javascript/select) -- [Introducing Secrets and Environment Variables to Cloudflare Workers](https://blog.cloudflare.com/workers-secrets-environment/) -- [Cloudflare docs for sending JSON responses](https://developers.cloudflare.com/workers/examples/return-json/) - ---- - -[👉 Next lesson](/04-proxy-supabase-requests-with-cloudflare-workers-and-itty-router) - ---- - -Enjoying the course? Follow Jon Meyers on [Twitter](https://twitter.com/jonmeyers_io) and subscribe to the [YouTube channel](https://www.youtube.com/c/jonmeyers). diff --git a/examples/with-cloudflare-workers/package-lock.json b/examples/with-cloudflare-workers/package-lock.json deleted file mode 100644 index 1a5a857e4d4fe..0000000000000 --- a/examples/with-cloudflare-workers/package-lock.json +++ /dev/null @@ -1,3023 +0,0 @@ -{ - "name": "supabase-at-the-edge", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "supabase-at-the-edge", - "version": "0.0.0", - "dependencies": { - "@supabase/supabase-js": "^2.0.0" - }, - "devDependencies": { - "wrangler": "2.0.23" - } - }, - "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", - "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", - "dev": true, - "dependencies": { - "mime": "^3.0.0" - } - }, - "node_modules/@esbuild-plugins/node-globals-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", - "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", - "dev": true, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@esbuild-plugins/node-modules-polyfill": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", - "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" - }, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true - }, - "node_modules/@miniflare/cache": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/cache/-/cache-2.13.0.tgz", - "integrity": "sha512-y3SdN3SVyPECWmLAEGkkrv0RB+LugEPs/FeXn8QtN9aE1vyj69clOAgmsDzoh1DpFfFsLKRiv05aWs4m79P8Xw==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "http-cache-semantics": "^4.1.0", - "undici": "5.20.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/cli-parser": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/cli-parser/-/cli-parser-2.13.0.tgz", - "integrity": "sha512-Nx1PIfuMZ3mK9Dg/JojWZAjHR16h1pcdCFSqYln/ME7y5ifx+P1E5UkShWUQ1cBlibNaltjbJ2n/7stSAsIGPQ==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0", - "kleur": "^4.1.4" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/core": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/core/-/core-2.13.0.tgz", - "integrity": "sha512-YJ/C0J3k+7xn4gvlMpvePnM3xC8nOnkweW96cc0IA8kJ1JSmScOO2tZ7rrU1RyDgp6StkAtQBw4yC0wYeFycBw==", - "dev": true, - "dependencies": { - "@iarna/toml": "^2.2.5", - "@miniflare/queues": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/watcher": "2.13.0", - "busboy": "^1.6.0", - "dotenv": "^10.0.0", - "kleur": "^4.1.4", - "set-cookie-parser": "^2.4.8", - "undici": "5.20.0", - "urlpattern-polyfill": "^4.0.3" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/d1": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/d1/-/d1-2.13.0.tgz", - "integrity": "sha512-OslqjO8iTcvzyrC0spByftMboRmHJEyHyTHnlKkjWDGdQQztEOjso2Xj+3I4SZIeUYvbzDRhKLS2QXI9a8LS5A==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.7" - } - }, - "node_modules/@miniflare/durable-objects": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/durable-objects/-/durable-objects-2.13.0.tgz", - "integrity": "sha512-CRGVBPO9vY4Fc3aV+pdPRVVeYIt64vQqvw+BJbyW+TQtqVP2CGQeziJGnCfcONNNKyooZxGyUkHewUypyH+Qhg==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/storage-memory": "2.13.0", - "undici": "5.20.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/html-rewriter": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/html-rewriter/-/html-rewriter-2.13.0.tgz", - "integrity": "sha512-XhN7Icyzvtvu+o/A0hrnSiSmla78seCaNwQ9M1TDHxt352I/ahPX4wtPXs6GbKqY0/i+V6yoG2KGFRQ/j59cQQ==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "html-rewriter-wasm": "^0.4.1", - "undici": "5.20.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/http-server": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/http-server/-/http-server-2.13.0.tgz", - "integrity": "sha512-aMS/nUMTKP15hKnyZboeuWCiqmNrrCu+XRBY/TxDDl07iXcLpiHGf3oVv+yXxXkWlJHJVCbK7i/nXSNPllRMSw==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/web-sockets": "2.13.0", - "kleur": "^4.1.4", - "selfsigned": "^2.0.0", - "undici": "5.20.0", - "ws": "^8.2.2", - "youch": "^2.2.2" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/kv": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/kv/-/kv-2.13.0.tgz", - "integrity": "sha512-J0AS5x3g/YVOmHMxMAZs07nRXRvSo9jyuC0eikTBf+4AABvBIyvVYmdTjYNjCmr8O5smcfWBX5S27HelD3aAAQ==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/queues": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/queues/-/queues-2.13.0.tgz", - "integrity": "sha512-Gf/a6M1mJL03iOvNqh3JNahcBfvEMPHnO28n0gkCoyYWGvddIr9lwCdFIa0qwNJsC1fIDRxhPg8PZ5cQLBMwRA==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.7" - } - }, - "node_modules/@miniflare/r2": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/r2/-/r2-2.13.0.tgz", - "integrity": "sha512-/5k6GHOYMNV/oBtilV9HDXBkJUrx8oXVigG5vxbnzEGRXyVRmR+Glzu7mFT8JiE94XiEbXHk9Qvu1S5Dej3wBw==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0", - "undici": "5.20.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/runner-vm": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/runner-vm/-/runner-vm-2.13.0.tgz", - "integrity": "sha512-VmKtF2cA8HmTuLXor1THWY0v+DmaobPct63iLcgWIaUdP3MIvL+9X8HDXFAviCR7bCTe6MKxckHkaOj0IE0aJQ==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/scheduler": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/scheduler/-/scheduler-2.13.0.tgz", - "integrity": "sha512-AOaQanoR4NjVEzVGWHnrL15A7aMx+d9AKLJhSDF7KaP+4NrT2Wo2BQuXCpn5oStx3itOdlQpMfqQ139e/I8WhQ==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "cron-schedule": "^3.0.4" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/shared": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/shared/-/shared-2.13.0.tgz", - "integrity": "sha512-m8YFQzKmbjberrV9hPzNcQjNCXxjTjXUpuNrIGjAJO7g+BDztUHaZbdd26H9maBDlkeiWxA3hf0mDyCT/6MCMA==", - "dev": true, - "dependencies": { - "@types/better-sqlite3": "^7.6.0", - "kleur": "^4.1.4", - "npx-import": "^1.1.4", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/sites": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/sites/-/sites-2.13.0.tgz", - "integrity": "sha512-/tuzIu00o6CF2tkSv01q02MgEShXBSKx85h9jwWvc+6u7prGacAOer0FA1YNRFbE+t9QIfutAkoPGMA9zYf8+Q==", - "dev": true, - "dependencies": { - "@miniflare/kv": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/storage-file": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/storage-file": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/storage-file/-/storage-file-2.13.0.tgz", - "integrity": "sha512-LuAeAAY5046rq5U1eFLVkz+ppiFEWytWacpkQw92DvVKFFquZcXSj6WPxZF4rSs23WDk+rdcwuLekbb52aDR7A==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0", - "@miniflare/storage-memory": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/storage-memory": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/storage-memory/-/storage-memory-2.13.0.tgz", - "integrity": "sha512-FnkYcBNXa/ym1ksNilNZycg9WYYKo6cWKplVBeSthRon3e8QY6t3n7/XRseBUo7O6mhDybVTy4wNCP1R2nBiEw==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/watcher": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/watcher/-/watcher-2.13.0.tgz", - "integrity": "sha512-teAacWcpMStoBLbLae95IUaL5lPzjPlXa9lhK9CbRaio/KRMibTMRGWrYos3IVGQRZvklvLwcms/nTvgcdb6yw==", - "dev": true, - "dependencies": { - "@miniflare/shared": "2.13.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@miniflare/web-sockets": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/web-sockets/-/web-sockets-2.13.0.tgz", - "integrity": "sha512-+U2/HCf+BetRIgjAnNQjkuN6UeAjQmXifhQC+7CCaX834XJhrKXoR6z2xr2xkg1qj0qQs4D2jWG0KzrO5OUpug==", - "dev": true, - "dependencies": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "undici": "5.20.0", - "ws": "^8.2.2" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/gotrue-js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.0.1.tgz", - "integrity": "sha512-PCzHeFhz33lPWLZT+UiVDpGkZQI3K1wwhkhgAjvJdkyCbwK5u+LWWUzz0AX66bGGLpg1IYQIP7oz8V68XVjzMA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.0.0.tgz", - "integrity": "sha512-DJVt5Z76pik3Fxt1es4fmquq6GrwR3nLqcb2Q6VpHXSudtixML0Cyxsu0DPzxa6ruSQrO9s08s0OQgwaIA1C0Q==", - "dependencies": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "dependencies": { - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.0.tgz", - "integrity": "sha512-8nNMXYzBlQVSDONFaNgyyxsAdUY+C9Q/7vEDYDdTFTyC3i+luXTDOSjHMLcjIky/+x5rIAcNQqqIJ48HJUluXA==", - "dependencies": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.0.1", - "@supabase/postgrest-js": "^1.0.0", - "@supabase/realtime-js": "^2.0.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "node_modules/@types/better-sqlite3": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.4.tgz", - "integrity": "sha512-dzrRZCYPXIXfSR1/surNbJ/grU3scTaygS0OMzjlGf71i9sc2fGyHPXXiXmEvNIoE0cGwsanEFMVJxPXmco9Eg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true - }, - "node_modules/@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "node_modules/@types/stack-trace": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/stack-trace/-/stack-trace-0.0.29.tgz", - "integrity": "sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cron-schedule": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/cron-schedule/-/cron-schedule-3.0.6.tgz", - "integrity": "sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", - "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-64": "0.14.47", - "esbuild-android-arm64": "0.14.47", - "esbuild-darwin-64": "0.14.47", - "esbuild-darwin-arm64": "0.14.47", - "esbuild-freebsd-64": "0.14.47", - "esbuild-freebsd-arm64": "0.14.47", - "esbuild-linux-32": "0.14.47", - "esbuild-linux-64": "0.14.47", - "esbuild-linux-arm": "0.14.47", - "esbuild-linux-arm64": "0.14.47", - "esbuild-linux-mips64le": "0.14.47", - "esbuild-linux-ppc64le": "0.14.47", - "esbuild-linux-riscv64": "0.14.47", - "esbuild-linux-s390x": "0.14.47", - "esbuild-netbsd-64": "0.14.47", - "esbuild-openbsd-64": "0.14.47", - "esbuild-sunos-64": "0.14.47", - "esbuild-windows-32": "0.14.47", - "esbuild-windows-64": "0.14.47", - "esbuild-windows-arm64": "0.14.47" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", - "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", - "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", - "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", - "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", - "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", - "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", - "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", - "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", - "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", - "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", - "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", - "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", - "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", - "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", - "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", - "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", - "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", - "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", - "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", - "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/html-rewriter-wasm": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/html-rewriter-wasm/-/html-rewriter-wasm-0.4.1.tgz", - "integrity": "sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/miniflare": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-2.13.0.tgz", - "integrity": "sha512-ayNhVa4a6bZiOuHtrPmOt4BCYcmW1fBQ/+qGL85smq1m2OBBm3aUs6f4ISf38xH8tk+qewgmAywetyVtn6KHPw==", - "dev": true, - "dependencies": { - "@miniflare/cache": "2.13.0", - "@miniflare/cli-parser": "2.13.0", - "@miniflare/core": "2.13.0", - "@miniflare/d1": "2.13.0", - "@miniflare/durable-objects": "2.13.0", - "@miniflare/html-rewriter": "2.13.0", - "@miniflare/http-server": "2.13.0", - "@miniflare/kv": "2.13.0", - "@miniflare/queues": "2.13.0", - "@miniflare/r2": "2.13.0", - "@miniflare/runner-vm": "2.13.0", - "@miniflare/scheduler": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/sites": "2.13.0", - "@miniflare/storage-file": "2.13.0", - "@miniflare/storage-memory": "2.13.0", - "@miniflare/web-sockets": "2.13.0", - "kleur": "^4.1.4", - "semiver": "^1.1.0", - "source-map-support": "^0.5.20", - "undici": "5.20.0" - }, - "bin": { - "miniflare": "bootstrap.js" - }, - "engines": { - "node": ">=16.13" - }, - "peerDependencies": { - "@miniflare/storage-redis": "2.13.0", - "cron-schedule": "^3.0.4", - "ioredis": "^4.27.9" - }, - "peerDependenciesMeta": { - "@miniflare/storage-redis": { - "optional": true - }, - "cron-schedule": { - "optional": true - }, - "ioredis": { - "optional": true - } - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true, - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npx-import": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/npx-import/-/npx-import-1.1.4.tgz", - "integrity": "sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==", - "dev": true, - "dependencies": { - "execa": "^6.1.0", - "parse-package-name": "^1.0.0", - "semver": "^7.3.7", - "validate-npm-package-name": "^4.0.0" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-package-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-package-name/-/parse-package-name-1.0.0.tgz", - "integrity": "sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==", - "dev": true - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" - } - }, - "node_modules/rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", - "dev": true, - "dependencies": { - "rollup-plugin-inject": "^3.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semiver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", - "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/semver": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", - "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "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/source-map-support": { - "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==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/undici": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", - "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=12.18" - } - }, - "node_modules/urlpattern-polyfill": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-4.0.3.tgz", - "integrity": "sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==", - "dev": true - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrangler": { - "version": "2.0.23", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-2.0.23.tgz", - "integrity": "sha512-qMyK/pmHIrubxuJuXnCwcidY4LlQImcTTyOGoqMJtNz8y+pDfsluExSBpwqGSl3JPUQF2FiofqaBkj/iB8rvYw==", - "dev": true, - "dependencies": { - "@cloudflare/kv-asset-handler": "^0.2.0", - "@esbuild-plugins/node-globals-polyfill": "^0.1.1", - "@esbuild-plugins/node-modules-polyfill": "^0.1.4", - "blake3-wasm": "^2.1.5", - "chokidar": "^3.5.3", - "esbuild": "0.14.47", - "miniflare": "^2.6.0", - "nanoid": "^3.3.3", - "path-to-regexp": "^6.2.0", - "selfsigned": "^2.0.1", - "xxhash-wasm": "^1.0.1" - }, - "bin": { - "wrangler": "bin/wrangler.js", - "wrangler2": "bin/wrangler.js" - }, - "engines": { - "node": ">=16.7.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": 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/xxhash-wasm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.1.tgz", - "integrity": "sha512-Lc9CTvDrH2vRoiaUzz25q7lRaviMhz90pkx6YxR9EPYtF99yOJnv2cB+CQ0hp/TLoqrUsk8z/W2EN31T568Azw==", - "dev": true - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/youch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/youch/-/youch-2.2.2.tgz", - "integrity": "sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ==", - "dev": true, - "dependencies": { - "@types/stack-trace": "0.0.29", - "cookie": "^0.4.1", - "mustache": "^4.2.0", - "stack-trace": "0.0.10" - } - } - }, - "dependencies": { - "@cloudflare/kv-asset-handler": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", - "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", - "dev": true, - "requires": { - "mime": "^3.0.0" - } - }, - "@esbuild-plugins/node-globals-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", - "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", - "dev": true, - "requires": {} - }, - "@esbuild-plugins/node-modules-polyfill": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", - "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", - "dev": true, - "requires": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" - } - }, - "@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true - }, - "@miniflare/cache": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/cache/-/cache-2.13.0.tgz", - "integrity": "sha512-y3SdN3SVyPECWmLAEGkkrv0RB+LugEPs/FeXn8QtN9aE1vyj69clOAgmsDzoh1DpFfFsLKRiv05aWs4m79P8Xw==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "http-cache-semantics": "^4.1.0", - "undici": "5.20.0" - } - }, - "@miniflare/cli-parser": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/cli-parser/-/cli-parser-2.13.0.tgz", - "integrity": "sha512-Nx1PIfuMZ3mK9Dg/JojWZAjHR16h1pcdCFSqYln/ME7y5ifx+P1E5UkShWUQ1cBlibNaltjbJ2n/7stSAsIGPQ==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0", - "kleur": "^4.1.4" - } - }, - "@miniflare/core": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/core/-/core-2.13.0.tgz", - "integrity": "sha512-YJ/C0J3k+7xn4gvlMpvePnM3xC8nOnkweW96cc0IA8kJ1JSmScOO2tZ7rrU1RyDgp6StkAtQBw4yC0wYeFycBw==", - "dev": true, - "requires": { - "@iarna/toml": "^2.2.5", - "@miniflare/queues": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/watcher": "2.13.0", - "busboy": "^1.6.0", - "dotenv": "^10.0.0", - "kleur": "^4.1.4", - "set-cookie-parser": "^2.4.8", - "undici": "5.20.0", - "urlpattern-polyfill": "^4.0.3" - } - }, - "@miniflare/d1": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/d1/-/d1-2.13.0.tgz", - "integrity": "sha512-OslqjO8iTcvzyrC0spByftMboRmHJEyHyTHnlKkjWDGdQQztEOjso2Xj+3I4SZIeUYvbzDRhKLS2QXI9a8LS5A==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/durable-objects": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/durable-objects/-/durable-objects-2.13.0.tgz", - "integrity": "sha512-CRGVBPO9vY4Fc3aV+pdPRVVeYIt64vQqvw+BJbyW+TQtqVP2CGQeziJGnCfcONNNKyooZxGyUkHewUypyH+Qhg==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/storage-memory": "2.13.0", - "undici": "5.20.0" - } - }, - "@miniflare/html-rewriter": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/html-rewriter/-/html-rewriter-2.13.0.tgz", - "integrity": "sha512-XhN7Icyzvtvu+o/A0hrnSiSmla78seCaNwQ9M1TDHxt352I/ahPX4wtPXs6GbKqY0/i+V6yoG2KGFRQ/j59cQQ==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "html-rewriter-wasm": "^0.4.1", - "undici": "5.20.0" - } - }, - "@miniflare/http-server": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/http-server/-/http-server-2.13.0.tgz", - "integrity": "sha512-aMS/nUMTKP15hKnyZboeuWCiqmNrrCu+XRBY/TxDDl07iXcLpiHGf3oVv+yXxXkWlJHJVCbK7i/nXSNPllRMSw==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/web-sockets": "2.13.0", - "kleur": "^4.1.4", - "selfsigned": "^2.0.0", - "undici": "5.20.0", - "ws": "^8.2.2", - "youch": "^2.2.2" - } - }, - "@miniflare/kv": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/kv/-/kv-2.13.0.tgz", - "integrity": "sha512-J0AS5x3g/YVOmHMxMAZs07nRXRvSo9jyuC0eikTBf+4AABvBIyvVYmdTjYNjCmr8O5smcfWBX5S27HelD3aAAQ==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/queues": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/queues/-/queues-2.13.0.tgz", - "integrity": "sha512-Gf/a6M1mJL03iOvNqh3JNahcBfvEMPHnO28n0gkCoyYWGvddIr9lwCdFIa0qwNJsC1fIDRxhPg8PZ5cQLBMwRA==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/r2": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/r2/-/r2-2.13.0.tgz", - "integrity": "sha512-/5k6GHOYMNV/oBtilV9HDXBkJUrx8oXVigG5vxbnzEGRXyVRmR+Glzu7mFT8JiE94XiEbXHk9Qvu1S5Dej3wBw==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0", - "undici": "5.20.0" - } - }, - "@miniflare/runner-vm": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/runner-vm/-/runner-vm-2.13.0.tgz", - "integrity": "sha512-VmKtF2cA8HmTuLXor1THWY0v+DmaobPct63iLcgWIaUdP3MIvL+9X8HDXFAviCR7bCTe6MKxckHkaOj0IE0aJQ==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/scheduler": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/scheduler/-/scheduler-2.13.0.tgz", - "integrity": "sha512-AOaQanoR4NjVEzVGWHnrL15A7aMx+d9AKLJhSDF7KaP+4NrT2Wo2BQuXCpn5oStx3itOdlQpMfqQ139e/I8WhQ==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "cron-schedule": "^3.0.4" - } - }, - "@miniflare/shared": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/shared/-/shared-2.13.0.tgz", - "integrity": "sha512-m8YFQzKmbjberrV9hPzNcQjNCXxjTjXUpuNrIGjAJO7g+BDztUHaZbdd26H9maBDlkeiWxA3hf0mDyCT/6MCMA==", - "dev": true, - "requires": { - "@types/better-sqlite3": "^7.6.0", - "kleur": "^4.1.4", - "npx-import": "^1.1.4", - "picomatch": "^2.3.1" - } - }, - "@miniflare/sites": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/sites/-/sites-2.13.0.tgz", - "integrity": "sha512-/tuzIu00o6CF2tkSv01q02MgEShXBSKx85h9jwWvc+6u7prGacAOer0FA1YNRFbE+t9QIfutAkoPGMA9zYf8+Q==", - "dev": true, - "requires": { - "@miniflare/kv": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/storage-file": "2.13.0" - } - }, - "@miniflare/storage-file": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/storage-file/-/storage-file-2.13.0.tgz", - "integrity": "sha512-LuAeAAY5046rq5U1eFLVkz+ppiFEWytWacpkQw92DvVKFFquZcXSj6WPxZF4rSs23WDk+rdcwuLekbb52aDR7A==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0", - "@miniflare/storage-memory": "2.13.0" - } - }, - "@miniflare/storage-memory": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/storage-memory/-/storage-memory-2.13.0.tgz", - "integrity": "sha512-FnkYcBNXa/ym1ksNilNZycg9WYYKo6cWKplVBeSthRon3e8QY6t3n7/XRseBUo7O6mhDybVTy4wNCP1R2nBiEw==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/watcher": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/watcher/-/watcher-2.13.0.tgz", - "integrity": "sha512-teAacWcpMStoBLbLae95IUaL5lPzjPlXa9lhK9CbRaio/KRMibTMRGWrYos3IVGQRZvklvLwcms/nTvgcdb6yw==", - "dev": true, - "requires": { - "@miniflare/shared": "2.13.0" - } - }, - "@miniflare/web-sockets": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@miniflare/web-sockets/-/web-sockets-2.13.0.tgz", - "integrity": "sha512-+U2/HCf+BetRIgjAnNQjkuN6UeAjQmXifhQC+7CCaX834XJhrKXoR6z2xr2xkg1qj0qQs4D2jWG0KzrO5OUpug==", - "dev": true, - "requires": { - "@miniflare/core": "2.13.0", - "@miniflare/shared": "2.13.0", - "undici": "5.20.0", - "ws": "^8.2.2" - } - }, - "@supabase/functions-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", - "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/gotrue-js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.0.1.tgz", - "integrity": "sha512-PCzHeFhz33lPWLZT+UiVDpGkZQI3K1wwhkhgAjvJdkyCbwK5u+LWWUzz0AX66bGGLpg1IYQIP7oz8V68XVjzMA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/postgrest-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", - "integrity": "sha512-qkY8TqIu5sJuae8gjeDPjEqPrefzcTraW9PNSVJQHq4TEv98ZmwaXGwBGz0bVL63bqrGA5hqREbQHkANUTXrvA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/realtime-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.0.0.tgz", - "integrity": "sha512-DJVt5Z76pik3Fxt1es4fmquq6GrwR3nLqcb2Q6VpHXSudtixML0Cyxsu0DPzxa6ruSQrO9s08s0OQgwaIA1C0Q==", - "requires": { - "@types/phoenix": "^1.5.4", - "websocket": "^1.0.34" - } - }, - "@supabase/storage-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.0.0.tgz", - "integrity": "sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==", - "requires": { - "cross-fetch": "^3.1.5" - } - }, - "@supabase/supabase-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.0.0.tgz", - "integrity": "sha512-8nNMXYzBlQVSDONFaNgyyxsAdUY+C9Q/7vEDYDdTFTyC3i+luXTDOSjHMLcjIky/+x5rIAcNQqqIJ48HJUluXA==", - "requires": { - "@supabase/functions-js": "^2.0.0", - "@supabase/gotrue-js": "^2.0.1", - "@supabase/postgrest-js": "^1.0.0", - "@supabase/realtime-js": "^2.0.0", - "@supabase/storage-js": "^2.0.0", - "cross-fetch": "^3.1.5" - } - }, - "@types/better-sqlite3": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.4.tgz", - "integrity": "sha512-dzrRZCYPXIXfSR1/surNbJ/grU3scTaygS0OMzjlGf71i9sc2fGyHPXXiXmEvNIoE0cGwsanEFMVJxPXmco9Eg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true - }, - "@types/phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" - }, - "@types/stack-trace": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/stack-trace/-/stack-trace-0.0.29.tgz", - "integrity": "sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cron-schedule": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/cron-schedule/-/cron-schedule-3.0.6.tgz", - "integrity": "sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "esbuild": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", - "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", - "dev": true, - "requires": { - "esbuild-android-64": "0.14.47", - "esbuild-android-arm64": "0.14.47", - "esbuild-darwin-64": "0.14.47", - "esbuild-darwin-arm64": "0.14.47", - "esbuild-freebsd-64": "0.14.47", - "esbuild-freebsd-arm64": "0.14.47", - "esbuild-linux-32": "0.14.47", - "esbuild-linux-64": "0.14.47", - "esbuild-linux-arm": "0.14.47", - "esbuild-linux-arm64": "0.14.47", - "esbuild-linux-mips64le": "0.14.47", - "esbuild-linux-ppc64le": "0.14.47", - "esbuild-linux-riscv64": "0.14.47", - "esbuild-linux-s390x": "0.14.47", - "esbuild-netbsd-64": "0.14.47", - "esbuild-openbsd-64": "0.14.47", - "esbuild-sunos-64": "0.14.47", - "esbuild-windows-32": "0.14.47", - "esbuild-windows-64": "0.14.47", - "esbuild-windows-arm64": "0.14.47" - } - }, - "esbuild-android-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", - "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", - "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", - "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", - "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", - "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", - "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", - "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", - "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", - "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", - "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", - "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", - "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", - "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", - "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", - "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", - "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", - "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", - "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", - "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", - "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", - "dev": true, - "optional": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "html-rewriter-wasm": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/html-rewriter-wasm/-/html-rewriter-wasm-0.4.1.tgz", - "integrity": "sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "miniflare": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-2.13.0.tgz", - "integrity": "sha512-ayNhVa4a6bZiOuHtrPmOt4BCYcmW1fBQ/+qGL85smq1m2OBBm3aUs6f4ISf38xH8tk+qewgmAywetyVtn6KHPw==", - "dev": true, - "requires": { - "@miniflare/cache": "2.13.0", - "@miniflare/cli-parser": "2.13.0", - "@miniflare/core": "2.13.0", - "@miniflare/d1": "2.13.0", - "@miniflare/durable-objects": "2.13.0", - "@miniflare/html-rewriter": "2.13.0", - "@miniflare/http-server": "2.13.0", - "@miniflare/kv": "2.13.0", - "@miniflare/queues": "2.13.0", - "@miniflare/r2": "2.13.0", - "@miniflare/runner-vm": "2.13.0", - "@miniflare/scheduler": "2.13.0", - "@miniflare/shared": "2.13.0", - "@miniflare/sites": "2.13.0", - "@miniflare/storage-file": "2.13.0", - "@miniflare/storage-memory": "2.13.0", - "@miniflare/web-sockets": "2.13.0", - "kleur": "^4.1.4", - "semiver": "^1.1.0", - "source-map-support": "^0.5.20", - "undici": "5.20.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - } - } - }, - "npx-import": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/npx-import/-/npx-import-1.1.4.tgz", - "integrity": "sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==", - "dev": true, - "requires": { - "execa": "^6.1.0", - "parse-package-name": "^1.0.0", - "semver": "^7.3.7", - "validate-npm-package-name": "^4.0.0" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "parse-package-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-package-name/-/parse-package-name-1.0.0.tgz", - "integrity": "sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" - } - }, - "rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", - "dev": true, - "requires": { - "rollup-plugin-inject": "^3.0.0" - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - } - }, - "selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "semiver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", - "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", - "dev": true - }, - "semver": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", - "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "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 - }, - "source-map-support": { - "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==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "undici": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", - "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", - "dev": true, - "requires": { - "busboy": "^1.6.0" - } - }, - "urlpattern-polyfill": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-4.0.3.tgz", - "integrity": "sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==", - "dev": true - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrangler": { - "version": "2.0.23", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-2.0.23.tgz", - "integrity": "sha512-qMyK/pmHIrubxuJuXnCwcidY4LlQImcTTyOGoqMJtNz8y+pDfsluExSBpwqGSl3JPUQF2FiofqaBkj/iB8rvYw==", - "dev": true, - "requires": { - "@cloudflare/kv-asset-handler": "^0.2.0", - "@esbuild-plugins/node-globals-polyfill": "^0.1.1", - "@esbuild-plugins/node-modules-polyfill": "^0.1.4", - "blake3-wasm": "^2.1.5", - "chokidar": "^3.5.3", - "esbuild": "0.14.47", - "fsevents": "~2.3.2", - "miniflare": "^2.6.0", - "nanoid": "^3.3.3", - "path-to-regexp": "^6.2.0", - "selfsigned": "^2.0.1", - "xxhash-wasm": "^1.0.1" - } - }, - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "requires": {} - }, - "xxhash-wasm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.1.tgz", - "integrity": "sha512-Lc9CTvDrH2vRoiaUzz25q7lRaviMhz90pkx6YxR9EPYtF99yOJnv2cB+CQ0hp/TLoqrUsk8z/W2EN31T568Azw==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "youch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/youch/-/youch-2.2.2.tgz", - "integrity": "sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ==", - "dev": true, - "requires": { - "@types/stack-trace": "0.0.29", - "cookie": "^0.4.1", - "mustache": "^4.2.0", - "stack-trace": "0.0.10" - } - } - } -} diff --git a/examples/with-cloudflare-workers/package.json b/examples/with-cloudflare-workers/package.json deleted file mode 100644 index fe96ee98cc9e9..0000000000000 --- a/examples/with-cloudflare-workers/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "supabase-at-the-edge", - "version": "0.0.0", - "devDependencies": { - "wrangler": "2.0.23" - }, - "private": true, - "scripts": { - "start": "wrangler dev", - "deploy": "wrangler publish" - }, - "dependencies": { - "@supabase/supabase-js": "^2.0.0" - } -} diff --git a/examples/with-cloudflare-workers/src/index.js b/examples/with-cloudflare-workers/src/index.js deleted file mode 100644 index 5b119a8af9f54..0000000000000 --- a/examples/with-cloudflare-workers/src/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import { createClient } from "@supabase/supabase-js"; - -export default { - async fetch(request, { SUPABASE_URL, SUPABASE_ANON_KEY }) { - const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY); - - const { data } = await supabase.from("articles").select("*"); - return new Response(JSON.stringify(data), { - headers: { - "Content-Type": "application/json", - }, - }); - }, -}; diff --git a/examples/with-cloudflare-workers/wrangler.toml b/examples/with-cloudflare-workers/wrangler.toml deleted file mode 100644 index 1bab496e86be2..0000000000000 --- a/examples/with-cloudflare-workers/wrangler.toml +++ /dev/null @@ -1,3 +0,0 @@ -name = "supabase-at-the-edge" -main = "src/index.js" -compatibility_date = "2022-07-26" diff --git a/package.json b/package.json index 7b3a927dbeca0..a7015c72f8ec3 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,6 @@ "private": true, "workspaces": [ "apps/www", - "apps/docs", "studio", "tests", "packages/*" diff --git a/studio/.env b/studio/.env index 8e5892b00b6e6..0b6aeab143976 100644 --- a/studio/.env +++ b/studio/.env @@ -1,6 +1,6 @@ STUDIO_PG_META_URL=http://localhost:8000/pg POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password - +NEXT_PUBLIC_IS_PLATFORM=true DEFAULT_ORGANIZATION_NAME=Default Organization DEFAULT_PROJECT_NAME=Default Project